From 1658ade83ac149afd35d3f0df341a1d5eab02dce Mon Sep 17 00:00:00 2001 From: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:02:40 +0200 Subject: [PATCH 01/15] Change amount of pictures for different size of screen (#1096) * Change amount of pictures for different size of sreenview * - change breakpoint to standard 768 --------- Co-authored-by: Oleh-Kril --- .../TeamPostionSlider.component.tsx | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/features/AboutUsPage/TeamMembers/TeamPositionsSlider/TeamPostionSlider.component.tsx b/src/features/AboutUsPage/TeamMembers/TeamPositionsSlider/TeamPostionSlider.component.tsx index 63b0a6d4d..d5fad5990 100644 --- a/src/features/AboutUsPage/TeamMembers/TeamPositionsSlider/TeamPostionSlider.component.tsx +++ b/src/features/AboutUsPage/TeamMembers/TeamPositionsSlider/TeamPostionSlider.component.tsx @@ -15,6 +15,7 @@ interface Props { const SliderComponents = ({ positions, setActive }: Props) => { const [swiper, setSwiper] = useState(null); + const [slidesPerView, setSlidesPerView] = useState(5); const handlePreviousSlide = () => { if (swiper) { @@ -40,7 +41,7 @@ const SliderComponents = ({ positions, setActive }: Props) => {
{ navigation={{ nextEl: '.arrow-left', prevEl: '.arrow-right' }} modules={[Navigation]} breakpoints={{ - 360: { + 320: { slidesPerView: 1, }, - 425: { + 768: { slidesPerView: 3, }, - 768: { - slidesPerView: 5, + 1024: { + slidesPerView: slidesPerView, }, }} > From 31b9cb85e0f40f22215e6a26ed8666646021da6e Mon Sep 17 00:00:00 2001 From: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:03:10 +0200 Subject: [PATCH 02/15] Gmail is opened in new tab (#1087) --- .../SubSectionSeventh/SectionSeventh.component.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/features/AdditionalPages/PrivatePolicyPage/SubSections/SubSectionSeventh/SectionSeventh.component.tsx b/src/features/AdditionalPages/PrivatePolicyPage/SubSections/SubSectionSeventh/SectionSeventh.component.tsx index ee3770271..affe226f9 100644 --- a/src/features/AdditionalPages/PrivatePolicyPage/SubSections/SubSectionSeventh/SectionSeventh.component.tsx +++ b/src/features/AdditionalPages/PrivatePolicyPage/SubSections/SubSectionSeventh/SectionSeventh.component.tsx @@ -13,7 +13,9 @@ const SectionSeventh = () => ( З питань щодо політики конфіденційності (в т.ч. видалення персональних даних), Користувач може зв'язатися з нами, використовуючи e—mail: - {EMAIL_INFO.EMAIL} + + {EMAIL_INFO.EMAIL} + .
From d1cf99e61ab2024cab1beec56fadf2bf85fed48f Mon Sep 17 00:00:00 2001 From: Oleh-Kril <91199925+Oleh-Kril@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:05:03 +0200 Subject: [PATCH 03/15] - refactor to open in a new tab (#1093) --- .../MainPage/InstagramBlock/InstagramBlock.component.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/features/MainPage/InstagramBlock/InstagramBlock.component.tsx b/src/features/MainPage/InstagramBlock/InstagramBlock.component.tsx index 027eca5d9..2dbf94641 100644 --- a/src/features/MainPage/InstagramBlock/InstagramBlock.component.tsx +++ b/src/features/MainPage/InstagramBlock/InstagramBlock.component.tsx @@ -47,7 +47,7 @@ const InstagramBlock = () => { )); const handleClick = () => { - window.location.assign('https://www.instagram.com/streetcodeua/'); + window.open('https://www.instagram.com/streetcodeua/', '_blank'); }; return ( From 1cbda01a8e24aaa3f28292949bfbfad8ebf32b59 Mon Sep 17 00:00:00 2001 From: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:05:38 +0200 Subject: [PATCH 04/15] fix modals closing (#1085) * fix modals closing * separate arrow function from props --------- Co-authored-by: Oleh-Kril --- .../DeleteStreetcode/DeleteStreetcodeModal.component.tsx | 3 ++- .../components/modals/Donates/DonatesModal.component.tsx | 2 +- .../modals/HeaderLogin/HeaderLoginModal.component.tsx | 4 ++-- .../InterestingFacts/InterestingFactsModal.component.tsx | 4 +++- .../modals/MapStatisticsModal/StatisticsModal.component.tsx | 2 +- .../RelatedFigures/RelatedFigureItemModal.component.tsx | 4 ++-- .../components/modals/Sources/SourcesModal.component.tsx | 4 +++- .../components/modals/Survey/SurveyModal.component.tsx | 2 +- .../common/components/modals/Tags/TagsModal.component.tsx | 2 +- .../modals/Terms/DeleteTerm/DeleteTermModal.component.tsx | 3 ++- .../modals/Terms/EditTerm/EditTermModal.component.tsx | 2 +- src/app/layout/ModalWrapper.component.tsx | 2 -- .../AboutUsPage/Vacancies/Vacancy/Vacancy.component.tsx | 5 +---- .../Vacancy/VacancyModal/VacancyModal.component.tsx | 1 - 14 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.tsx b/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.tsx index 905dc2c67..e7c2d2ef9 100644 --- a/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.tsx +++ b/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.tsx @@ -8,6 +8,7 @@ import { Button, Modal } from 'antd'; const DeleteStreetcodeModal = () => { const { modalStore: { setModal, modalsState: { deleteStreetcode } } } = useModalContext(); + const clickHandle = () => deleteStreetcode.isOpen = false; const confirmHandler = () => { setModal('deleteStreetcode'); @@ -18,7 +19,7 @@ const DeleteStreetcodeModal = () => { title="Delete streetcode" open={deleteStreetcode.isOpen} onOk={() => confirmHandler()} - onCancel={() => setModal('deleteStreetcode')} + onCancel={clickHandle} className="deleteModal" > {deleteStreetcode.fromCardId} diff --git a/src/app/common/components/modals/Donates/DonatesModal.component.tsx b/src/app/common/components/modals/Donates/DonatesModal.component.tsx index 8c7360a36..7831acf54 100644 --- a/src/app/common/components/modals/Donates/DonatesModal.component.tsx +++ b/src/app/common/components/modals/Donates/DonatesModal.component.tsx @@ -32,7 +32,7 @@ const DonatesModal = () => { }; const handleModalClose = () => { - setModal('donates'); + donates.isOpen = false; setDonateAmount(0); }; diff --git a/src/app/common/components/modals/HeaderLogin/HeaderLoginModal.component.tsx b/src/app/common/components/modals/HeaderLogin/HeaderLoginModal.component.tsx index cda532005..008373c2e 100644 --- a/src/app/common/components/modals/HeaderLogin/HeaderLoginModal.component.tsx +++ b/src/app/common/components/modals/HeaderLogin/HeaderLoginModal.component.tsx @@ -22,7 +22,7 @@ const HeaderLoginModal = () => { const [hasVacancies, setHasVacancies] = useState(false); const SURVEY_LINK = 'https://forms.gle/eWwX5RP84X7dymLR6'; const { modalStore: { setModal, modalsState: { login } } } = useModalContext(); - + const handleClick = () => login.isOpen = false; useEffect(() => { JobApi.getActive() .then( @@ -54,7 +54,7 @@ const HeaderLoginModal = () => { maskClosable centered footer={null} - onCancel={() => setModal('login')} + onCancel={handleClick} closeIcon={} >
diff --git a/src/app/common/components/modals/InterestingFacts/InterestingFactsModal.component.tsx b/src/app/common/components/modals/InterestingFacts/InterestingFactsModal.component.tsx index 2ccc5379d..a5645afb5 100644 --- a/src/app/common/components/modals/InterestingFacts/InterestingFactsModal.component.tsx +++ b/src/app/common/components/modals/InterestingFacts/InterestingFactsModal.component.tsx @@ -18,6 +18,8 @@ const InterestingFactsModal = () => { const [descriptionVisible, setDescriptionVisible] = useState(false); const factId = facts.fromCardId!; const fact = factMap.get(factId); + const clickHandle = () => facts.isOpen = false; + useEffect(() => { if (fact?.image?.imageDetails?.alt) { setDescriptionVisible(true); @@ -31,7 +33,7 @@ const InterestingFactsModal = () => { setModal('facts')} + onCancel={clickHandle} footer={null} maskClosable centered diff --git a/src/app/common/components/modals/MapStatisticsModal/StatisticsModal.component.tsx b/src/app/common/components/modals/MapStatisticsModal/StatisticsModal.component.tsx index 6c78de1f1..3a75c75d1 100644 --- a/src/app/common/components/modals/MapStatisticsModal/StatisticsModal.component.tsx +++ b/src/app/common/components/modals/MapStatisticsModal/StatisticsModal.component.tsx @@ -32,7 +32,7 @@ const StatisticsModal = () => { const { setModal, modalsState: { statistics } } = modalStore; const countByStreetTypeMap = countByStreetType(toponymContext.toponyms); const handleModalClose = () => { - setModal('statistics'); + statistics.isOpen = false; }; const [headingText, setHeadingText] = useState('цього стріткоду'); useEffect(() => { diff --git a/src/app/common/components/modals/RelatedFigures/RelatedFigureItemModal.component.tsx b/src/app/common/components/modals/RelatedFigures/RelatedFigureItemModal.component.tsx index 9bcb095bd..a88121e90 100644 --- a/src/app/common/components/modals/RelatedFigures/RelatedFigureItemModal.component.tsx +++ b/src/app/common/components/modals/RelatedFigures/RelatedFigureItemModal.component.tsx @@ -17,7 +17,7 @@ const RelatedFiguresItemModal = () => { const relation = relatedFiguresMap.get(relationId); const handleClick = () => { - setModal('relatedFigureItem', relation?.id, false); + relatedFigureItem.isOpen = false; }; return ( @@ -27,7 +27,7 @@ const RelatedFiguresItemModal = () => { maskClosable centered footer={null} - onCancel={() => setModal('relatedFigureItem')} + onCancel={handleClick} closeIcon={} >
diff --git a/src/app/common/components/modals/Sources/SourcesModal.component.tsx b/src/app/common/components/modals/Sources/SourcesModal.component.tsx index 0f398031c..e9b0dd0a3 100644 --- a/src/app/common/components/modals/Sources/SourcesModal.component.tsx +++ b/src/app/common/components/modals/Sources/SourcesModal.component.tsx @@ -23,6 +23,8 @@ const SourcesModal = () => { const [content, setContent] = useState(); const categoryId = sources.fromCardId!; const category = srcCategoriesMap.get(categoryId); + const clickHandle = () => sources.isOpen = false; + useAsync(() => { if (streetcodeStore.getStreetCodeId && categoryId) { sourcesApi.getCategoryContentByStreetcodeId(streetcodeStore.getStreetCodeId, categoryId) @@ -38,7 +40,7 @@ const SourcesModal = () => { maskClosable centered footer={null} - onCancel={() => setModal('sources', categoryId)} + onCancel={clickHandle} closeIcon={windowsize.width <= 1024 ? : } >
diff --git a/src/app/common/components/modals/Survey/SurveyModal.component.tsx b/src/app/common/components/modals/Survey/SurveyModal.component.tsx index 579e7a0fe..b5bfcdf1a 100644 --- a/src/app/common/components/modals/Survey/SurveyModal.component.tsx +++ b/src/app/common/components/modals/Survey/SurveyModal.component.tsx @@ -16,7 +16,7 @@ const SurveyModal = () => { const { setModal, modalsState: { survey } } = modalStore; const handleModalClose = () => { - setModal('survey'); + survey.isOpen = false; }; return ( diff --git a/src/app/common/components/modals/Tags/TagsModal.component.tsx b/src/app/common/components/modals/Tags/TagsModal.component.tsx index 48e89abbb..ee773fa4f 100644 --- a/src/app/common/components/modals/Tags/TagsModal.component.tsx +++ b/src/app/common/components/modals/Tags/TagsModal.component.tsx @@ -47,7 +47,7 @@ const TagsModal = ({ activeTagId, setActiveTagId, setShowAllTags, showAllTags } footer={null} closeIcon={} onCancel={() => { - setModal('tagsList'); + tagsList.isOpen = false; }} >
diff --git a/src/app/common/components/modals/Terms/DeleteTerm/DeleteTermModal.component.tsx b/src/app/common/components/modals/Terms/DeleteTerm/DeleteTermModal.component.tsx index bdeb73275..ff90661e6 100644 --- a/src/app/common/components/modals/Terms/DeleteTerm/DeleteTermModal.component.tsx +++ b/src/app/common/components/modals/Terms/DeleteTerm/DeleteTermModal.component.tsx @@ -16,13 +16,14 @@ interface Props { const DeleteTermModal = ({ handleDelete, term } : Props) => { const { modalStore: { setModal, modalsState: { deleteTerm } } } = useModalContext(); + const clickHandle = () => deleteTerm.isOpen = false; return ( } open={deleteTerm.isOpen} - onCancel={() => setModal('deleteTerm')} + onCancel={clickHandle} onOk={() => { handleDelete(term?.id as number); setModal('deleteTerm'); diff --git a/src/app/common/components/modals/Terms/EditTerm/EditTermModal.component.tsx b/src/app/common/components/modals/Terms/EditTerm/EditTermModal.component.tsx index f94021178..6aa62511a 100644 --- a/src/app/common/components/modals/Terms/EditTerm/EditTermModal.component.tsx +++ b/src/app/common/components/modals/Terms/EditTerm/EditTermModal.component.tsx @@ -34,7 +34,7 @@ const EditTermModal = ({ handleEdit, term } : Props) => { const onCancel = () => { form.resetFields(); - setModal('editTerm'); + editTerm.isOpen = false; }; useEffect(() => { diff --git a/src/app/layout/ModalWrapper.component.tsx b/src/app/layout/ModalWrapper.component.tsx index bf26aed09..53d5a2f47 100644 --- a/src/app/layout/ModalWrapper.component.tsx +++ b/src/app/layout/ModalWrapper.component.tsx @@ -11,8 +11,6 @@ import RelatedFiguresModal from '@components/modals/RelatedFigures/RelatedFigure import SourcesModal from '@components/modals/Sources/SourcesModal.component'; import SurveyModal from '@components/modals/Survey/SurveyModal.component'; -import VacancyModal from '../../features/AboutUsPage/Vacancies/Vacancy/VacancyModal/Vacancy/VacancyModal.component'; - const ModalWrapper = () => ( <> diff --git a/src/features/AboutUsPage/Vacancies/Vacancy/Vacancy.component.tsx b/src/features/AboutUsPage/Vacancies/Vacancy/Vacancy.component.tsx index e50cb9dd6..ed4b32cf7 100644 --- a/src/features/AboutUsPage/Vacancies/Vacancy/Vacancy.component.tsx +++ b/src/features/AboutUsPage/Vacancies/Vacancy/Vacancy.component.tsx @@ -10,9 +10,6 @@ import VacancyModal from './VacancyModal/VacancyModal.component'; const Vacancy = (job: Job) => { const [isModalOpen, setIsModalOpen] = useState(false); - const ChangeStatus = () => { - setIsModalOpen(!isModalOpen); - }; return (
{ subTitle={job.salary} moreBtnText="Трохи ще" /> - +
); }; diff --git a/src/features/AboutUsPage/Vacancies/Vacancy/VacancyModal/VacancyModal.component.tsx b/src/features/AboutUsPage/Vacancies/Vacancy/VacancyModal/VacancyModal.component.tsx index 7474b8cca..213635ac1 100644 --- a/src/features/AboutUsPage/Vacancies/Vacancy/VacancyModal/VacancyModal.component.tsx +++ b/src/features/AboutUsPage/Vacancies/Vacancy/VacancyModal/VacancyModal.component.tsx @@ -50,7 +50,6 @@ const VacancyModal = ({ isOpen, setOpen, job }: Props) => { footer={null} width={getWidth()} > -

{job.title}

From 25de862965c5698586784a20f6dee4f26e2a772e Mon Sep 17 00:00:00 2001 From: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Date: Wed, 10 Jan 2024 17:09:26 +0200 Subject: [PATCH 05/15] New editor v2 (#1086) * Initial react-quill config (news/main streetcode text). Needs cleaning & refactoring * Added quill everywhere, needs refactoring * cleaned code * Fixed text updating in ForFans admin block * Added utility to convert content to quill delta * Added validation when empty text fields in modals * Fixed bug with max length quill * Added the impossibility of saving a record with improper length * Cleaned code * Refactoring of editor * Removed package-lock.json changes from PR --- package.json | 3 + .../Editor/EditorExtensions/LinkHandler.ts | 31 ++++ .../EditorUtilities/quillUtils.utility.ts | 16 ++ .../components/Editor/QEditor.component.tsx | 133 +++++++++++++++ .../components/Editor/QEditor.styles.scss | 39 +++++ .../common/utils/removeHtmlTags.utility.ts | 6 + .../JobsModal/JobsModal.component.tsx | 93 +++-------- .../ForFansAdminModal.component.tsx | 135 +++++++-------- .../MainNewStreetcode.component.tsx | 17 +- ...AdditionalTextBlockAdminForm.component.tsx | 74 ++------ .../TextForm/Editors/TextEditor.component.tsx | 158 ++---------------- .../TextBlock/TextForm/TextForm.component.tsx | 6 +- .../textMaxLength.constant.ts | 6 + .../NewsModal/NewsModal.component.tsx | 110 ++++-------- 14 files changed, 396 insertions(+), 431 deletions(-) create mode 100644 src/app/common/components/Editor/EditorExtensions/LinkHandler.ts create mode 100644 src/app/common/components/Editor/EditorUtilities/quillUtils.utility.ts create mode 100644 src/app/common/components/Editor/QEditor.component.tsx create mode 100644 src/app/common/components/Editor/QEditor.styles.scss create mode 100644 src/app/common/utils/removeHtmlTags.utility.ts create mode 100644 src/features/AdminPage/NewStreetcode/TextBlock/TextLengthConstants/textMaxLength.constant.ts diff --git a/package.json b/package.json index 1ee225061..08a0b25d6 100644 --- a/package.json +++ b/package.json @@ -47,6 +47,7 @@ "maplibre-gl": "^2.4.0", "mobx": "^6.7.0", "mobx-react-lite": "^3.4.0", + "quill": "^1.3.7", "rc-slider": "^10.1.1", "react": "^18.2.0", "react-awesome-ticker": "^1.0.0", @@ -66,6 +67,7 @@ "react-leaflet-vector-tile-layer": "^0.2.0", "react-map-gl": "^7.0.21", "react-player": "^2.11.0", + "react-quill": "^2.0.0", "react-remove-scroll": "^2.5.5", "react-resize-detector": "^7.1.2", "react-responsive": "^9.0.2", @@ -126,6 +128,7 @@ "@svgr/webpack": "^6.5.1", "@types/html-to-text": "^9.0.4", "@types/leaflet": "^1.9.0", + "@types/quill": "^2.0.14", "@types/react-beautiful-dnd": "^13.1.3", "@types/react-google-recaptcha": "^2.1.5", "@types/react-helmet": "^6.1.7", diff --git a/src/app/common/components/Editor/EditorExtensions/LinkHandler.ts b/src/app/common/components/Editor/EditorExtensions/LinkHandler.ts new file mode 100644 index 000000000..eb6f97389 --- /dev/null +++ b/src/app/common/components/Editor/EditorExtensions/LinkHandler.ts @@ -0,0 +1,31 @@ +import { Quill } from 'react-quill'; + +const BaseLink = Quill.import('formats/link'); + +class LinkHandler extends BaseLink { + format(name: string, va: string) { + if (['href', 'target'].indexOf(name) > -1) { + if (va) { + this.domNode.setAttribute(name, va); + } else { + this.domNode.removeAttribute(name); + } + } else { + super.format(name, va); + } + } + + static create(va: string) { + const node = super.create(va); + node.setAttribute('href', this.sanitize(va)); + if (va.startsWith('https://streetcode.com.ua')) { + node.setAttribute('target', '_self'); + } else { + node.setAttribute('target', '_blank'); + } + return node; + } +} +Quill.register(LinkHandler, true); + +export default LinkHandler; diff --git a/src/app/common/components/Editor/EditorUtilities/quillUtils.utility.ts b/src/app/common/components/Editor/EditorUtilities/quillUtils.utility.ts new file mode 100644 index 000000000..40333e01f --- /dev/null +++ b/src/app/common/components/Editor/EditorUtilities/quillUtils.utility.ts @@ -0,0 +1,16 @@ +import QuillEditor from 'react-quill'; + +export const setQuillEditorContent = (currentEditor: QuillEditor | null, text: string) => { + if (currentEditor && currentEditor.editor) { + const delta = currentEditor.editor.clipboard.convert(text); + currentEditor.editor.setContents(delta); + } +}; + +export const checkQuillEditorTextLength = (currentEditor: QuillEditor | null, maxChars: number) => { + if (currentEditor && currentEditor.editor) { + if (currentEditor.editor.getText().length > maxChars) { + throw new Error(); + } + } +}; diff --git a/src/app/common/components/Editor/QEditor.component.tsx b/src/app/common/components/Editor/QEditor.component.tsx new file mode 100644 index 000000000..f8e383107 --- /dev/null +++ b/src/app/common/components/Editor/QEditor.component.tsx @@ -0,0 +1,133 @@ +/* eslint-disable react/jsx-one-expression-per-line */ +import './QEditor.styles.scss'; + +import React, { useEffect, useRef, useState } from 'react'; +import ReactQuill, { UnprivilegedEditor } from 'react-quill'; +import removeHtmlTags from '@app/common/utils/removeHtmlTags.utility'; +import { Sources } from 'quill'; + +import 'react-quill/dist/quill.snow.css'; + +import LinkHandler from './EditorExtensions/LinkHandler'; + +interface EditorProps { + qRef: React.RefObject, + value: string; + onChange: (html: string) => void; + maxChars: number, + initialVal?: string, + selectionChange?: (selection: string) => void; +} + +const Editor: React.FC = ({ + qRef, value, onChange, maxChars, initialVal, selectionChange, +}) => { + const [val, setVal] = useState(value); + const [rawText, setRawText] = useState(removeHtmlTags(value) ?? ''); + const [characterCount, setCharacterCount] = useState(rawText.length ?? 0); + const [validateDescription, setValidateDescription] = useState(false); + const quillRef = useRef(null); + const availableButtons = new Set(['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', + 'ArrowUp', 'ArrowDown', 'Home', 'End']); + + const countCharacters = (content: string) => { + const textWithoutTags = removeHtmlTags(content); + const count = textWithoutTags.length; + setCharacterCount(count); + }; + + useEffect(() => { + const valueWithoutHtml = removeHtmlTags(value); + setRawText(valueWithoutHtml); + }, [value]); + + useEffect(() => { + if (characterCount > maxChars) { + setValidateDescription(true); + } else { + setValidateDescription(false); + } + }, [characterCount, maxChars]); + + const handleOnChange = (html: string) => { + onChange(html); + setVal(html); + countCharacters(html); + }; + + const handleSelectionChange = (range: ReactQuill.Range | null, source: Sources, editor: UnprivilegedEditor) => { + if (range && range.index != null && range.length != null) { + const selectedText = editor.getText(range.index, range.length); + if (selectionChange) { + selectionChange(selectedText); + } + } + }; + + const modules = { + toolbar: { + container: [ + [{ header: [1, 2, 3, 4, 5, 6] }], + ['bold', 'italic', 'strike', 'underline', 'link'], + [ + { list: 'ordered' }, + { list: 'bullet' }, + ], + ['clean'], + ], + link: LinkHandler, + }, + }; + + const formats = [ + 'header', 'size', 'bold', 'italic', 'underline', 'strike', + 'list', 'bullet', 'indent', 'align', 'link', 'clean', + ]; + + const handleKeyDown = (e: React.KeyboardEvent) => { + if (characterCount >= maxChars) { + setValidateDescription(true); + if (!availableButtons.has(e.key) && quillRef.current?.editor?.getSelection()?.length === 0) { + e.preventDefault(); + } + } + }; + + const handleQuillRef = (el) => { + quillRef.current = el; + if (qRef) { + qRef.current = el; + } + }; + + return ( + <> +
+ +
+
+ {validateDescription && ( + + Максимальна довжина - {maxChars} + + )} +
+ Символи: {characterCount}/{maxChars} +
+
+ + ); +}; + +export default Editor; diff --git a/src/app/common/components/Editor/QEditor.styles.scss b/src/app/common/components/Editor/QEditor.styles.scss new file mode 100644 index 000000000..744342386 --- /dev/null +++ b/src/app/common/components/Editor/QEditor.styles.scss @@ -0,0 +1,39 @@ +@use "@sass/_utils.functions.scss" as f; + +.ql-toolbar button { + height: f.pxToRem(26px) !important; + width: f.pxToRem(30px) !important; +} + +.quillEditor { + margin-bottom: f.pxToRem(35px); +} + +.editorInfoContainer { + display: flex; + flex-direction: row; + padding-top: f.pxToRem(10px); + gap: f.pxToRem(50px); + transition: margin-left 0.3s ease; +} + +.charsCounter { + max-width: fit-content; + font-size: 14px; + font-weight: bold; + margin-left: auto; +} + +.quillEditor .ql-editor u { + text-decoration: underline; +} + +.quillEditor .ql-editor s { + text-decoration: line-through; +} + +.validateLabelDescription { + max-width: fit-content; + color: red; + font-size: 14px; +} diff --git a/src/app/common/utils/removeHtmlTags.utility.ts b/src/app/common/utils/removeHtmlTags.utility.ts new file mode 100644 index 000000000..42783deb8 --- /dev/null +++ b/src/app/common/utils/removeHtmlTags.utility.ts @@ -0,0 +1,6 @@ +const removeHtmlTags = (content: string) => content.replace(/<[^>]*>| /g, (match) => { + if (match === ' ') return ' '; + return ''; +}); + +export default removeHtmlTags; diff --git a/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx b/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx index 858971712..549c608fc 100644 --- a/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx +++ b/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx @@ -2,8 +2,8 @@ import './JobsModal.styles.scss'; import { observer } from 'mobx-react-lite'; import { useEffect, useRef, useState } from 'react'; +import ReactQuill from 'react-quill'; import CancelBtn from '@assets/images/utils/Cancel_btn.svg'; -import { Editor as TinyMCEEditor } from '@tinymce/tinymce-react/lib/cjs/main/ts/components/Editor'; import { Button, Form, Input, message, Modal, Popover, @@ -12,6 +12,11 @@ import { import FormItem from 'antd/es/form/FormItem'; import JobApi from '@/app/api/job/Job.api'; +import { + checkQuillEditorTextLength, + setQuillEditorContent, +} from '@/app/common/components/Editor/EditorUtilities/quillUtils.utility'; +import Editor from '@/app/common/components/Editor/QEditor.component'; interface Props { open: boolean, @@ -19,21 +24,19 @@ interface Props { currentId: number, } -const JobsModal = ({ open, setOpen, currentId } : Props) => { +const JobsModal = ({ open, setOpen, currentId }: Props) => { const maxLengths = { maxLenghtVacancyName: 50, maxLenghtVacancyDesc: 2000, maxLenghtVacancySalary: 15, }; - const textEditor = useRef(); + const textEditor = useRef(null); const [current, setCurrent] = useState(); const [form] = Form.useForm(); - const setOfKeys = new Set(['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'End', 'Home']); const [storedJob, setStoredJob] = useState(); - const [validateDescription, setValidateDescription] = useState(true); - const emptyJob : Job = { + const emptyJob: Job = { title: form.getFieldValue('title'), - description: form.getFieldValue('description'), + description: '', status: form.getFieldValue('status'), id: 0, salary: form.getFieldValue('salary'), @@ -45,7 +48,7 @@ const JobsModal = ({ open, setOpen, currentId } : Props) => { try { const currentJob = await JobApi.getById(currentId); setCurrent(currentJob); - textEditor.current?.editor?.setContent(currentJob?.description); + setQuillEditorContent(textEditor.current, currentJob?.description); form.setFieldsValue({ title: currentJob?.title, status: currentJob?.status ? 'setActive' : 'setInactive', @@ -66,14 +69,14 @@ const JobsModal = ({ open, setOpen, currentId } : Props) => { } }; - textEditor.current?.editor?.setContent(''); + textEditor.current?.editor?.setText(''); fetchJobData(); }, [open, currentId, form]); const handleSave = async () => { try { const values = await form.validateFields(); - + checkQuillEditorTextLength(textEditor?.current, maxLengths.maxLenghtVacancyDesc); const { title, status, description, salary } = values; const isActive = status === 'setActive'; @@ -81,7 +84,7 @@ const JobsModal = ({ open, setOpen, currentId } : Props) => { id: currentId, title, status: isActive, - description: current.description, + description: current?.description ?? '', salary, }; const allJobs = await JobApi.getAllShort(); @@ -94,18 +97,17 @@ const JobsModal = ({ open, setOpen, currentId } : Props) => { await JobApi.update(newJob); } message.success('Вакансію успішно додано!', 2); - } catch (error) { - console.log(error); + } catch { + message.error('Будь ласка, перевірте введені дані', 2); } }; const clearModal = () => { form.resetFields(); - setValidateDescription(true); setOpen(false); }; - const handleEditorChange = (content: string, editor: any) => { + const handleEditorChange = (content: string) => { setCurrent({ ...current, description: content }); }; @@ -161,63 +163,12 @@ const JobsModal = ({ open, setOpen, currentId } : Props) => { - { - handleEditorChange(event, editor); - }} - init={{ - max_chars: maxLengths.maxLenghtVacancyDesc, - language: 'uk', - height: 300, - menubar: false, - init_instance_callback(editor) { - editor.setContent(current?.description ?? ''); - }, - plugins: [ - 'autolink', - 'lists', 'preview', 'anchor', 'searchreplace', 'visualblocks', - 'insertdatetime', 'wordcount', 'link', 'lists', - ], - toolbar: 'undo redo blocks bold italic link align | underline superscript subscript ' - + 'formats blockformats align | removeformat strikethrough ', - content_style: 'body {font - family:Roboto,Helvetica Neue,sans-serif; font-size:14px }', - link_title: false, - link_target_list: false, - }} - onPaste={(e, editor) => { - const previousContent = editor.getContent({ format: 'text' }); - const clipboardContent = e.clipboardData?.getData('text') || ''; - const resultContent = previousContent + clipboardContent; - const isSelectionEnd = editor.selection.getSel()?.anchorOffset == previousContent.length; - - if (resultContent.length >= maxLengths.maxLenghtVacancyDesc && isSelectionEnd) { - editor.setContent(previousContent + clipboardContent.substring(0, maxLengths.maxLenghtVacancyDesc - previousContent.length)); - e.preventDefault(); - } - if (resultContent.length <= maxLengths.maxLenghtVacancyDesc && !isSelectionEnd) { - return; - } - if (resultContent.length >= maxLengths.maxLenghtVacancyDesc && !isSelectionEnd) { - e.preventDefault(); - } - }} - onKeyDown={(e, editor) => { - if (editor.getContent({ format: 'text' }).length >= maxLengths.maxLenghtVacancyDesc - && !setOfKeys.has(e.key) - && editor.selection.getContent({ format: 'text' }).length === 0) { - e.preventDefault(); - setValidateDescription(false); - } else { - setValidateDescription(true); - } - }} - onChange={(e, editor) => { - setCurrent({ ...current, description: editor.getContent() }); - }} + - {!validateDescription ? : <>} { const { sourceCreateUpdateStreetcode, sourcesAdminStore } = useMobx(); - const editorRef = useRef(null); + const editorRef = useRef(null); const categoryUpdate = useRef(); const [availableCategories, setAvailableCategories] = useState([]); const [Categories, setCategories] = useState([]); const [isAddModalVisible, setIsAddModalVisible] = useState(false); const [form] = Form.useForm(); - const [selectedText, setSelected] = useState(''); const [editorContent, setEditorContent] = useState(''); - const setOfKeys = new Set(['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'End', 'Home']); + const [textIsPresent, setTextIsPresent] = useState(false); + const [textIsChanged, setTextIsChanged] = useState(false); const maxLength = character_limit || 10000; + message.config({ + top: 100, + duration: 3, + maxCount: 3, + }); + const getAvailableCategories = async (isNewCat: boolean): Promise => { try { const categories = await SourcesApi.getAllCategories(); @@ -64,8 +75,11 @@ const ForFansModal = ({ const selectedIds = selected.map((srcCatContent) => srcCatContent.sourceLinkCategoryId); const available = allCategories.filter((c) => !selectedIds.includes(c.id)); if (categoryUpdate.current) { - // eslint-disable-next-line max-len - available.push(allCategories[allCategories.findIndex((c) => c.id === categoryUpdate.current?.sourceLinkCategoryId)]); + const sourceLinkCategoryId = categoryUpdate.current?.sourceLinkCategoryId; + const foundCategoryIndex = allCategories.findIndex((c) => c.id === sourceLinkCategoryId); + if (foundCategoryIndex !== -1) { + available.push(allCategories[foundCategoryIndex]); + } } if (isNewCat) { const allCategoriesIds = allCategories.map((c) => c.id); @@ -80,6 +94,8 @@ const ForFansModal = ({ const clearModal = () => { form.resetFields(); + setTextIsPresent(false); + setTextIsChanged(false); setOpen(false); }; @@ -90,12 +106,15 @@ const ForFansModal = ({ useEffect(() => { categoryUpdate.current = sourceCreateUpdateStreetcode.ElementToUpdate; + const categoryText = categoryUpdate?.current?.text; if (categoryUpdate.current && open) { - setEditorContent(categoryUpdate.current.text ?? ''); + setEditorContent(categoryText ?? ''); + setQuillEditorContent(editorRef.current, categoryText ?? ''); form.setFieldValue('category', categoryUpdate.current.sourceLinkCategoryId); } else { categoryUpdate.current = null; setEditorContent(''); + editorRef.current?.editor?.setText(''); form.setFieldValue('category', ''); } @@ -122,11 +141,12 @@ const ForFansModal = ({ isEditedCategoryPersisted: boolean, ) => { if (!isEditedCategoryPersisted) { + console.log(editorContent); sourceCreateUpdateStreetcode .addSourceCategoryContent({ id: getNewMinNegativeId(sourceCreateUpdateStreetcode.streetcodeCategoryContents.map((x) => x.id)), sourceLinkCategoryId: values.category, - text: editorRef.current?.editor?.getContent() ?? '', + text: editorContent ?? '', streetcodeId: categoryUpdate.current?.streetcodeId ?? 0, }); sourceCreateUpdateStreetcode.indexUpdate = sourceCreateUpdateStreetcode.streetcodeCategoryContents.length; @@ -138,7 +158,7 @@ const ForFansModal = ({ { ...sourceCreateUpdateStreetcode.streetcodeCategoryContents[indexOfPersistedCategory], sourceLinkCategoryId: values.category, - text: editorRef.current?.editor?.getContent() ?? '', + text: editorContent ?? '', }, ); sourceCreateUpdateStreetcode.indexUpdate = indexOfPersistedCategory; @@ -158,7 +178,7 @@ const ForFansModal = ({ { ...elementToUpdate, sourceLinkCategoryId: values.category, - text: editorRef.current?.editor?.getContent() ?? '', + text: editorContent ?? '', }, ); } else { @@ -181,22 +201,35 @@ const ForFansModal = ({ onChange('saved', null); }; + + const validateTextChange = () => { + setTextIsChanged(true); + const emptyTextField = editorRef.current?.editor?.getText().trim() === ''; + + if (emptyTextField) { + setTextIsPresent(false); + return false; + } + + setTextIsPresent(true); + return true; + }; + const handleOk = async () => { try { await form.validateFields(); - form.submit(); - message.success('Категорію для фанатів успішно додано!', 2); + checkQuillEditorTextLength(editorRef?.current, maxLength); + if (validateTextChange()) { + form.submit(); + message.success('Категорію для фанатів успішно додано!'); + } else { + throw new Error(); + } } catch (error) { - message.config({ - top: 100, - duration: 3, - maxCount: 3, - rtl: true, - prefixCls: 'my-message', - }); message.error("Будь ласка, заповніть всі обов'язкові поля та перевірте валідність ваших даних"); } }; + const onUpdateStates = async (isNewCatAdded: boolean) => { if (isNewCatAdded === true) { const categories = await SourcesApi.getAllNames(); @@ -232,7 +265,6 @@ const ForFansModal = ({ )} > -
- + { - const previousContent = editor.getContent({ format: 'text' }); - const clipboardContent = e.clipboardData?.getData('text') || ''; - const resultContent = previousContent + clipboardContent; - const isSelectionEnd = editor.selection.getSel()?.anchorOffset == previousContent.length; - - if (selectedText.length >= clipboardContent.length) { - return; - } - if (resultContent.length >= maxLength && isSelectionEnd) { - // eslint-disable-next-line max-len - editor.setContent(previousContent + clipboardContent.substring(0, maxLength - previousContent.length)); - e.preventDefault(); - } - if (resultContent.length <= maxLength && !isSelectionEnd) { - return; - } - if (resultContent.length >= maxLength && !isSelectionEnd) { - e.preventDefault(); - } - }} - onKeyDown={(e, editor) => { - if (editor.getContent({ format: 'text' }).length >= maxLength - && !setOfKeys.has(e.key) - && editor.selection.getContent({ format: 'text' }).length === 0) { - e.preventDefault(); - } - }} - onSelectionChange={(e, editor) => { - setSelected(editor.selection.getContent()); - }} + onChange={setEditorContent} + maxChars={maxLength} /> + {!textIsPresent && textIsChanged && ( +

Введіть текст

+ )}
- ); }; diff --git a/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx b/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx index 8ac09c84a..505c1b6d9 100644 --- a/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx +++ b/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx @@ -27,10 +27,11 @@ import StreetcodeArtApi from '@/app/api/media/streetcode-art.api'; import StreetcodesApi from '@/app/api/streetcode/streetcodes.api'; import TransactionLinksApi from '@/app/api/transactions/transactLinks.api'; import FRONTEND_ROUTES from '@/app/common/constants/frontend-routes.constants'; +import QUILL_TEXTS_LENGTH from '@/features/AdminPage/NewStreetcode/TextBlock/TextLengthConstants/textMaxLength.constant'; import Subtitle, { SubtitleCreate } from '@/models/additional-content/subtitles.model'; import { StreetcodeTag, StreetcodeTagUpdate } from '@/models/additional-content/tag.model'; import StatisticRecord from '@/models/analytics/statisticrecord.model'; -import { AudioUpdate, AudioUpdate } from '@/models/media/audio.model'; +import { AudioUpdate } from '@/models/media/audio.model'; import { ImageCreateUpdate, ImageDetails } from '@/models/media/image.model'; import { StreetcodeArtCreateUpdate } from '@/models/media/streetcode-art.model'; import Video, { VideoCreate } from '@/models/media/video.model'; @@ -127,6 +128,15 @@ const NewStreetcode = () => { event.returnValue = navigationString; }; + const validateQuillTexts = (mainText: string | undefined, additionalText: string | undefined) => { + const tooLongMainText = mainText && mainText.length > QUILL_TEXTS_LENGTH.mainTextMaxLength; + const tooLongAdditionalText = additionalText && additionalText.length > QUILL_TEXTS_LENGTH.additionalTextMaxLength; + + if (tooLongMainText || tooLongAdditionalText) { + throw new Error('The value is too long either in the main text or in the additional text'); + } + }; + useEffect(() => { if (!savedChanges) { window.addEventListener('beforeunload', alertUser); @@ -308,6 +318,7 @@ const NewStreetcode = () => { ? '' : inputInfo?.additionalText, streetcodeId: parseId, }; + validateQuillTexts(text.textContent, text.additionalText); const streetcode: StreetcodeCreate = { id: parseId, @@ -365,8 +376,8 @@ const NewStreetcode = () => { } )), imagesDetails: createUpdateMediaStore.getImageDetails(), - }; + if (streetcodeType.current === StreetcodeType.Person) { streetcode.firstName = form.getFieldValue('name'); streetcode.lastName = form.getFieldValue('surname'); @@ -483,6 +494,8 @@ const NewStreetcode = () => { const name = form.getFieldsError().find((e) => e.errors.length > 0)?.name; if (name) { scrollToErrors(); + } else { + alert('Будь ласка, заповніть всі поля валідними даними'); } }); }; diff --git a/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/AdditionTextBlock/AdditionalTextBlockAdminForm.component.tsx b/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/AdditionTextBlock/AdditionalTextBlockAdminForm.component.tsx index 2e624a81b..f273718a0 100644 --- a/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/AdditionTextBlock/AdditionalTextBlockAdminForm.component.tsx +++ b/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/AdditionTextBlock/AdditionalTextBlockAdminForm.component.tsx @@ -2,11 +2,12 @@ /* eslint-disable react/jsx-props-no-multi-spaces */ import { observer } from 'mobx-react-lite'; -import { useState } from 'react'; -import { Editor as TinyMCEEditor } from '@tinymce/tinymce-react'; +import { useRef } from 'react'; +import ReactQuill from 'react-quill'; import FormItem from 'antd/es/form/FormItem'; +import Editor from '@/app/common/components/Editor/QEditor.component'; import { Text } from '@/models/streetcode/text-contents.model'; interface Props { @@ -20,72 +21,19 @@ interface Props { const AdditionalTextBlockAdminForm = ({ character_limit, inputInfo, setInputInfo, onChange, text, }: Props) => { - const handleEditorChange = (content: string, editor: any) => { - setInputInfo({ ...inputInfo, additionalText: content }); - onChange('additionalText', content); - }; - const [selected, setSelected] = useState(''); - const setOfKeys = new Set(['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'End', 'Home']); const maxLength = character_limit || 200; + const editorRef = useRef(null); return ( - { - const previousContent = editor.getContent({ format: 'text' }); - const clipboardContent = e.clipboardData?.getData('text') || ''; - const resultContent = previousContent + clipboardContent; - const isSelectionEnd = editor.selection.getSel()?.anchorOffset == previousContent.length; - - if (selected.length >= clipboardContent.length) { - return; - } - if (resultContent.length >= maxLength && isSelectionEnd) { - // eslint-disable-next-line max-len - editor.setContent(previousContent + clipboardContent.substring(0, maxLength - previousContent.length)); - e.preventDefault(); - } - if (resultContent.length <= maxLength && !isSelectionEnd) { - return; - } - if (resultContent.length >= maxLength && !isSelectionEnd) { - e.preventDefault(); - } - }} - onKeyDown={(e, editor) => { - if (editor.getContent({ format: 'text' }).length >= maxLength - && !setOfKeys.has(e.key) - && editor.selection.getContent({ format: 'text' }).length == 0) { - e.preventDefault(); - } - }} - onChange={(e, editor) => { - setInputInfo({ ...inputInfo, additionalText: editor.getContent() }); - }} - onSelectionChange={(e, editor) => { - setSelected(editor.selection.getContent()); + { + setInputInfo({ ...inputInfo, additionalText: editor }); + onChange('additionalText', editor); }} + maxChars={maxLength} /> ); diff --git a/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/Editors/TextEditor.component.tsx b/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/Editors/TextEditor.component.tsx index 26e7fe4f2..1255dc5ac 100644 --- a/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/Editors/TextEditor.component.tsx +++ b/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/Editors/TextEditor.component.tsx @@ -1,14 +1,13 @@ import { observer } from 'mobx-react-lite'; -import { useEffect, useRef, useState } from 'react'; +import { useRef, useState } from 'react'; +import ReactQuill from 'react-quill'; import relatedTermApi from '@api/streetcode/text-content/related-terms.api'; import useMobx, { useModalContext } from '@app/stores/root-store'; -import { Editor as TinyMCEEditor } from '@tinymce/tinymce-react'; -import { element } from 'prop-types'; -import { AutoComplete, Button, message, Select } from 'antd'; +import { message } from 'antd'; import FormItem from 'antd/es/form/FormItem'; -import AddTermModal from '@/app/common/components/modals/Terms/AddTerm/AddTermModal.component'; +import Editor from '@/app/common/components/Editor/QEditor.component'; import { useAsync } from '@/app/common/hooks/stateful/useAsync.hook'; import { Term, Text } from '@/models/streetcode/text-contents.model'; @@ -17,7 +16,7 @@ interface Props { inputInfo: Partial | undefined; setInputInfo: React.Dispatch | undefined>>; onChange: (field: string, value: any) => void; - text : string | undefined; + text: string | undefined; } const toolTipColor = '#8D1F16'; @@ -31,10 +30,9 @@ const TextEditor = ({ const { createRelatedTerm } = relatedTermStore; const [term, setTerm] = useState>(); const [selected, setSelected] = useState(''); - const editorRef = useRef(null); - const [editorContent, setEditorContent] = useState(''); - - const setOfKeys = new Set(['Backspace', 'Delete', 'ArrowLeft', 'ArrowRight', 'End', 'Home']); + const editorRef = useRef(null); + const [editorContent, setEditorContent] = useState(text ?? ''); + const MAX_CHARS = character_limit || 25000; const invokeMessage = (context: string, success: boolean) => { const config = { @@ -88,144 +86,22 @@ const TextEditor = ({ }; useAsync(fetchTerms, []); - const maxLength = character_limit || 15000; - - useEffect(() => { - editorRef.current = ( - { - setInputInfo({ ...inputInfo, textContent: editor.getContent() }); - onChange('textContent', editor.getContent()); - }} - onEditorChange={(e, editor) => { - setEditorContent(editor.getContent()); - setInputInfo({ ...inputInfo, textContent: editor.getContent() }); - onChange('textContent', editor.getContent()); - }} - init={{ - max_chars: 1000, - height: 300, - menubar: false, - init_instance_callback(editor) { - setEditorContent(text ?? ''); - editor.setContent(text ?? ''); - }, - plugins: [ - 'autolink', - 'lists', 'preview', 'anchor', 'searchreplace', 'visualblocks', - 'insertdatetime', 'wordcount', 'link', 'lists', 'formatselect ', - ], - toolbar: 'undo redo | bold italic | ' - + 'removeformat', - toolbar_mode: 'sliding', - language: 'uk', - entity_encoding: 'raw', - content_style: 'body { font-family:Roboto,Helvetica Neue,sans-serif; font-size:14px }', - }} - onPaste={(e, editor) => { - const previousContent = editor.getContent({ format: 'text' }); - const clipboardContent = e.clipboardData?.getData('text') || ''; - const resultContent = previousContent + clipboardContent; - const isSelectionEnd = editor.selection.getSel()?.anchorOffset == previousContent.length; - - if (selected.length >= clipboardContent.length) { - return; - } - if (resultContent.length >= maxLength && isSelectionEnd) { - // eslint-disable-next-line max-len - editor.setContent(previousContent + clipboardContent.substring(0, maxLength - previousContent.length)); - e.preventDefault(); - } - if (resultContent.length <= maxLength && !isSelectionEnd) { - return; - } - if (resultContent.length >= maxLength && !isSelectionEnd) { - e.preventDefault(); - } - }} - onKeyDown={(e, editor) => { - if (editor.getContent({ format: 'text' }).length >= maxLength - && !setOfKeys.has(e.key) - && editor.selection.getContent({ format: 'text' }).length === 0) { - e.preventDefault(); - } - }} - onSelectionChange={(e, editor) => { - setSelected(editor.selection.getContent()); - }} - /> - ); - console.log(editorRef); - }, [text, inputInfo, setInputInfo, onChange]); return ( - { - setInputInfo({ ...inputInfo, textContent: editor.getContent() }); - onChange('textContent', editor.getContent()); - }} - onEditorChange={(e, editor) => { - setEditorContent(editor.getContent()); - setInputInfo({ ...inputInfo, textContent: editor.getContent() }); - onChange('textContent', editor.getContent()); - }} - init={{ - max_chars: 1000, - height: 300, - menubar: false, - init_instance_callback(editor) { - setEditorContent(text ?? ''); - editor.setContent(text ?? ''); - }, - plugins: [ - 'autolink', - 'lists', 'preview', 'anchor', 'searchreplace', 'visualblocks', - 'insertdatetime', 'wordcount', 'link', 'lists', 'formatselect ', - ], - toolbar: 'undo redo | bold italic | ' - + 'removeformat', - toolbar_mode: 'sliding', - language: 'uk', - entity_encoding: 'raw', - content_style: 'body { font-family:Roboto,Helvetica Neue,sans-serif; font-size:14px }', - }} - onPaste={(e, editor) => { - const previousContent = editor.getContent({ format: 'text' }); - const clipboardContent = e.clipboardData?.getData('text') || ''; - const resultContent = previousContent + clipboardContent; - const isSelectionEnd = editor.selection.getSel()?.anchorOffset == previousContent.length; - - if (selected.length >= clipboardContent.length) { - return; - } - if (resultContent.length >= maxLength && isSelectionEnd) { - // eslint-disable-next-line max-len - editor.setContent(previousContent + clipboardContent.substring(0, maxLength - previousContent.length)); - e.preventDefault(); - } - if (resultContent.length <= maxLength && !isSelectionEnd) { - return; - } - if (resultContent.length >= maxLength && !isSelectionEnd) { - e.preventDefault(); - } - }} - onKeyDown={(e, editor) => { - if (editor.getContent({ format: 'text' }).length >= maxLength - && !setOfKeys.has(e.key) - && editor.selection.getContent({ format: 'text' }).length === 0) { - e.preventDefault(); - } + onChange={(editor) => { + setEditorContent(editor); + setInputInfo({ ...inputInfo, textContent: editor }); + onChange('textContent', editor); }} - onSelectionChange={(e, editor) => { - setSelected(editor.selection.getContent()); + maxChars={MAX_CHARS} + selectionChange={(selectedText: string) => { + setSelected(selectedText); }} /> diff --git a/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/TextForm.component.tsx b/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/TextForm.component.tsx index b026558cb..583b31737 100644 --- a/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/TextForm.component.tsx +++ b/src/features/AdminPage/NewStreetcode/TextBlock/TextForm/TextForm.component.tsx @@ -3,6 +3,8 @@ import './TextForm.styles.scss'; import { Form, Input } from 'antd'; import FormItem from 'antd/es/form/FormItem'; +import QUILL_TEXTS_LENGTH from + '@/features/AdminPage/NewStreetcode/TextBlock/TextLengthConstants/textMaxLength.constant'; import Video from '@/models/media/video.model'; import { Text } from '@/models/streetcode/text-contents.model'; @@ -46,7 +48,7 @@ const TextForm = ({ >; - afterSubmit?: (news: News) => void; - initialValue: any; - limit: any; + newsItem?: News; + open: boolean; + setIsModalOpen: React.Dispatch>; + afterSubmit?: (news: News) => void; + initialValue: any; + limit: any; }> = observer(({ newsItem, open, setIsModalOpen, afterSubmit, initialValue, limit, }) => { @@ -54,11 +57,10 @@ const NewsModal: React.FC<{ const [textIsChanged, setTextIsChanged] = useState(false); const imageId = useRef(0); const image = useRef(undefined); - const editorRef = useRef(); + const editorRef = useRef(null); const sizeLimit = limit ?? 15000; const [data, setData] = React.useState(initialValue ?? ''); - const [count, setCount] = React.useState(0); - const [textCount, setTextCount] = useState(0); + const fillInAllFieldsMessage = "Будь ласка, заповніть всі обов'язкові поля правильно"; const [actionSuccess, setActionSuccess] = useState(false); const [waitingForApiResponse, setWaitingForApiResponse] = useState(false); @@ -91,7 +93,7 @@ const NewsModal: React.FC<{ }; useEffect(() => { - editorRef.current?.setContent(''); + editorRef.current?.editor?.setText(''); if (newsItem && open) { imageId.current = newsItem.imageId; image.current = newsItem.image; @@ -111,9 +113,8 @@ const NewsModal: React.FC<{ }, ] : [], }); - if (editorRef.current) { - editorRef.current.setContent(newsItem.text); - } + + setQuillEditorContent(editorRef.current, newsItem.text); } else { imageId.current = 0; image.current = undefined; @@ -134,7 +135,7 @@ const NewsModal: React.FC<{ setIsModalOpen(false); setTextIsPresent(false); setTextIsChanged(false); - editorRef.current?.setContent(''); + editorRef.current?.editor?.setText(''); } }; @@ -151,8 +152,9 @@ const NewsModal: React.FC<{ const handleTextChange = () => { setTextIsChanged(true); + const emptyTextField = editorRef.current?.editor?.getText().trim() === ''; - if (editorRef.current?.getContent() === '') { + if (emptyTextField) { setTextIsPresent(false); return false; } @@ -164,14 +166,15 @@ const NewsModal: React.FC<{ const handleOk = async () => { try { await form.validateFields(); + checkQuillEditorTextLength(editorRef?.current, sizeLimit); if (handleTextChange()) { setWaitingForApiResponse(true); await form.submit(); } else { throw new Error(); } - } catch (error) { - message.error("Будь ласка, заповніть всі обов'язкові поля"); + } catch { + message.error(fillInAllFieldsMessage); } }; @@ -183,11 +186,10 @@ const NewsModal: React.FC<{ imageId: imageId.current, url: formValues.url, title: formValues.title, - text: editorRef.current?.getContent() ?? '', + text: data ?? '', image: undefined, creationDate: dayjs(formValues.creationDate), }; - newsStore.getNewsArray.map((t) => t).forEach((t) => { if (formValues.title == t.title || imageId.current == t.imageId) newsItem = t; }); @@ -216,22 +218,8 @@ const NewsModal: React.FC<{ } }; - const handleUpdate = (value: any, editor: any) => { - const cCount = editor.getContent({ format: 'text' }).length; - if (cCount <= sizeLimit) { - setData(value); - setCount(cCount); - setTextCount(cCount); - } else { - message.error('Ви перевищіли максимально допустиму кількість символів'); - } - }; - - const handleBeforeAddUndo = (evt: any, editor: any) => { - const cCount = editor.getContent({ format: 'text' }).length; - if (cCount > sizeLimit) { - evt.preventDefault(); - } + const handleUpdate = (value: any) => { + setData(value); }; return ( @@ -263,7 +251,7 @@ const NewsModal: React.FC<{

{newsItem ? 'Редагувати' : 'Додати'} {' '} -Новину + Новину

{ @@ -305,43 +293,11 @@ const NewsModal: React.FC<{ Текст:
{ - editorRef.current = editor; - }} - initialValue={newsItem ? newsItem.text : ''} - init={{ - height: 300, - menubar: false, - plugins: [ - 'autolink', - 'lists', - 'preview', - 'anchor', - 'searchreplace', - 'visualblocks', - 'insertdatetime', - 'wordcount', - ], - // eslint-disable-next-line no-useless-concat - toolbar: 'undo redo | bold italic | ' + 'removeformat ', - content_style: - 'body { font-family:Roboto,Helvetica Neue,sans-serif; font-size:14px }', - }} + onChange={handleUpdate} + maxChars={sizeLimit} /> -

- Залишок символів: - {' '} - {sizeLimit - textCount} - {textCount > sizeLimit && ( - - Ви перевищіли максимально допустиму кількість символів - - )} - -

{!textIsPresent && textIsChanged && (

Введіть текст

)} @@ -371,7 +327,7 @@ const NewsModal: React.FC<{ name = file.name.toLowerCase(); } if (name.endsWith('.jpeg') || name.endsWith('.png') - || name.endsWith('.webp') || name.endsWith('.jpg') || name === '') { + || name.endsWith('.webp') || name.endsWith('.jpg') || name === '') { return Promise.resolve(); } // eslint-disable-next-line max-len @@ -436,7 +392,7 @@ const NewsModal: React.FC<{ className="streetcode-custom-button" onClick={() => handleOk()} > - Зберегти + Зберегти
From cdcf5910c5289532aecb91e95a4b4a4761a7504a Mon Sep 17 00:00:00 2001 From: Oleh-Kril <91199925+Oleh-Kril@users.noreply.github.com> Date: Wed, 10 Jan 2024 21:45:11 +0200 Subject: [PATCH 06/15] Dynamics meta tags (#1095) * modify index.html * add server and configure metadata for news * add dynamic metatags for streetcodes * moved news file to another folder * run linter * add update for news (not completed) * adjust put and delete * handle delete and update of streetcode and news * add part of tests * -add api error filter * - cover with tests & refactor * - refactor code to separate logic and reduce code complexity * - test get and update * - write tests for delete - refactor to use constants - add all urls-to-omit * fix comments * fix comments: - refactor to use destructuring assigment - remove comments - move some lines to constants * remove stageback url --- .gitignore | 3 + public/index.html | 12 +- server/.env | 2 + server/.eslintrc.js | 25 ++ server/.prettierrc | 4 + server/README.md | 71 ++++ server/nest-cli.json | 8 + server/package.json | 82 +++++ server/src/app.module.ts | 33 ++ .../client/client.controller.spec.ts | 37 ++ .../controllers/client/client.controller.ts | 12 + .../src/controllers/client/client.module.ts | 7 + .../news/constants/console.constant.ts | 7 + .../controllers/news/news.controller.spec.ts | 231 ++++++++++++ .../src/controllers/news/news.controller.ts | 117 +++++++ server/src/controllers/news/news.module.ts | 13 + server/src/controllers/news/news.service.ts | 29 ++ .../streetcode/constants/console.constant.ts | 7 + .../constants/urlsToOmit.constant.ts | 13 + .../streetcode/streetcode.controller.spec.ts | 330 ++++++++++++++++++ .../streetcode/streetcode.controller.ts | 171 +++++++++ .../streetcode/streetcode.module.ts | 12 + .../streetcode/streetcode.service.ts | 36 ++ server/src/enums/StreetcodeImageEnum.ts | 5 + server/src/for-tests/index.html | 21 ++ server/src/interfaces/Image.ts | 14 + server/src/interfaces/News.ts | 11 + server/src/interfaces/Streetcode.ts | 18 + server/src/interfaces/StreetcodeCache.ts | 7 + server/src/interfaces/StreetcodeUpdate.ts | 35 ++ server/src/main.ts | 14 + .../api-exeption.filter.ts | 37 ++ .../api-exeption-filter/api-exeption.spec.ts | 74 ++++ .../file-middleware/file.middleware.spec.ts | 80 +++++ .../shared/file-middleware/file.middleware.ts | 31 ++ .../constants/defaultMeta.constant.ts | 15 + .../constants/metaPlaceholders.constant.ts | 13 + .../shared/get-app-service/get-app.service.ts | 41 +++ .../http-config-module/http-config.module.ts | 14 + server/src/shared/utils/base64ToUrl.ts | 9 + server/src/shared/utils/extractMetaTags.ts | 16 + server/tsconfig.build.json | 4 + server/tsconfig.json | 25 ++ src/app/api/agent.api.ts | 121 ++++--- src/app/api/news/news.api.ts | 6 +- src/app/api/streetcode/streetcodes.api.ts | 6 +- .../StreetcodeSlider.component.tsx | 6 +- .../MapBlock/Map/Map.component.tsx | 23 -- 48 files changed, 1814 insertions(+), 94 deletions(-) create mode 100644 server/.env create mode 100644 server/.eslintrc.js create mode 100644 server/.prettierrc create mode 100644 server/README.md create mode 100644 server/nest-cli.json create mode 100644 server/package.json create mode 100644 server/src/app.module.ts create mode 100644 server/src/controllers/client/client.controller.spec.ts create mode 100644 server/src/controllers/client/client.controller.ts create mode 100644 server/src/controllers/client/client.module.ts create mode 100644 server/src/controllers/news/constants/console.constant.ts create mode 100644 server/src/controllers/news/news.controller.spec.ts create mode 100644 server/src/controllers/news/news.controller.ts create mode 100644 server/src/controllers/news/news.module.ts create mode 100644 server/src/controllers/news/news.service.ts create mode 100644 server/src/controllers/streetcode/constants/console.constant.ts create mode 100644 server/src/controllers/streetcode/constants/urlsToOmit.constant.ts create mode 100644 server/src/controllers/streetcode/streetcode.controller.spec.ts create mode 100644 server/src/controllers/streetcode/streetcode.controller.ts create mode 100644 server/src/controllers/streetcode/streetcode.module.ts create mode 100644 server/src/controllers/streetcode/streetcode.service.ts create mode 100644 server/src/enums/StreetcodeImageEnum.ts create mode 100644 server/src/for-tests/index.html create mode 100644 server/src/interfaces/Image.ts create mode 100644 server/src/interfaces/News.ts create mode 100644 server/src/interfaces/Streetcode.ts create mode 100644 server/src/interfaces/StreetcodeCache.ts create mode 100644 server/src/interfaces/StreetcodeUpdate.ts create mode 100644 server/src/main.ts create mode 100644 server/src/shared/api-exeption-filter/api-exeption.filter.ts create mode 100644 server/src/shared/api-exeption-filter/api-exeption.spec.ts create mode 100644 server/src/shared/file-middleware/file.middleware.spec.ts create mode 100644 server/src/shared/file-middleware/file.middleware.ts create mode 100644 server/src/shared/get-app-service/constants/defaultMeta.constant.ts create mode 100644 server/src/shared/get-app-service/constants/metaPlaceholders.constant.ts create mode 100644 server/src/shared/get-app-service/get-app.service.ts create mode 100644 server/src/shared/http-config-module/http-config.module.ts create mode 100644 server/src/shared/utils/base64ToUrl.ts create mode 100644 server/src/shared/utils/extractMetaTags.ts create mode 100644 server/tsconfig.build.json create mode 100644 server/tsconfig.json diff --git a/.gitignore b/.gitignore index 9fe86f230..779c6319b 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,7 @@ # dependencies /node_modules +/server/node_modules /.vscode /.pnp .pnp.js @@ -17,7 +18,9 @@ # production /build /dist +/server/dist /config/dist + # misc .DS_Store .env.local diff --git a/public/index.html b/public/index.html index 661aca9aa..4cf8a69ee 100644 --- a/public/index.html +++ b/public/index.html @@ -7,12 +7,10 @@ - - - - - - + + + + - Стріткод | Історія на кожному кроці + __PAGE_TITLE__ diff --git a/server/.env b/server/.env new file mode 100644 index 000000000..073d8f27e --- /dev/null +++ b/server/.env @@ -0,0 +1,2 @@ +CLIENT_BUILD_PATH=../dist +BACKEND_URL=https://localhost:5001/api diff --git a/server/.eslintrc.js b/server/.eslintrc.js new file mode 100644 index 000000000..259de13c7 --- /dev/null +++ b/server/.eslintrc.js @@ -0,0 +1,25 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + project: 'tsconfig.json', + tsconfigRootDir: __dirname, + sourceType: 'module', + }, + plugins: ['@typescript-eslint/eslint-plugin'], + extends: [ + 'plugin:@typescript-eslint/recommended', + 'plugin:prettier/recommended', + ], + root: true, + env: { + node: true, + jest: true, + }, + ignorePatterns: ['.eslintrc.js'], + rules: { + '@typescript-eslint/interface-name-prefix': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-explicit-any': 'off', + }, +}; diff --git a/server/.prettierrc b/server/.prettierrc new file mode 100644 index 000000000..a20502b7f --- /dev/null +++ b/server/.prettierrc @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "trailingComma": "all" +} diff --git a/server/README.md b/server/README.md new file mode 100644 index 000000000..8d888478c --- /dev/null +++ b/server/README.md @@ -0,0 +1,71 @@ +

+ Nest Logo +

+ +[circleci-image]: https://img.shields.io/circleci/build/github/nestjs/nest/master?token=abc123def456 +[circleci-url]: https://circleci.com/gh/nestjs/nest + +

A progressive Node.js framework for building efficient and scalable server-side applications.

+

+NPM Version +Package License +NPM Downloads +CircleCI +Coverage +Discord +Backers on Open Collective +Sponsors on Open Collective + + Support us + +

+ +## Description + +[Nest](https://github.com/nestjs/nest) framework TypeScript starter repository. + +## Installation + +```bash +$ npm install +``` + +## Running the app + +```bash +# development +$ npm run start + +# watch mode +$ npm run start:dev + +# production mode +$ npm run start:prod +``` + +## Test + +```bash +# unit tests +$ npm run test + +# e2e tests +$ npm run test:e2e + +# test coverage +$ npm run test:cov +``` + +## Support + +Nest is an MIT-licensed open source project. It can grow thanks to the sponsors and support by the amazing backers. If you'd like to join them, please [read more here](https://docs.nestjs.com/support). + +## Stay in touch + +- Author - [Kamil Myśliwiec](https://kamilmysliwiec.com) +- Website - [https://nestjs.com](https://nestjs.com/) +- Twitter - [@nestframework](https://twitter.com/nestframework) + +## License + +Nest is [MIT licensed](LICENSE). diff --git a/server/nest-cli.json b/server/nest-cli.json new file mode 100644 index 000000000..f9aa683b1 --- /dev/null +++ b/server/nest-cli.json @@ -0,0 +1,8 @@ +{ + "$schema": "https://json.schemastore.org/nest-cli", + "collection": "@nestjs/schematics", + "sourceRoot": "src", + "compilerOptions": { + "deleteOutDir": true + } +} diff --git a/server/package.json b/server/package.json new file mode 100644 index 000000000..0c0b01ed2 --- /dev/null +++ b/server/package.json @@ -0,0 +1,82 @@ +{ + "name": "server", + "version": "0.0.1", + "description": "", + "author": "", + "private": true, + "license": "UNLICENSED", + "scripts": { + "build": "nest build", + "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", + "start": "nest start", + "start:dev": "nest start --watch --preserveWatchOut", + "start:debug": "nest start --debug --watch", + "start:prod": "node dist/main", + "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix", + "test": "jest", + "test:watch": "jest --watch", + "test:cov": "jest --coverage", + "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", + "test:e2e": "jest --config ./test/jest-e2e.json" + }, + "dependencies": { + "@nestjs/axios": "^3.0.1", + "@nestjs/common": "^10.0.0", + "@nestjs/config": "^3.1.1", + "@nestjs/core": "^10.0.0", + "@nestjs/platform-express": "^10.0.0", + "@nestjs/serve-static": "^4.0.0", + "axios": "^1.6.1", + "dayjs": "^1.11.10", + "dotenv": "^16.3.1", + "reflect-metadata": "^0.1.13", + "rxjs": "^7.8.1" + }, + "devDependencies": { + "@nestjs/cli": "^10.0.0", + "@nestjs/schematics": "^10.0.0", + "@nestjs/testing": "^10.0.0", + "@types/express": "^4.17.17", + "@types/history": "^5.0.0", + "@types/jest": "^29.5.2", + "@types/jsdom": "^21.1.5", + "@types/node": "^20.3.1", + "@types/styled-components": "^5.1.30", + "@types/supertest": "^2.0.12", + "@types/tough-cookie": "^4.0.5", + "@typescript-eslint/eslint-plugin": "^6.0.0", + "@typescript-eslint/parser": "^6.0.0", + "cheerio": "^1.0.0-rc.12", + "eslint": "^8.42.0", + "eslint-config-prettier": "^9.0.0", + "eslint-plugin-prettier": "^5.0.0", + "jest": "^29.5.0", + "prettier": "^3.0.0", + "source-map-support": "^0.5.21", + "supertest": "^6.3.3", + "ts-jest": "^29.1.0", + "ts-loader": "^9.4.3", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.1.3" + }, + "jest": { + "moduleFileExtensions": [ + "js", + "json", + "ts" + ], + "rootDir": "src", + "testRegex": ".*\\.spec\\.ts$", + "transform": { + "^.+\\.(t|j)s$": "ts-jest" + }, + "collectCoverageFrom": [ + "**/*.(t|j)s", + "!**/*.module.ts", + "!**/main.ts" + ], + "coverageDirectory": "../coverage", + "testEnvironment": "node" + } +} diff --git a/server/src/app.module.ts b/server/src/app.module.ts new file mode 100644 index 000000000..4c24d099c --- /dev/null +++ b/server/src/app.module.ts @@ -0,0 +1,33 @@ +import { + MiddlewareConsumer, + Module, + NestModule, + RequestMethod, +} from '@nestjs/common'; +import { ConfigModule } from '@nestjs/config'; +import { HttpConfigModule } from './shared/http-config-module/http-config.module'; +import { NewsController } from './controllers/news/news.controller'; +import { StreetcodeController } from './controllers/streetcode/streetcode.controller'; +import { FileMiddleware } from './shared/file-middleware/file.middleware'; +import { GetAppService } from './shared/get-app-service/get-app.service'; +import { NewsService } from './controllers/news/news.service'; +import { StreetcodeService } from './controllers/streetcode/streetcode.service'; +import { ClientController } from './controllers/client/client.controller'; + +@Module({ + imports: [ + ConfigModule.forRoot({ + isGlobal: true, + }), + HttpConfigModule, + ], + controllers: [StreetcodeController, NewsController, ClientController], + providers: [NewsService, StreetcodeService, GetAppService], +}) +export class AppModule implements NestModule { + configure(consumer: MiddlewareConsumer) { + consumer + .apply(FileMiddleware) + .forRoutes({ path: '*', method: RequestMethod.ALL }); + } +} diff --git a/server/src/controllers/client/client.controller.spec.ts b/server/src/controllers/client/client.controller.spec.ts new file mode 100644 index 000000000..ce18984ce --- /dev/null +++ b/server/src/controllers/client/client.controller.spec.ts @@ -0,0 +1,37 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ClientController } from './client.controller'; +import { GetAppService } from '../../shared/get-app-service/get-app.service'; +import extractMetaTags from '../../shared/utils/extractMetaTags'; +import DEFAULT_META from '../../shared/get-app-service/constants/defaultMeta.constant'; + +process.env.CLIENT_BUILD_PATH = './src/for-tests'; + +describe('ClientController', () => { + let controller: ClientController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [ClientController], + providers: [GetAppService], + }).compile(); + + controller = module.get(ClientController); + }); + + describe('Get', () => { + it('should return app content', async () => { + // Assert + + // Act + const indexHTML = await controller.get(); + const metaTags = extractMetaTags(indexHTML as string); + const { title, description, image } = DEFAULT_META; + + // Arrange + expect(metaTags['og:description']).toEqual(description); + expect(metaTags['twitter:card']).toEqual(description); + expect(metaTags['og:image']).toEqual(image); + expect(metaTags['og:title']).toEqual(title); + }); + }); +}); diff --git a/server/src/controllers/client/client.controller.ts b/server/src/controllers/client/client.controller.ts new file mode 100644 index 000000000..c02e35ce6 --- /dev/null +++ b/server/src/controllers/client/client.controller.ts @@ -0,0 +1,12 @@ +import { Controller, Get } from '@nestjs/common'; +import { GetAppService } from '../../shared/get-app-service/get-app.service'; + +@Controller() +export class ClientController { + constructor(private readonly getAppService: GetAppService) {} + + @Get('*') + public async get() { + return this.getAppService.getApp(); + } +} diff --git a/server/src/controllers/client/client.module.ts b/server/src/controllers/client/client.module.ts new file mode 100644 index 000000000..c280396b9 --- /dev/null +++ b/server/src/controllers/client/client.module.ts @@ -0,0 +1,7 @@ +import { Module } from '@nestjs/common'; +import { ClientController } from './client.controller'; + +@Module({ + controllers: [ClientController], +}) +export class ClientModule {} diff --git a/server/src/controllers/news/constants/console.constant.ts b/server/src/controllers/news/constants/console.constant.ts new file mode 100644 index 000000000..8f1e09442 --- /dev/null +++ b/server/src/controllers/news/constants/console.constant.ts @@ -0,0 +1,7 @@ +const NEWS_CONSOLE_MESSAGES = { + newsUpdated: 'News updated ', + newsDeleted: 'News deleted ', + errorOnLoadingNews: 'Error loading news: ', +}; + +export default NEWS_CONSOLE_MESSAGES; diff --git a/server/src/controllers/news/news.controller.spec.ts b/server/src/controllers/news/news.controller.spec.ts new file mode 100644 index 000000000..72874d2ff --- /dev/null +++ b/server/src/controllers/news/news.controller.spec.ts @@ -0,0 +1,231 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AxiosError, AxiosResponse } from 'axios'; +import News from '../../interfaces/News'; +import { NewsService } from './news.service'; +import { NewsController } from './news.controller'; +import { APP_FILTER } from '@nestjs/core'; +import { ApiExceptionFilter } from '../../shared/api-exeption-filter/api-exeption.filter'; +import { HttpConfigModule } from '../../shared/http-config-module/http-config.module'; +import extractMetaTags from '../../shared/utils/extractMetaTags'; +import { GetAppService } from '../../shared/get-app-service/get-app.service'; +import DEFAULT_META from '../../shared/get-app-service/constants/defaultMeta.constant'; + +process.env.CLIENT_BUILD_PATH = './src/for-tests'; + +const mockedNews: News = { + id: 1, + title: 'Mocked News Title', + text: 'Mocked News Text', + url: 'news-url', + imageId: 123, + image: { + id: 123, + base64: 'mockedBase64Data', + blobName: 'mockedBlobName', + mimeType: 'image/png', + imageDetails: { + id: 456, + title: 'Mocked Image Title', + alt: 'Mocked Image Alt', + imageId: 123, + }, + }, + creationDate: '2021-01-01', +}; + +const mockedOldNews = { + ...mockedNews, + title: 'Old title', + image: { + ...mockedNews.image, + base64: 'oldMockedBase64Data', + mimeType: 'image/jpeg', + }, +}; + +async function putOldNewsInCache( + controller: NewsController, + service: NewsService, + url: string = 'news-url', +) { + const oldNews = { ...mockedOldNews, url }; + const apiResponse = { status: 200, data: oldNews } as AxiosResponse; + jest.spyOn(service, 'getByUrl').mockResolvedValue(apiResponse); + + await controller.getNews(url); + + expect(controller.getNewsCacheMap.get('1')).toEqual(oldNews); + expect(controller.getNewsCacheUrlsMap.get(url)).toEqual('1'); +} + +const apiError = { + isAxiosError: true, + response: { + status: 500, + data: { message: 'Internal Server Error' }, + }, +} as AxiosError; + +const apiResponse = { status: 200, data: 1 } as AxiosResponse; + +describe('NewsController', () => { + let newsController: NewsController; + let newsService: NewsService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [NewsController], + providers: [ + GetAppService, + NewsService, + { + provide: APP_FILTER, + useClass: ApiExceptionFilter, + }, + ], + imports: [HttpConfigModule], + }).compile(); + + newsController = module.get(NewsController); + newsService = module.get(NewsService); + }); + + describe('news endpoints', () => { + describe('method GET(news/:url)', () => { + it('should return index.html with news meta', async () => { + // Arrange + jest + .spyOn(newsService, 'getByUrl') + .mockResolvedValue({ data: mockedNews } as AxiosResponse); + + // Act + const result = await newsController.getNews('news-url'); + const metaTags = extractMetaTags(result as string); + + // Assert + expect(metaTags['og:description']).toEqual('Mocked News Title'); + expect(metaTags['og:image']).toEqual( + 'data:image/png;base64,mockedBase64Data', + ); + }); + + it('should return app with DEFAULT meta because news does not exists', async () => { + // Arrange + jest.spyOn(newsService, 'getByUrl').mockRejectedValue({ + ...apiError, + response: { + status: 404, + data: { message: "News with the url doesn't exist" }, + }, + } as AxiosError); + + // Act + const result = await newsController.getNews('non-existent-url'); + const metaTags = extractMetaTags(result as string); + const { title, description, image } = DEFAULT_META; + + // Assert + expect(metaTags['og:description']).toEqual(description); + expect(metaTags['twitter:card']).toEqual(description); + expect(metaTags['og:image']).toEqual(image); + expect(metaTags['og:title']).toEqual(title); + }); + }); + + describe('method PUT(news/update)', () => { + it('should update getNewsCacheMap due to updateNews request success', async () => { + // Arrange + jest.spyOn(newsService, 'updateNews').mockResolvedValue(apiResponse); + await putOldNewsInCache(newsController, newsService); + + // Act + const result = await newsController.updateNews(mockedNews); + const newsFromCache = newsController.getNewsCacheMap.get('1'); + const { + title, + image: { base64, mimeType }, + } = newsFromCache; + + // Assert + expect(result).toEqual(apiResponse.data); + expect(title).toEqual('Mocked News Title'); + expect(base64).toEqual('mockedBase64Data'); + expect(mimeType).toEqual('image/png'); + }); + + it('should NOT update getNewsCacheMap due to failed updateNews request', async () => { + // Arrange + jest.spyOn(newsService, 'updateNews').mockRejectedValue(apiError); + await putOldNewsInCache(newsController, newsService); + + // Act + await expect(async () => { + await newsController.updateNews(mockedNews); + }).rejects.toEqual(apiError); + const newsFromCache = newsController.getNewsCacheMap.get('1'); + const { + title, + image: { base64, mimeType }, + } = newsFromCache; + + // Assert + expect(title).toEqual('Old title'); + expect(base64).toEqual('oldMockedBase64Data'); + expect(mimeType).toEqual('image/jpeg'); + }); + + it('should update newsCacheUrlsMap due to updated news.url', async () => { + // Arrange + jest.spyOn(newsService, 'updateNews').mockResolvedValue(apiResponse); + await putOldNewsInCache(newsController, newsService, 'old-url'); + + // Act + const result = await newsController.updateNews(mockedNews); + const deletedIdOfOldNews = + newsController.getNewsCacheUrlsMap.get('old-url'); + const changedIdOfNews = + newsController.getNewsCacheUrlsMap.get('news-url'); + + // Assert + expect(result).toEqual(apiResponse.data); + expect(deletedIdOfOldNews).toBeUndefined(); + expect(changedIdOfNews).toEqual('1'); + }); + }); + + describe('method DELETE(news/delete)', () => { + it('should delete news and update cache', async () => { + // Arrange + jest + .spyOn(newsService, 'deleteNews') + .mockResolvedValueOnce(apiResponse); + await putOldNewsInCache(newsController, newsService); + + // Act + const result = await newsController.deleteNews('1'); + + // Assert + expect(result).toContain('1'); + expect(newsController.getNewsCacheMap.get('1')).toBeUndefined(); + expect( + newsController.getNewsCacheUrlsMap.get('news-url'), + ).toBeUndefined(); + }); + + it('should NOT delete news and NOT update cache', async () => { + // Arrange + jest.spyOn(newsService, 'deleteNews').mockRejectedValue(apiError); + await putOldNewsInCache(newsController, newsService); + + // Act + await expect(async () => { + await newsController.deleteNews('1'); + }).rejects.toEqual(apiError); + + // Assert + expect(newsController.getNewsCacheMap.get('1')).toEqual(mockedOldNews); + expect(newsController.getNewsCacheUrlsMap.get('news-url')).toEqual('1'); + }); + }); + }); +}); diff --git a/server/src/controllers/news/news.controller.ts b/server/src/controllers/news/news.controller.ts new file mode 100644 index 000000000..b4d9c2721 --- /dev/null +++ b/server/src/controllers/news/news.controller.ts @@ -0,0 +1,117 @@ +import { Body, Controller, Get, Param, Put, Delete } from '@nestjs/common'; +import { NewsService } from './news.service'; +import News from '../../interfaces/News'; +import { GetAppService } from '../../shared/get-app-service/get-app.service'; +import base64ToUrl from '../../shared/utils/base64ToUrl'; +import NEWS_CONSOLE_MESSAGES from './constants/console.constant'; + +@Controller() +export class NewsController { + private newsCacheMap: Map = new Map(); + private newsCacheUrlsMap: Map = new Map(); + + get getNewsCacheMap(): Map { + return new Map(this.newsCacheMap); + } + + get getNewsCacheUrlsMap(): Map { + return new Map(this.newsCacheUrlsMap); + } + + constructor( + private readonly getAppService: GetAppService, + private readonly newsService: NewsService, + ) { + this.loadNews(); + } + + @Get('news/:url') + public async getNews(@Param('url') url: string) { + if (!this.newsCacheUrlsMap.has(url)) { + const isAdded = await this.addNewsToCacheByUrl(url); + if (!isAdded) { + return this.getAppService.getApp(); + } + } + const id = this.newsCacheUrlsMap.get(url); + const theNews = this.newsCacheMap.get(id); + const { + title, + image: { base64, mimeType }, + } = theNews; + + const meta = { + description: title, + image: base64ToUrl(base64, mimeType), + }; + + return this.getAppService.getApp(meta); + } + + @Put('news/update') + public async updateNews(@Body() updatedNews: News) { + const response = await this.newsService.updateNews(updatedNews); + this.updateNewsCache(updatedNews); + console.log(NEWS_CONSOLE_MESSAGES.newsUpdated, response); + return response.data; + } + + @Delete('news/delete/:id') + public async deleteNews(@Param('id') id: string) { + await this.newsService.deleteNews(id); + this.deleteNewsFromCache(id); + + const message = NEWS_CONSOLE_MESSAGES.newsDeleted + id; + console.log(message); + return message; + } + + private async loadNews() { + try { + const allNewsResponse = await this.newsService.getAllNews(); + allNewsResponse.data.forEach((news) => { + // important to don't override cache of already updated news + if (!this.newsCacheMap.has(news.id.toString())) { + this.addNewsToCache(news); + } + }); + } catch (error) { + console.error(NEWS_CONSOLE_MESSAGES.errorOnLoadingNews, error); + } + } + + private deleteNewsFromCache(id: string) { + const url = this.newsCacheMap.get(id).url; + this.newsCacheMap.delete(id); + this.newsCacheUrlsMap.delete(url); + } + + private updateNewsCache(updatedNews: News) { + const id = updatedNews.id.toString(); + const oldNews = this.newsCacheMap.get(id); + + if (oldNews && oldNews.url !== updatedNews.url) { + this.newsCacheUrlsMap.delete(oldNews.url); + this.newsCacheUrlsMap.set(updatedNews.url, id); + } + this.newsCacheMap.set(id, updatedNews); + } + + private async addNewsToCacheByUrl(url: string): Promise { + try { + const response = await this.newsService.getByUrl(url); + const news = response.data; + + this.addNewsToCache(news); + return true; + } catch { + return false; + } + } + + private addNewsToCache(news: News) { + const id = news.id.toString(); + this.newsCacheMap.set(id, news); + this.newsCacheUrlsMap.set(news.url, id); + } +} diff --git a/server/src/controllers/news/news.module.ts b/server/src/controllers/news/news.module.ts new file mode 100644 index 000000000..79fb8ad9f --- /dev/null +++ b/server/src/controllers/news/news.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; + +import { NewsController } from './news.controller'; +import { HttpConfigModule } from '../../shared/http-config-module/http-config.module'; +import { GetAppService } from '../../shared/get-app-service/get-app.service'; +import { NewsService } from './news.service'; + +@Module({ + imports: [HttpConfigModule, NewsModule], + providers: [NewsService, GetAppService], + controllers: [NewsController], +}) +export class NewsModule {} diff --git a/server/src/controllers/news/news.service.ts b/server/src/controllers/news/news.service.ts new file mode 100644 index 000000000..d3372c086 --- /dev/null +++ b/server/src/controllers/news/news.service.ts @@ -0,0 +1,29 @@ +import { Injectable } from '@nestjs/common'; +import { AxiosResponse } from 'axios'; +import { HttpService } from '@nestjs/axios'; +import News from '../../interfaces/News'; + +@Injectable() +export class NewsService { + constructor(private readonly httpService: HttpService) {} + + public async getAllNews(): Promise { + const url = '/news/getAll'; + return this.httpService.get(url).toPromise(); + } + + public async getByUrl(newsUrl: string): Promise { + const backUrl = '/news/getByUrl/'; + return this.httpService.get(backUrl + newsUrl).toPromise(); + } + + public async updateNews(news: News): Promise { + const backUrl = '/news/update'; + return this.httpService.put(backUrl, news).toPromise(); + } + + public async deleteNews(id: string): Promise { + const backUrl = '/news/delete/' + id; + return this.httpService.delete(backUrl).toPromise(); + } +} diff --git a/server/src/controllers/streetcode/constants/console.constant.ts b/server/src/controllers/streetcode/constants/console.constant.ts new file mode 100644 index 000000000..39835df39 --- /dev/null +++ b/server/src/controllers/streetcode/constants/console.constant.ts @@ -0,0 +1,7 @@ +const STREETCODE_CONSOLE_MESSAGES = { + streetcodeUpdated: 'Streetcode updated: ', + streetcodeDeleted: 'Streetcode deleted: ', + errorOnLoadingStreetcodes: 'Error on loading streetcodes: ', +}; + +export default STREETCODE_CONSOLE_MESSAGES; diff --git a/server/src/controllers/streetcode/constants/urlsToOmit.constant.ts b/server/src/controllers/streetcode/constants/urlsToOmit.constant.ts new file mode 100644 index 000000000..88cc741a9 --- /dev/null +++ b/server/src/controllers/streetcode/constants/urlsToOmit.constant.ts @@ -0,0 +1,13 @@ +const URLS_TO_OMIT = [ + 'admin-panel', + 'catalog', + '404', + 'privacy-policy', + 'contact-us', + 'partners-page', + 'support-us', + 'news', + 'about-us', +]; + +export default URLS_TO_OMIT; diff --git a/server/src/controllers/streetcode/streetcode.controller.spec.ts b/server/src/controllers/streetcode/streetcode.controller.spec.ts new file mode 100644 index 000000000..2fb7bbd71 --- /dev/null +++ b/server/src/controllers/streetcode/streetcode.controller.spec.ts @@ -0,0 +1,330 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { AxiosError, AxiosResponse } from 'axios'; + +import { APP_FILTER } from '@nestjs/core'; +import { StreetcodeController } from './streetcode.controller'; +import extractMetaTags from '../../shared/utils/extractMetaTags'; +import { StreetcodeUpdate } from '../../interfaces/StreetcodeUpdate'; +import { StreetcodeImageEnum } from '../../enums/StreetcodeImageEnum'; +import { StreetcodeService } from './streetcode.service'; +import { GetAppService } from '../../shared/get-app-service/get-app.service'; +import { ApiExceptionFilter } from '../../shared/api-exeption-filter/api-exeption.filter'; +import { HttpConfigModule } from '../../shared/http-config-module/http-config.module'; +import { StreetcodeCache } from '../../interfaces/StreetcodeCache'; +import { Streetcode } from '../../interfaces/Streetcode'; +import DEFAULT_META from '../../shared/get-app-service/constants/defaultMeta.constant'; +import URLS_TO_OMIT from './constants/urlsToOmit.constant'; + +process.env.CLIENT_BUILD_PATH = './src/for-tests'; + +const mockedStreetcodeUpdate: StreetcodeUpdate = { + id: 1, + title: 'Mocked streetcode title', + transliterationUrl: 'mocked-streetcode-url', + images: [ + { + id: 101, + base64: 'Mocked streetcode base64', + blobName: 'Mocked streetcode blob name', + mimeType: 'image/webp', + imageDetails: { + id: 201, + title: 'Sample Image', + alt: StreetcodeImageEnum.blackandwhite.toString(), + imageId: 101, + }, + }, + ], +}; + +const mockedStreetcode: Streetcode = mockedStreetcodeUpdate as Streetcode; + +const oldMockedStreetcodeCache: StreetcodeCache = { + title: 'Old title', + image: { + ...mockedStreetcodeUpdate.images[0], + base64: 'oldMockedBase64Data', + mimeType: 'image/png', + }, + transliterationUrl: mockedStreetcodeUpdate.transliterationUrl, +}; + +const updateStreetcodeApiResponse = { + status: 200, + data: 1, +} as AxiosResponse; + +const getImagesOfStreetcodeApiResponse = { + status: 200, + data: mockedStreetcodeUpdate.images, +} as AxiosResponse; + +const getStreetcodeApiResponse = { + status: 200, + data: mockedStreetcode, +} as AxiosResponse; + +const apiError = { + isAxiosError: true, + response: { + status: 500, + data: { message: 'Internal Server Error' }, + }, +} as AxiosError; + +async function putOldStreetcodeInCache( + controller: StreetcodeController, + service: StreetcodeService, + transliterationUrl: string = 'mocked-streetcode-url', +) { + const oldStreetcode = { + ...mockedStreetcodeUpdate, + ...oldMockedStreetcodeCache, + transliterationUrl, + }; + + const apiResponse = { status: 200, data: oldStreetcode } as AxiosResponse; + jest.spyOn(service, 'getByUrl').mockResolvedValue(apiResponse); + + const getImagesOfStreetcodeApiResponse = { + status: 200, + data: [oldMockedStreetcodeCache.image], + } as AxiosResponse; + jest + .spyOn(service, 'getImagesOfStreetcode') + .mockResolvedValue(getImagesOfStreetcodeApiResponse); + + await controller.getStreetcode(transliterationUrl); + + expect(controller.getStreetcodeCacheMap.get('1')).toEqual({ + ...oldMockedStreetcodeCache, + transliterationUrl, + }); + expect(controller.getStreetcodeCacheUrlsMap.get(transliterationUrl)).toEqual( + '1', + ); +} + +function mockStreetcodeService(service: StreetcodeService) { + jest.spyOn(service, 'getByUrl').mockResolvedValue(getStreetcodeApiResponse); + + jest + .spyOn(service, 'updateStreetcode') + .mockResolvedValue(updateStreetcodeApiResponse); + jest + .spyOn(service, 'getImagesOfStreetcode') + .mockResolvedValue(getImagesOfStreetcodeApiResponse); +} + +describe('StreetcodeController', () => { + let streetcodeController: StreetcodeController; + let streetcodeService: StreetcodeService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [StreetcodeController], + providers: [ + GetAppService, + StreetcodeService, + { + provide: APP_FILTER, + useClass: ApiExceptionFilter, + }, + ], + imports: [HttpConfigModule], + }).compile(); + + streetcodeController = + module.get(StreetcodeController); + streetcodeService = module.get(StreetcodeService); + }); + + describe('streetcode endpoints', () => { + describe('method GET(/:url)', () => { + it('should return index.html with streetcode meta', async () => { + // Arrange + mockStreetcodeService(streetcodeService); + + // Act + const result = await streetcodeController.getStreetcode( + 'mocked-streetcode-url', + ); + + // Assert + const metaTags = extractMetaTags(result as string); + expect(metaTags['og:description']).toEqual(DEFAULT_META.description); + expect(metaTags['og:title']).toEqual('Mocked streetcode title'); + expect(metaTags['og:image']).toEqual( + 'data:image/webp;base64,Mocked streetcode base64', + ); + }); + + it('should return app with DEFAULT meta because streetcode does not exists', async () => { + // Arrange + jest.spyOn(streetcodeService, 'getByUrl').mockRejectedValue({ + ...apiError, + response: { + status: 404, + data: { message: "Streetcode with the url doesn't exist" }, + }, + } as AxiosError); + + // Act + const result = + await streetcodeController.getStreetcode('non-existent-url'); + const { title, description, image } = DEFAULT_META; + + // Assert + const metaTags = extractMetaTags(result as string); + expect(metaTags['og:description']).toEqual(description); + expect(metaTags['twitter:card']).toEqual(description); + expect(metaTags['og:image']).toEqual(image); + expect(metaTags['og:title']).toEqual(title); + }); + + it('should return app with DEFAULT meta because url is in URLS_TO_OMIT', async () => { + // Arrange + + // Act + const result = await streetcodeController.getStreetcode( + URLS_TO_OMIT[0], + ); + const { title, description, image } = DEFAULT_META; + + // Assert + const metaTags = extractMetaTags(result as string); + expect(metaTags['og:description']).toEqual(description); + expect(metaTags['twitter:card']).toEqual(description); + expect(metaTags['og:image']).toEqual(image); + expect(metaTags['og:title']).toEqual(title); + }); + }); + + describe('method PUT(streetcode/update)', () => { + it('should update streetcodeCacheMap due to updateStreetcode request success', async () => { + // Arrange + await putOldStreetcodeInCache(streetcodeController, streetcodeService); // important to place before other mocks + mockStreetcodeService(streetcodeService); + + // Act + const result = await streetcodeController.updateStreetcode( + mockedStreetcodeUpdate, + ); + const streetcodeFromCache = + streetcodeController.getStreetcodeCacheMap.get('1'); + const { + title, + image: { base64, mimeType }, + } = streetcodeFromCache; + + // Assert + expect(result).toEqual(updateStreetcodeApiResponse.data); + expect(title).toEqual('Mocked streetcode title'); + expect(base64).toEqual('Mocked streetcode base64'); + expect(mimeType).toEqual('image/webp'); + }); + + it('should NOT update streetcodeCacheMap due to failed updateStreetcode request', async () => { + // Arrange + await putOldStreetcodeInCache(streetcodeController, streetcodeService); // important to place before other mocks + + jest + .spyOn(streetcodeService, 'updateStreetcode') + .mockRejectedValue(apiError); + + // Act + await expect(async () => { + await streetcodeController.updateStreetcode(mockedStreetcodeUpdate); + }).rejects.toEqual(apiError); + const streetcodeFromCache = + streetcodeController.getStreetcodeCacheMap.get('1'); + const { + title, + transliterationUrl, + image: { base64, mimeType }, + } = streetcodeFromCache; + + // Assert + expect(title).toEqual('Old title'); + expect(transliterationUrl).toEqual('mocked-streetcode-url'); + expect(base64).toEqual('oldMockedBase64Data'); + expect(mimeType).toEqual('image/png'); + }); + + it('should update streetcodeCacheUrlsMap due to updated streetcode.transliterationUrl', async () => { + // Arrange + await putOldStreetcodeInCache( + streetcodeController, + streetcodeService, + 'old-url', + ); // important to place before other mocks + + mockStreetcodeService(streetcodeService); + + // Act + const result = await streetcodeController.updateStreetcode( + mockedStreetcodeUpdate, + ); + const deletedIdOfOldStreetcode = + streetcodeController.getStreetcodeCacheUrlsMap.get('old-url'); + const changedIdOfStreetcode = + streetcodeController.getStreetcodeCacheUrlsMap.get( + 'mocked-streetcode-url', + ); + + // Assert + expect(result).toEqual(updateStreetcodeApiResponse.data); + expect(deletedIdOfOldStreetcode).toBeUndefined(); + expect(changedIdOfStreetcode).toEqual('1'); + }); + }); + + describe('method DELETE(streetcode/delete)', () => { + it('should delete streetcode and update cache', async () => { + // Arrange + const apiResponse = { status: 200, data: 1 } as AxiosResponse; + jest + .spyOn(streetcodeService, 'deleteStreetcode') + .mockResolvedValueOnce(apiResponse); + await putOldStreetcodeInCache(streetcodeController, streetcodeService); + + // Act + const result = await streetcodeController.deleteStreetcode('1'); + + // Assert + expect(result).toContain('1'); + expect( + streetcodeController.getStreetcodeCacheMap.get('1'), + ).toBeUndefined(); + expect( + streetcodeController.getStreetcodeCacheUrlsMap.get( + 'mocked-streetcode-url', + ), + ).toBeUndefined(); + }); + + it('should NOT delete streetcode and NOT update cache', async () => { + // Arrange + jest + .spyOn(streetcodeService, 'deleteStreetcode') + .mockRejectedValue(apiError); + await putOldStreetcodeInCache(streetcodeController, streetcodeService); + + // Act + await expect(async () => { + await streetcodeController.deleteStreetcode('1'); + }).rejects.toEqual(apiError); + + // Assert + expect(streetcodeController.getStreetcodeCacheMap.get('1')).toEqual( + oldMockedStreetcodeCache, + ); + expect( + streetcodeController.getStreetcodeCacheUrlsMap.get( + 'mocked-streetcode-url', + ), + ).toEqual('1'); + }); + }); + }); +}); diff --git a/server/src/controllers/streetcode/streetcode.controller.ts b/server/src/controllers/streetcode/streetcode.controller.ts new file mode 100644 index 000000000..e2567dde1 --- /dev/null +++ b/server/src/controllers/streetcode/streetcode.controller.ts @@ -0,0 +1,171 @@ +import { Body, Controller, Get, Param, Put, Delete } from '@nestjs/common'; +import { StreetcodeService } from './streetcode.service'; +import { StreetcodeImageEnum } from '../../enums/StreetcodeImageEnum'; +import Image from '../../interfaces/Image'; +import { StreetcodeUpdate } from '../../interfaces/StreetcodeUpdate'; +import { GetAppService } from '../../shared/get-app-service/get-app.service'; +import base64ToUrl from '../../shared/utils/base64ToUrl'; +import URLS_TO_OMIT from './constants/urlsToOmit.constant'; +import { StreetcodeCache } from '../../interfaces/StreetcodeCache'; +import { Streetcode } from '../../interfaces/Streetcode'; +import STREETCODE_CONSOLE_MESSAGES from './constants/console.constant'; + +@Controller() +export class StreetcodeController { + private streetcodeCacheMap: Map = new Map(); + private streetcodeCacheUrlsMap: Map = new Map(); + + get getStreetcodeCacheMap(): Map { + return new Map(this.streetcodeCacheMap); + } + + get getStreetcodeCacheUrlsMap(): Map { + return new Map(this.streetcodeCacheUrlsMap); + } + + constructor( + private readonly getAppService: GetAppService, + private readonly streetcodeService: StreetcodeService, + ) { + this.loadStreetcodes(); + } + + @Get(':url') + public async getStreetcode(@Param('url') url: string) { + if (URLS_TO_OMIT.find((toOmit) => toOmit === url)) { + return this.getAppService.getApp(); + } + + if (!this.streetcodeCacheUrlsMap.has(url)) { + const isAdded = await this.addStreetcodeToCacheByUrl(url); + + if (!isAdded) { + return this.getAppService.getApp(); + } + } + const id = this.streetcodeCacheUrlsMap.get(url); + const streetcode = this.streetcodeCacheMap.get(id); + + const meta = { + title: streetcode.title, + image: base64ToUrl(streetcode.image.base64, streetcode.image.mimeType), + }; + + return this.getAppService.getApp(meta); + } + + @Put('streetcode/update') + public async updateStreetcode(@Body() updatedStreetcode: StreetcodeUpdate) { + const response = + await this.streetcodeService.updateStreetcode(updatedStreetcode); + this.updateStreetcodeCache(updatedStreetcode); + console.log(STREETCODE_CONSOLE_MESSAGES.streetcodeUpdated, response); + return response.data; + } + + @Delete('streetcode/delete/:id') + public async deleteStreetcode(@Param('id') id: string) { + await this.streetcodeService.deleteStreetcode(id); + this.deleteStreetcodeFromCache(id); + + const message = STREETCODE_CONSOLE_MESSAGES.streetcodeDeleted + id; + console.log(message); + return message; + } + + private async loadStreetcodes() { + try { + const allStreetcoderesponse = + await this.streetcodeService.getAllStreetcodes(); + + const imagePromises = allStreetcoderesponse.data.streetcodes.map( + (streetcode) => { + return this.streetcodeService + .getImagesOfStreetcode(streetcode.id) + .then((response) => { + // important to dont override cache of already updated streetcodes + if (!this.streetcodeCacheMap.has(streetcode.id.toString())) { + const images = response.data; + + this.addStreetcodeToCache(streetcode, images); + } + }); + }, + ); + + await Promise.all(imagePromises); + } catch (error) { + console.error( + STREETCODE_CONSOLE_MESSAGES.errorOnLoadingStreetcodes, + error, + ); + } + } + + private deleteStreetcodeFromCache(id: string) { + const url = this.streetcodeCacheMap.get(id).transliterationUrl; + this.streetcodeCacheMap.delete(id); + this.streetcodeCacheUrlsMap.delete(url); + } + + private updateStreetcodeCache(updatedStreetcode: StreetcodeUpdate) { + const id = updatedStreetcode.id.toString(); + const oldStreetcode = this.streetcodeCacheMap.get(id); + + if (!oldStreetcode) { + this.streetcodeCacheUrlsMap.set(updatedStreetcode.transliterationUrl, id); + } else { + if ( + oldStreetcode.transliterationUrl !== + updatedStreetcode.transliterationUrl + ) { + this.streetcodeCacheUrlsMap.delete(oldStreetcode.transliterationUrl); + } + } + + this.streetcodeService.getImagesOfStreetcode(id).then((response) => { + const images = response.data; + + this.addStreetcodeToCache(updatedStreetcode as Streetcode, images); + }); + } + + private async addStreetcodeToCacheByUrl(url: string) { + try { + const streetcodeResponse = await this.streetcodeService.getByUrl(url); + const streetcode = streetcodeResponse.data as Streetcode; + + await this.streetcodeService + .getImagesOfStreetcode(streetcode.id.toString()) + .then((response) => { + const images = response.data; + + this.addStreetcodeToCache(streetcode, images); + }); + + return true; + } catch { + return false; + } + } + + private addStreetcodeToCache(streetcode: Streetcode, images: Image[]) { + const id = streetcode.id.toString(); + + this.streetcodeCacheMap.set(id, { + title: streetcode.title, + image: this.findGrayImage(images), + transliterationUrl: streetcode.transliterationUrl, + }); + + this.streetcodeCacheUrlsMap.set(streetcode.transliterationUrl, id); + } + + private findGrayImage(images: Image[]) { + return images.find( + (image) => + image.imageDetails?.alt === + StreetcodeImageEnum.blackandwhite.toString(), + ); + } +} diff --git a/server/src/controllers/streetcode/streetcode.module.ts b/server/src/controllers/streetcode/streetcode.module.ts new file mode 100644 index 000000000..f330c5934 --- /dev/null +++ b/server/src/controllers/streetcode/streetcode.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { StreetcodeController } from './streetcode.controller'; +import { HttpConfigModule } from '../../shared/http-config-module/http-config.module'; +import { GetAppService } from '../../shared/get-app-service/get-app.service'; +import { StreetcodeService } from './streetcode.service'; + +@Module({ + imports: [HttpConfigModule], + providers: [GetAppService, StreetcodeService], + controllers: [StreetcodeController], +}) +export class StreetcodeModule {} diff --git a/server/src/controllers/streetcode/streetcode.service.ts b/server/src/controllers/streetcode/streetcode.service.ts new file mode 100644 index 000000000..11d4faa0c --- /dev/null +++ b/server/src/controllers/streetcode/streetcode.service.ts @@ -0,0 +1,36 @@ +import { Injectable } from '@nestjs/common'; +import { AxiosResponse } from 'axios'; +import { HttpService } from '@nestjs/axios'; +import { StreetcodeUpdate } from '../../interfaces/StreetcodeUpdate'; + +@Injectable() +export class StreetcodeService { + constructor(private readonly httpService: HttpService) {} + + public async getAllStreetcodes(): Promise { + const url = '/streetcode/getAll'; + return this.httpService.get(url).toPromise(); + } + + public async getImagesOfStreetcode(id: string): Promise { + const url = '/image/getByStreetcodeId/'; + return this.httpService.get(url + id).toPromise(); + } + + public async getByUrl(url: string): Promise { + const backUrl = '/streetcode/getByTransliterationUrl/'; + return this.httpService.get(backUrl + url).toPromise(); + } + + public async updateStreetcode( + streetcode: StreetcodeUpdate, + ): Promise { + const backUrl = '/streetcode/update'; + return this.httpService.put(backUrl, streetcode).toPromise(); + } + + public async deleteStreetcode(id: string): Promise { + const backUrl = '/streetcode/delete/' + id; + return this.httpService.delete(backUrl).toPromise(); + } +} diff --git a/server/src/enums/StreetcodeImageEnum.ts b/server/src/enums/StreetcodeImageEnum.ts new file mode 100644 index 000000000..2358de912 --- /dev/null +++ b/server/src/enums/StreetcodeImageEnum.ts @@ -0,0 +1,5 @@ +export enum StreetcodeImageEnum { + animation, + blackandwhite, + relatedfigure, +} diff --git a/server/src/for-tests/index.html b/server/src/for-tests/index.html new file mode 100644 index 000000000..3485fc7ae --- /dev/null +++ b/server/src/for-tests/index.html @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + __PAGE_TITLE__ + + + +
+ + diff --git a/server/src/interfaces/Image.ts b/server/src/interfaces/Image.ts new file mode 100644 index 000000000..71fb999f3 --- /dev/null +++ b/server/src/interfaces/Image.ts @@ -0,0 +1,14 @@ +export default interface Image { + id: number; + base64: string; + blobName: string; + mimeType: string; + imageDetails?: ImageDetails; +} + +export interface ImageDetails { + id: number; + title?: string; + alt?: string; + imageId: number; +} diff --git a/server/src/interfaces/News.ts b/server/src/interfaces/News.ts new file mode 100644 index 000000000..8d18f797f --- /dev/null +++ b/server/src/interfaces/News.ts @@ -0,0 +1,11 @@ +import Image from './Image'; + +export default interface News { + id: number; + title: string; + text: string; + url: string; + imageId?: number; + image?: Image; + creationDate: string; +} diff --git a/server/src/interfaces/Streetcode.ts b/server/src/interfaces/Streetcode.ts new file mode 100644 index 000000000..fc0e81b14 --- /dev/null +++ b/server/src/interfaces/Streetcode.ts @@ -0,0 +1,18 @@ +export interface Streetcode { + id: number; + transliterationUrl: string; + title: string; + + index?: number; + dateString?: string; + alias?: string | null; + status?: any; + eventStartOrPersonBirthDate?: Date; + eventEndOrPersonDeathDate?: Date | null; + viewCount?: number; + createdAt?: Date; + updatedAt?: Date; + tags?: any[]; + teaser?: string; + streetcodeType?: any; +} diff --git a/server/src/interfaces/StreetcodeCache.ts b/server/src/interfaces/StreetcodeCache.ts new file mode 100644 index 000000000..e3b913a67 --- /dev/null +++ b/server/src/interfaces/StreetcodeCache.ts @@ -0,0 +1,7 @@ +import Image from './Image'; + +export interface StreetcodeCache { + title: string; + image: Image; + transliterationUrl: string; +} diff --git a/server/src/interfaces/StreetcodeUpdate.ts b/server/src/interfaces/StreetcodeUpdate.ts new file mode 100644 index 000000000..5a38f5b8e --- /dev/null +++ b/server/src/interfaces/StreetcodeUpdate.ts @@ -0,0 +1,35 @@ +import Image from './Image'; + +export interface StreetcodeUpdate { + id: number; + transliterationUrl: string; + title: string; + images: Image[]; + + teaser?: string; + firstName?: string | null; + lastName?: string | null; + index?: number; + alias?: string; + status?: any; + eventStartOrPersonBirthDate?: Date | null; + eventEndOrPersonDeathDate?: Date | null; + dateString?: string; + streetcodeType?: any; + videos?: any[]; + facts?: any[]; + relatedFigures?: any[]; + timelineItems?: any[]; + partners?: any[]; + streetcodeArts?: any[]; + subtitles?: any[]; + text?: any | null; + streetcodeCategoryContents?: any[]; + tags?: any[]; + statisticRecords?: any[]; + toponyms?: any[]; + audioId?: number | null; + audios?: any[]; + imagesDetails?: any[]; + transactionLink?: any[]; +} diff --git a/server/src/main.ts b/server/src/main.ts new file mode 100644 index 000000000..8f2e80ce8 --- /dev/null +++ b/server/src/main.ts @@ -0,0 +1,14 @@ +import { NestFactory } from '@nestjs/core'; +import { AppModule } from './app.module'; +import { json, urlencoded } from 'express'; +import { ApiExceptionFilter } from './shared/api-exeption-filter/api-exeption.filter'; + +async function bootstrap() { + const app = await NestFactory.create(AppModule); + app.use(json({ limit: '50mb' })); + app.use(urlencoded({ extended: true, limit: '50mb' })); + app.useGlobalFilters(new ApiExceptionFilter()); + + await app.listen(4000); +} +bootstrap(); diff --git a/server/src/shared/api-exeption-filter/api-exeption.filter.ts b/server/src/shared/api-exeption-filter/api-exeption.filter.ts new file mode 100644 index 000000000..5838acb1a --- /dev/null +++ b/server/src/shared/api-exeption-filter/api-exeption.filter.ts @@ -0,0 +1,37 @@ +import { + Injectable, + HttpException, + HttpStatus, + ExceptionFilter, + ArgumentsHost, +} from '@nestjs/common'; +import { Response } from 'express'; +import { AxiosError, AxiosResponse } from 'axios'; + +@Injectable() +export class ApiExceptionFilter implements ExceptionFilter { + catch(error: any, host: ArgumentsHost) { + const ctx = host.switchToHttp(); + const response = ctx.getResponse(); + + if (error instanceof HttpException) { + throw error; + } else if (this.isAxiosError(error)) { + const axiosError = error as AxiosError; + const axiosResponse = axiosError.response as AxiosResponse; + console.log('ERROR FROM API', axiosError); + response + .status(axiosResponse.status) + .json({ ...axiosResponse.data, isFromFilter: true }); + } else { + response.status(HttpStatus.INTERNAL_SERVER_ERROR).json({ + statusCode: HttpStatus.INTERNAL_SERVER_ERROR, + message: `Internal Server Error: ${error.message}`, + }); + } + } + + private isAxiosError(error: Error): error is AxiosError { + return (error as AxiosError).isAxiosError !== undefined; + } +} diff --git a/server/src/shared/api-exeption-filter/api-exeption.spec.ts b/server/src/shared/api-exeption-filter/api-exeption.spec.ts new file mode 100644 index 000000000..c802d362e --- /dev/null +++ b/server/src/shared/api-exeption-filter/api-exeption.spec.ts @@ -0,0 +1,74 @@ +import { ApiExceptionFilter } from './api-exeption.filter'; +import { HttpException, HttpStatus, ArgumentsHost } from '@nestjs/common'; +import { Response } from 'express'; +import { AxiosError, AxiosResponse } from 'axios'; + +describe('ApiExceptionFilter', () => { + let apiExceptionFilter: ApiExceptionFilter; + let mockResponse: Response; + + beforeEach(() => { + apiExceptionFilter = new ApiExceptionFilter(); + mockResponse = { + status: jest.fn().mockReturnThis(), + json: jest.fn(), + } as unknown as Response; + }); + + it('should handle HttpException and rethrow', () => { + const httpException = new HttpException('Not Found', HttpStatus.NOT_FOUND); + const mockHost = { + switchToHttp: jest.fn().mockReturnValue({ + getResponse: () => mockResponse, + }), + } as unknown as ArgumentsHost; + + expect(() => apiExceptionFilter.catch(httpException, mockHost)).toThrow( + httpException, + ); + }); + + it('should handle AxiosError and respond with transformed data', () => { + const axiosError: AxiosError = { + isAxiosError: true, + response: { + status: 500, + data: { message: 'Internal Server Error' }, + } as AxiosResponse, + } as AxiosError; + + const mockHost = { + switchToHttp: jest.fn().mockReturnValue({ + getResponse: () => mockResponse, + }), + } as unknown as ArgumentsHost; + + apiExceptionFilter.catch(axiosError, mockHost); + + expect(mockResponse.status).toHaveBeenCalledWith( + axiosError.response.status, + ); + expect(mockResponse.json).toHaveBeenCalledWith( + Object.assign({}, axiosError.response.data, { isFromFilter: true }), + ); + }); + + it('should handle other errors and respond with generic 500 Internal Server Error', () => { + const genericError = new Error('Some generic error'); + const mockHost = { + switchToHttp: jest.fn().mockReturnValue({ + getResponse: () => mockResponse, + }), + } as unknown as ArgumentsHost; + + apiExceptionFilter.catch(genericError, mockHost); + + expect(mockResponse.status).toHaveBeenCalledWith( + HttpStatus.INTERNAL_SERVER_ERROR, + ); + expect(mockResponse.json).toHaveBeenCalledWith({ + statusCode: HttpStatus.INTERNAL_SERVER_ERROR, + message: `Internal Server Error: ${genericError.message}`, + }); + }); +}); diff --git a/server/src/shared/file-middleware/file.middleware.spec.ts b/server/src/shared/file-middleware/file.middleware.spec.ts new file mode 100644 index 000000000..5a988be41 --- /dev/null +++ b/server/src/shared/file-middleware/file.middleware.spec.ts @@ -0,0 +1,80 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { FileMiddleware } from './file.middleware'; +import { Request, Response } from 'express'; +import * as fs from 'fs'; + +jest.mock('fs'); + +describe('FileMiddleware', () => { + let fileMiddleware: FileMiddleware; + let req: Request; + let res: Response; + let next: jest.Mock; + + beforeEach(async () => { + jest.resetAllMocks(); + + const module: TestingModule = await Test.createTestingModule({ + providers: [FileMiddleware], + }).compile(); + + fileMiddleware = module.get(FileMiddleware); + + req = { + path: '/path/to/file.jpg', + } as Request; + + res = { + status: jest.fn().mockReturnThis(), + end: jest.fn(), + sendFile: jest.fn(), + } as unknown as Response; + + next = jest.fn(); + }); + + it('should serve the file if it exists', async () => { + const mockFilePath = '/mock/file/path.jpg'; + + jest.spyOn(fileMiddleware, 'getAssetPath').mockReturnValue(mockFilePath); + jest.spyOn(fs, 'existsSync').mockReturnValue(true); + + await fileMiddleware.use(req, res, next); + + expect(fileMiddleware.getAssetPath).toHaveBeenCalledWith( + '/path/to/file.jpg', + ); + expect(fs.existsSync).toHaveBeenCalledWith(mockFilePath); + expect(res.sendFile).toHaveBeenCalledWith( + mockFilePath, + expect.any(Function), + ); + expect(next).not.toHaveBeenCalled(); + }); + + it('should handle file not found', async () => { + jest + .spyOn(fileMiddleware, 'getAssetPath') + .mockReturnValue('/nonexistent/file/path.jpg'); + jest.spyOn(fs, 'existsSync').mockReturnValue(false); + + await fileMiddleware.use(req, res, next); + + expect((fileMiddleware as any).getAssetPath).toHaveBeenCalledWith( + '/path/to/file.jpg', + ); + expect(fs.existsSync).toHaveBeenCalledWith('/nonexistent/file/path.jpg'); + expect(res.status).toHaveBeenCalledWith(404); + expect(res.end).toHaveBeenCalled(); + expect(next).not.toHaveBeenCalled(); + }); + + it('should pass to the next middleware if the path does not represent a file', async () => { + req.path = '/api/some-endpoint'; + + await fileMiddleware.use(req, res, next); + + expect(fs.existsSync).not.toHaveBeenCalled(); + expect(next).toHaveBeenCalled(); + }); +}); diff --git a/server/src/shared/file-middleware/file.middleware.ts b/server/src/shared/file-middleware/file.middleware.ts new file mode 100644 index 000000000..01c4f3d99 --- /dev/null +++ b/server/src/shared/file-middleware/file.middleware.ts @@ -0,0 +1,31 @@ +import { Injectable, NestMiddleware } from '@nestjs/common'; +import { Request, Response } from 'express'; +import * as path from 'path'; +import { Logger } from '@nestjs/common'; +import * as fs from 'fs'; + +@Injectable() +export class FileMiddleware implements NestMiddleware { + async use(req: Request, res: Response, next: () => void) { + if (/[^\\/]+\.[^\\/]+$/.test(req.path)) { + const file = this.getAssetPath(req.path); + Logger.log('FILE:', file); + if (fs.existsSync(file)) { + res.sendFile(file, (err) => { + if (err) { + res.append(err.message).end(); + } + }); + } else { + res.status(404).end(); + } + } else { + return next(); + } + } + + public getAssetPath(url: any) { + const basePath = process.env.CLIENT_BUILD_PATH; + return path.resolve(path.join(basePath, url)); + } +} diff --git a/server/src/shared/get-app-service/constants/defaultMeta.constant.ts b/server/src/shared/get-app-service/constants/defaultMeta.constant.ts new file mode 100644 index 000000000..20e0cdf9d --- /dev/null +++ b/server/src/shared/get-app-service/constants/defaultMeta.constant.ts @@ -0,0 +1,15 @@ +export interface IPageMetadata { + title?: string; + description?: string; + image?: string; +} + +const DEFAULT_META: IPageMetadata = { + title: '', + description: + '«Стріткод: історія на кожному кроці» — платформа про імена в назвах вулиць.', + image: + 'https://ita-social-projects.github.io/StreetCode_Client/public/banner.webp', +}; + +export default DEFAULT_META; diff --git a/server/src/shared/get-app-service/constants/metaPlaceholders.constant.ts b/server/src/shared/get-app-service/constants/metaPlaceholders.constant.ts new file mode 100644 index 000000000..c252ed0e9 --- /dev/null +++ b/server/src/shared/get-app-service/constants/metaPlaceholders.constant.ts @@ -0,0 +1,13 @@ +interface IMetaPlaceholders { + title: string; + description: string; + image: string; +} + +const META_PLACEHOLDERS: IMetaPlaceholders = { + title: '__PAGE_TITLE__', + description: '__PAGE_DESCRIPTION__', + image: '__PAGE_IMAGE__', +}; + +export default META_PLACEHOLDERS; diff --git a/server/src/shared/get-app-service/get-app.service.ts b/server/src/shared/get-app-service/get-app.service.ts new file mode 100644 index 000000000..9cba6535e --- /dev/null +++ b/server/src/shared/get-app-service/get-app.service.ts @@ -0,0 +1,41 @@ +import { Injectable } from '@nestjs/common'; +import * as fs from 'fs'; +import * as path from 'path'; +import * as process from 'process'; +import { Logger } from '@nestjs/common'; +import META_PLACEHOLDERS from './constants/metaPlaceholders.constant'; +import DEFAULT_META, { IPageMetadata } from './constants/defaultMeta.constant'; + +@Injectable() +export class GetAppService { + public async getApp(pageMetadata: IPageMetadata = DEFAULT_META) { + const basePath = process.env.CLIENT_BUILD_PATH; + const filePath = path.resolve(path.join(basePath, 'index.html')); + Logger.log('PATH:', filePath); + return new Promise((resolve, reject) => { + fs.readFile( + filePath, + 'utf8', + (err: NodeJS.ErrnoException, data: string) => { + if (err) { + reject(err); + } else { + data = data.replaceAll( + META_PLACEHOLDERS.title, + pageMetadata?.title ?? DEFAULT_META.title, + ); + data = data.replaceAll( + META_PLACEHOLDERS.description, + pageMetadata?.description ?? DEFAULT_META.description, + ); + data = data.replaceAll( + META_PLACEHOLDERS.image, + pageMetadata?.image ?? DEFAULT_META.image, + ); + resolve(data); + } + }, + ); + }); + } +} diff --git a/server/src/shared/http-config-module/http-config.module.ts b/server/src/shared/http-config-module/http-config.module.ts new file mode 100644 index 000000000..70cd7fd49 --- /dev/null +++ b/server/src/shared/http-config-module/http-config.module.ts @@ -0,0 +1,14 @@ +import { Module } from '@nestjs/common'; +import { HttpModule } from '@nestjs/axios'; +import { config } from 'dotenv'; +config(); + +@Module({ + imports: [ + HttpModule.register({ + baseURL: process.env.BACKEND_URL, + }), + ], + exports: [HttpModule], +}) +export class HttpConfigModule {} diff --git a/server/src/shared/utils/base64ToUrl.ts b/server/src/shared/utils/base64ToUrl.ts new file mode 100644 index 000000000..d0494c1a8 --- /dev/null +++ b/server/src/shared/utils/base64ToUrl.ts @@ -0,0 +1,9 @@ +export default function base64ToUrl( + base64Data: string | undefined, + mimeType: string | undefined, +): string | undefined { + if (base64Data && mimeType) { + const result = `data:${mimeType};base64,${base64Data}`; + return result; + } +} diff --git a/server/src/shared/utils/extractMetaTags.ts b/server/src/shared/utils/extractMetaTags.ts new file mode 100644 index 000000000..ae49ea652 --- /dev/null +++ b/server/src/shared/utils/extractMetaTags.ts @@ -0,0 +1,16 @@ +import * as cheerio from 'cheerio'; + +export default function extractMetaTags(html: string): Record { + const $ = cheerio.load(html); + const metaTags: Record = {}; + + $('meta').each((_, element) => { + const name = $(element).attr('property') || $(element).attr('name'); + const content = $(element).attr('content'); + if (name) { + metaTags[name] = content; + } + }); + + return metaTags; +} diff --git a/server/tsconfig.build.json b/server/tsconfig.build.json new file mode 100644 index 000000000..64f86c6bd --- /dev/null +++ b/server/tsconfig.build.json @@ -0,0 +1,4 @@ +{ + "extends": "./tsconfig.json", + "exclude": ["node_modules", "test", "dist", "**/*spec.ts"] +} diff --git a/server/tsconfig.json b/server/tsconfig.json new file mode 100644 index 000000000..b7dafb4ae --- /dev/null +++ b/server/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "module": "commonjs", + "declaration": true, + "removeComments": true, + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "allowSyntheticDefaultImports": true, + "target": "ES2021", + "sourceMap": true, + "outDir": "./dist", + "baseUrl": "./", + "incremental": true, + "skipLibCheck": true, + "strictNullChecks": false, + "noImplicitAny": false, + "strictBindCallApply": false, + "forceConsistentCasingInFileNames": false, + "noFallthroughCasesInSwitch": false, + "lib": [ + "es2021", + "dom" + ] + } +} diff --git a/src/app/api/agent.api.ts b/src/app/api/agent.api.ts index 669046889..a7bed365b 100644 --- a/src/app/api/agent.api.ts +++ b/src/app/api/agent.api.ts @@ -6,70 +6,79 @@ import { ReasonPhrases, StatusCodes } from 'http-status-codes'; import FRONTEND_ROUTES from '../common/constants/frontend-routes.constants'; import UserLoginStore from '../stores/user-login-store'; -axios.defaults.baseURL = process.env.NODE_ENV === 'development' +const defaultBaseUrl = process.env.NODE_ENV === 'development' ? 'https://localhost:5001/api' : window._env_.API_URL; -axios.interceptors.response.use( - async (response) => response, - ({ response, message }: AxiosError) => { - let errorMessage = ''; - if (message === 'Network Error') { - errorMessage = message; - } - switch (response?.status) { - case StatusCodes.INTERNAL_SERVER_ERROR: - errorMessage = ReasonPhrases.INTERNAL_SERVER_ERROR; - break; - case StatusCodes.UNAUTHORIZED: - errorMessage = ReasonPhrases.UNAUTHORIZED; - redirect(FRONTEND_ROUTES.ADMIN.LOGIN); - break; - case StatusCodes.NOT_FOUND: - errorMessage = ReasonPhrases.NOT_FOUND; - break; - case StatusCodes.BAD_REQUEST: - errorMessage = ReasonPhrases.BAD_REQUEST; - break; - case StatusCodes.FORBIDDEN: - errorMessage = ReasonPhrases.FORBIDDEN; - break; - default: - break; - } - if (errorMessage !== '' && process.env.NODE_ENV === 'development') { - toast.error(errorMessage); - } - - return Promise.reject(message); - }, -); +const frontendServerBaseUrl = process.env.NODE_ENV === 'development' + ? 'https://localhost:4000' : window._env_.SERVER_API_URL; const responseBody = (response: AxiosResponse) => response.data; -const Agent = { - get: async (url: string, params?: URLSearchParams) => { - axios.defaults.headers.common.Authorization = `Bearer ${UserLoginStore.getToken()}`; - return axios.get(url, { params }) - .then(responseBody); - }, +const createAxiosInstance = (baseUrl: string) => { + const instance = axios.create({ + baseURL: baseUrl, + }); + + instance.interceptors.response.use( + async (response) => response, + ({ response, message }: AxiosError) => { + let errorMessage = ''; + if (message === 'Network Error') { + errorMessage = message; + } + switch (response?.status) { + case StatusCodes.INTERNAL_SERVER_ERROR: + errorMessage = ReasonPhrases.INTERNAL_SERVER_ERROR; + break; + case StatusCodes.UNAUTHORIZED: + errorMessage = ReasonPhrases.UNAUTHORIZED; + redirect(FRONTEND_ROUTES.ADMIN.LOGIN); + break; + case StatusCodes.NOT_FOUND: + errorMessage = ReasonPhrases.NOT_FOUND; + break; + case StatusCodes.BAD_REQUEST: + errorMessage = ReasonPhrases.BAD_REQUEST; + break; + case StatusCodes.FORBIDDEN: + errorMessage = ReasonPhrases.FORBIDDEN; + break; + default: + break; + } + if (errorMessage !== '' && process.env.NODE_ENV === 'development') { + toast.error(errorMessage); + } + + return Promise.reject(message); + }, + ); + + instance.interceptors.request.use((config) => { + // eslint-disable-next-line no-param-reassign + config.headers.Authorization = `Bearer ${UserLoginStore.getToken()}`; + return config; + }); - post: async (url: string, body: object, headers?: object) => { - axios.defaults.headers.common.Authorization = `Bearer ${UserLoginStore.getToken()}`; - return axios.post(url, body, headers) - .then(responseBody); - }, + instance.defaults.headers.common.Authorization = `Bearer ${UserLoginStore.getToken()}`; - put: async (url: string, body: object) => { - axios.defaults.headers.common.Authorization = `Bearer ${UserLoginStore.getToken()}`; - return axios.put(url, body) - .then(responseBody); - }, + return { + get: async (url: string, params?: URLSearchParams) => instance.get(url, { params }) + .then(responseBody), - delete: async (url: string) => { - axios.defaults.headers.common.Authorization = `Bearer ${UserLoginStore.getToken()}`; - return axios.delete(url) - .then(responseBody); - }, + post: async (url: string, body: object, headers?: object) => instance.post(url, body, headers) + .then(responseBody), + + put: async (url: string, body: object) => instance.put(url, body) + .then(responseBody), + + delete: async (url: string) => instance.delete(url) + .then(responseBody), + }; }; +const Agent = createAxiosInstance(defaultBaseUrl); +const AgentFrontend = createAxiosInstance(frontendServerBaseUrl); + +export { AgentFrontend }; export default Agent; diff --git a/src/app/api/news/news.api.ts b/src/app/api/news/news.api.ts index 681f84846..7de1eeff7 100644 --- a/src/app/api/news/news.api.ts +++ b/src/app/api/news/news.api.ts @@ -1,4 +1,4 @@ -import Agent from '@api/agent.api'; +import Agent, { AgentFrontend } from '@api/agent.api'; import { API_ROUTES } from '@constants/api-routes.constants'; import News, { NewsWithUrl } from '@models/news/news.model'; @@ -15,9 +15,9 @@ const NewsApi = { create: (news: News) => Agent.post(`${API_ROUTES.NEWS.CREATE}`, news), - delete: (id: number) => Agent.delete(`${API_ROUTES.NEWS.DELETE}/${id}`), + delete: (id: number) => AgentFrontend.delete(`${API_ROUTES.NEWS.DELETE}/${id}`), - update: (news: News) => Agent.put(`${API_ROUTES.NEWS.UPDATE}`, news), + update: (news: News) => AgentFrontend.put(`${API_ROUTES.NEWS.UPDATE}`, news), }; export default NewsApi; diff --git a/src/app/api/streetcode/streetcodes.api.ts b/src/app/api/streetcode/streetcodes.api.ts index 3f1b7f3a4..4a17fc3f2 100644 --- a/src/app/api/streetcode/streetcodes.api.ts +++ b/src/app/api/streetcode/streetcodes.api.ts @@ -1,4 +1,4 @@ -import Agent from '@api/agent.api'; +import Agent, { AgentFrontend } from '@api/agent.api'; import { API_ROUTES } from '@constants/api-routes.constants'; import Streetcode, { @@ -63,7 +63,7 @@ const StreetcodesApi = { create: (streetcode: StreetcodeCreate) => Agent .post(`${API_ROUTES.STREETCODES.CREATE}`, streetcode), - update: (streetcode: StreetcodeUpdate) => Agent + update: (streetcode: StreetcodeUpdate) => AgentFrontend .put(`${API_ROUTES.STREETCODES.UPDATE}`, streetcode), updateState: (id: number, stateId: number) => Agent.put( @@ -71,7 +71,7 @@ const StreetcodesApi = { {}, ), - delete: (id: number) => Agent.delete(`${API_ROUTES.STREETCODES.DELETE}/${id}`), + delete: (id: number) => AgentFrontend.delete(`${API_ROUTES.STREETCODES.DELETE}/${id}`), existWithIndex: (index:number) => Agent.get(`${API_ROUTES.STREETCODES.EXIST_WITH_INDEX}/${index}`), diff --git a/src/features/MainPage/StreetcodeSlider/StreetcodeSlider.component.tsx b/src/features/MainPage/StreetcodeSlider/StreetcodeSlider.component.tsx index 0f71cf32e..0a6f70f28 100644 --- a/src/features/MainPage/StreetcodeSlider/StreetcodeSlider.component.tsx +++ b/src/features/MainPage/StreetcodeSlider/StreetcodeSlider.component.tsx @@ -16,6 +16,8 @@ import { StreetcodeMainPage } from '@/models/streetcode/streetcode-types.model'; import StreetcodeSliderItem from './StreetcodeSliderItem/StreetcodeSliderItem.component'; +const DEFAULT_STREETCODE_CARDS_AMOUNT = 32; + const StreetcodeSlider = () => { const [streetcodes, setStreetcodes] = useState([]); const [images, setImages] = useState([]); @@ -51,7 +53,7 @@ const StreetcodeSlider = () => { try { streetcodesAmount = await StreetcodesApi.getCount(true); } catch (e: any) { - streetcodesAmount = 32; // fetch 32 streetcodes if StreetcodesApi.getCount fails + streetcodesAmount = DEFAULT_STREETCODE_CARDS_AMOUNT; } const emptyStreetcodes = Array(streetcodesAmount).fill({}); @@ -62,7 +64,7 @@ const StreetcodeSlider = () => { const [newStreetcodes, startIdx, endIdx] = await fetchNextPage(); // eslint-disable-next-line @typescript-eslint/no-loop-func setStreetcodes((prevState) => { - // replace empty objects to fetched streetcodes + // replace empty objects to fetched streetcode const newState = [ ...prevState.slice(0, startIdx), ...newStreetcodes, diff --git a/src/features/StreetcodePage/MapBlock/Map/Map.component.tsx b/src/features/StreetcodePage/MapBlock/Map/Map.component.tsx index 6e5d1b4a3..6e5361927 100644 --- a/src/features/StreetcodePage/MapBlock/Map/Map.component.tsx +++ b/src/features/StreetcodePage/MapBlock/Map/Map.component.tsx @@ -50,29 +50,6 @@ const MapOSM = ({ statisticRecord, toponyms }: Props) => { }, []); L.Map.addInitHook('addHandler', 'gestureHandling', GestureHandling); - // if you need to use the previous second map - // return ( - //
- // - // - // {streetcodes?.isActive && ( - // - // {streetcodeCoordinates?.map((sc) => )} - // - // )} - // {streets?.isActive && ( - // - // {toponyms?.map((t) => )} - // - // )} - // - //
- // ); - return (
From 03fbe64a62c7313a084ccc5d4c62b554a14afec5 Mon Sep 17 00:00:00 2001 From: Oleh-Kril <91199925+Oleh-Kril@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:42:03 +0200 Subject: [PATCH 07/15] Update develop (#1102) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Develop (#1084) * Hide a slide outline * fix news modal from closing when image is not created (#1061) * - getting news from cache - green notification on news modal success (#1063) * fix scrolling to the main text (#1075) * remove react helmet + add banner (#1072) * Fixed progress bar visibility and popups (#1070) * Fixed progress bar visibility and popups * add animation transition to make it smoother --------- Co-authored-by: Oleh-Kril * Fix issue 847 Fix Url Ref (#1068) * Fix PrivatePolicy streetcode reference * Change ref to https://streetcode.com.ua * Add some fix * Fixed the amount buttons and input in donates modal (#1060) * Fix news image on safari (#1058) * refactor newsImage styles * add max-height * Fix for fans category editing (#1037) * Fixed unavalaible categories on new streetcode * Fixed category editing of for fans categories * Made a mobile ornament with varying lengths for screens with a width … (#1030) * Made a mobile ornament with varying lengths for screens with a width of 480 pixels or less * adjust margins to correspond design --------- Co-authored-by: Oleh-Kril * Fixed Issue 870, 871 (#1025) * Add red * to Timeline date field and vanish an error * Fix logic when error message shoud vanish * fix data check in timelineAdminModal * set fixed position for arrows in connection(streetcode) (#1029) * set fixed position for arrows in connection(streetcode) * adjust position of arrows --------- Co-authored-by: Oleh-Kril * fix our partners title (#1022) now it takes only 1 row instead of 2 * Refactor teams modal & list (#1069) * Refactor teams modal & list * remove commented code * Jest config (#1028) * Configured Jest * Configured Jest * Adding/modifying code spliting for dev and prod setups (#1041) * modify_bundle_split_for_dev_setup * adding_bundle_split_to_prod_condig * adding_entry_to_gitignore_file * adding_empty_line * adjust admin page styles (#1066) * Refactor partner modal (#1073) * refactor code part 1 - reduce code amount * refactor image uploading logic to make it correct * Minor changes and improvements (#1042) * adding_check-node-version_lib_and engine_configs * update_package-lock_and_yarn-lock_files * edit_readme_file --------- Co-authored-by: Oleh-Kril * Issue 604 (Change padding in main text field) (#1077) * Change padding in the text field * adjust on phone --------- Co-authored-by: Oleh-Kril * fix related events modal (#1080) * deleted scroll up on mobile and tablet * update components * add loading all tags * update streetcode components * update tags modal * update tags slider * delete streetcodeid * update related figure * - refactor code (no business logic changes) (#1065) * run linter (#1081) * revert_resolve_path_for_dev_build * revert_resolve_path_for_prod_build --------- Co-authored-by: ValDekh Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Bohdan Bozhyk <53005363+Adeodonne@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Co-authored-by: mykola-krai <133663112+mykola-krai@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Co-authored-by: Rominos7 * Update master (#1101) * Change amount of pictures for different size of screen (#1096) * Change amount of pictures for different size of sreenview * - change breakpoint to standard 768 --------- Co-authored-by: Oleh-Kril * Gmail is opened in new tab (#1087) * - refactor to open in a new tab (#1093) * fix modals closing (#1085) * fix modals closing * separate arrow function from props --------- Co-authored-by: Oleh-Kril * New editor v2 (#1086) * Initial react-quill config (news/main streetcode text). Needs cleaning & refactoring * Added quill everywhere, needs refactoring * cleaned code * Fixed text updating in ForFans admin block * Added utility to convert content to quill delta * Added validation when empty text fields in modals * Fixed bug with max length quill * Added the impossibility of saving a record with improper length * Cleaned code * Refactoring of editor * Removed package-lock.json changes from PR * Dynamics meta tags (#1095) * modify index.html * add server and configure metadata for news * add dynamic metatags for streetcodes * moved news file to another folder * run linter * add update for news (not completed) * adjust put and delete * handle delete and update of streetcode and news * add part of tests * -add api error filter * - cover with tests & refactor * - refactor code to separate logic and reduce code complexity * - test get and update * - write tests for delete - refactor to use constants - add all urls-to-omit * fix comments * fix comments: - refactor to use destructuring assigment - remove comments - move some lines to constants * remove stageback url --------- Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> --------- Co-authored-by: ValDekh Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Bohdan Bozhyk <53005363+Adeodonne@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Co-authored-by: mykola-krai <133663112+mykola-krai@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Co-authored-by: Rominos7 From 5ed2da0951d5f3c162716738e67b352015b3cf79 Mon Sep 17 00:00:00 2001 From: Oleh-Kril <91199925+Oleh-Kril@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:58:50 +0200 Subject: [PATCH 08/15] - temporary remove AgentFrontend (#1103) --- src/app/api/news/news.api.ts | 4 ++-- src/app/api/streetcode/streetcodes.api.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/api/news/news.api.ts b/src/app/api/news/news.api.ts index 7de1eeff7..2164481b0 100644 --- a/src/app/api/news/news.api.ts +++ b/src/app/api/news/news.api.ts @@ -15,9 +15,9 @@ const NewsApi = { create: (news: News) => Agent.post(`${API_ROUTES.NEWS.CREATE}`, news), - delete: (id: number) => AgentFrontend.delete(`${API_ROUTES.NEWS.DELETE}/${id}`), + delete: (id: number) => Agent.delete(`${API_ROUTES.NEWS.DELETE}/${id}`), - update: (news: News) => AgentFrontend.put(`${API_ROUTES.NEWS.UPDATE}`, news), + update: (news: News) => Agent.put(`${API_ROUTES.NEWS.UPDATE}`, news), }; export default NewsApi; diff --git a/src/app/api/streetcode/streetcodes.api.ts b/src/app/api/streetcode/streetcodes.api.ts index 4a17fc3f2..7d1a7e5eb 100644 --- a/src/app/api/streetcode/streetcodes.api.ts +++ b/src/app/api/streetcode/streetcodes.api.ts @@ -63,7 +63,7 @@ const StreetcodesApi = { create: (streetcode: StreetcodeCreate) => Agent .post(`${API_ROUTES.STREETCODES.CREATE}`, streetcode), - update: (streetcode: StreetcodeUpdate) => AgentFrontend + update: (streetcode: StreetcodeUpdate) => Agent .put(`${API_ROUTES.STREETCODES.UPDATE}`, streetcode), updateState: (id: number, stateId: number) => Agent.put( @@ -71,7 +71,7 @@ const StreetcodesApi = { {}, ), - delete: (id: number) => AgentFrontend.delete(`${API_ROUTES.STREETCODES.DELETE}/${id}`), + delete: (id: number) => Agent.delete(`${API_ROUTES.STREETCODES.DELETE}/${id}`), existWithIndex: (index:number) => Agent.get(`${API_ROUTES.STREETCODES.EXIST_WITH_INDEX}/${index}`), From 944168a39e22a3fc4ea30b91e3272b542b8f48bb Mon Sep 17 00:00:00 2001 From: Oleh-Kril <91199925+Oleh-Kril@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:42:03 +0200 Subject: [PATCH 09/15] Update develop (#1102) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Develop (#1084) * Hide a slide outline * fix news modal from closing when image is not created (#1061) * - getting news from cache - green notification on news modal success (#1063) * fix scrolling to the main text (#1075) * remove react helmet + add banner (#1072) * Fixed progress bar visibility and popups (#1070) * Fixed progress bar visibility and popups * add animation transition to make it smoother --------- Co-authored-by: Oleh-Kril * Fix issue 847 Fix Url Ref (#1068) * Fix PrivatePolicy streetcode reference * Change ref to https://streetcode.com.ua * Add some fix * Fixed the amount buttons and input in donates modal (#1060) * Fix news image on safari (#1058) * refactor newsImage styles * add max-height * Fix for fans category editing (#1037) * Fixed unavalaible categories on new streetcode * Fixed category editing of for fans categories * Made a mobile ornament with varying lengths for screens with a width … (#1030) * Made a mobile ornament with varying lengths for screens with a width of 480 pixels or less * adjust margins to correspond design --------- Co-authored-by: Oleh-Kril * Fixed Issue 870, 871 (#1025) * Add red * to Timeline date field and vanish an error * Fix logic when error message shoud vanish * fix data check in timelineAdminModal * set fixed position for arrows in connection(streetcode) (#1029) * set fixed position for arrows in connection(streetcode) * adjust position of arrows --------- Co-authored-by: Oleh-Kril * fix our partners title (#1022) now it takes only 1 row instead of 2 * Refactor teams modal & list (#1069) * Refactor teams modal & list * remove commented code * Jest config (#1028) * Configured Jest * Configured Jest * Adding/modifying code spliting for dev and prod setups (#1041) * modify_bundle_split_for_dev_setup * adding_bundle_split_to_prod_condig * adding_entry_to_gitignore_file * adding_empty_line * adjust admin page styles (#1066) * Refactor partner modal (#1073) * refactor code part 1 - reduce code amount * refactor image uploading logic to make it correct * Minor changes and improvements (#1042) * adding_check-node-version_lib_and engine_configs * update_package-lock_and_yarn-lock_files * edit_readme_file --------- Co-authored-by: Oleh-Kril * Issue 604 (Change padding in main text field) (#1077) * Change padding in the text field * adjust on phone --------- Co-authored-by: Oleh-Kril * fix related events modal (#1080) * deleted scroll up on mobile and tablet * update components * add loading all tags * update streetcode components * update tags modal * update tags slider * delete streetcodeid * update related figure * - refactor code (no business logic changes) (#1065) * run linter (#1081) * revert_resolve_path_for_dev_build * revert_resolve_path_for_prod_build --------- Co-authored-by: ValDekh Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Bohdan Bozhyk <53005363+Adeodonne@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Co-authored-by: mykola-krai <133663112+mykola-krai@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Co-authored-by: Rominos7 * Update master (#1101) * Change amount of pictures for different size of screen (#1096) * Change amount of pictures for different size of sreenview * - change breakpoint to standard 768 --------- Co-authored-by: Oleh-Kril * Gmail is opened in new tab (#1087) * - refactor to open in a new tab (#1093) * fix modals closing (#1085) * fix modals closing * separate arrow function from props --------- Co-authored-by: Oleh-Kril * New editor v2 (#1086) * Initial react-quill config (news/main streetcode text). Needs cleaning & refactoring * Added quill everywhere, needs refactoring * cleaned code * Fixed text updating in ForFans admin block * Added utility to convert content to quill delta * Added validation when empty text fields in modals * Fixed bug with max length quill * Added the impossibility of saving a record with improper length * Cleaned code * Refactoring of editor * Removed package-lock.json changes from PR * Dynamics meta tags (#1095) * modify index.html * add server and configure metadata for news * add dynamic metatags for streetcodes * moved news file to another folder * run linter * add update for news (not completed) * adjust put and delete * handle delete and update of streetcode and news * add part of tests * -add api error filter * - cover with tests & refactor * - refactor code to separate logic and reduce code complexity * - test get and update * - write tests for delete - refactor to use constants - add all urls-to-omit * fix comments * fix comments: - refactor to use destructuring assigment - remove comments - move some lines to constants * remove stageback url --------- Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> --------- Co-authored-by: ValDekh Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Bohdan Bozhyk <53005363+Adeodonne@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Co-authored-by: mykola-krai <133663112+mykola-krai@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Co-authored-by: Rominos7 From 6961dcfdf8e8bfbfc9b98fbbcacef352fc1aae37 Mon Sep 17 00:00:00 2001 From: Oleh-Kril <91199925+Oleh-Kril@users.noreply.github.com> Date: Thu, 11 Jan 2024 14:58:50 +0200 Subject: [PATCH 10/15] - temporary remove AgentFrontend (#1103) --- src/app/api/news/news.api.ts | 4 ++-- src/app/api/streetcode/streetcodes.api.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/app/api/news/news.api.ts b/src/app/api/news/news.api.ts index 7de1eeff7..2164481b0 100644 --- a/src/app/api/news/news.api.ts +++ b/src/app/api/news/news.api.ts @@ -15,9 +15,9 @@ const NewsApi = { create: (news: News) => Agent.post(`${API_ROUTES.NEWS.CREATE}`, news), - delete: (id: number) => AgentFrontend.delete(`${API_ROUTES.NEWS.DELETE}/${id}`), + delete: (id: number) => Agent.delete(`${API_ROUTES.NEWS.DELETE}/${id}`), - update: (news: News) => AgentFrontend.put(`${API_ROUTES.NEWS.UPDATE}`, news), + update: (news: News) => Agent.put(`${API_ROUTES.NEWS.UPDATE}`, news), }; export default NewsApi; diff --git a/src/app/api/streetcode/streetcodes.api.ts b/src/app/api/streetcode/streetcodes.api.ts index 4a17fc3f2..7d1a7e5eb 100644 --- a/src/app/api/streetcode/streetcodes.api.ts +++ b/src/app/api/streetcode/streetcodes.api.ts @@ -63,7 +63,7 @@ const StreetcodesApi = { create: (streetcode: StreetcodeCreate) => Agent .post(`${API_ROUTES.STREETCODES.CREATE}`, streetcode), - update: (streetcode: StreetcodeUpdate) => AgentFrontend + update: (streetcode: StreetcodeUpdate) => Agent .put(`${API_ROUTES.STREETCODES.UPDATE}`, streetcode), updateState: (id: number, stateId: number) => Agent.put( @@ -71,7 +71,7 @@ const StreetcodesApi = { {}, ), - delete: (id: number) => AgentFrontend.delete(`${API_ROUTES.STREETCODES.DELETE}/${id}`), + delete: (id: number) => Agent.delete(`${API_ROUTES.STREETCODES.DELETE}/${id}`), existWithIndex: (index:number) => Agent.get(`${API_ROUTES.STREETCODES.EXIST_WITH_INDEX}/${index}`), From b77048337e2388ea63fdaf6db73b8587585d0143 Mon Sep 17 00:00:00 2001 From: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Date: Fri, 12 Jan 2024 13:59:56 +0200 Subject: [PATCH 11/15] Set up jest and add new unit test (#1092) * install_new_modules_in-dev_dependencies * edit_jest_config_file * refactor_DeleteStreetcodeModal.component,tsx * adding_mock_for_root-store * adding_mock_for_modal * adding_unit_test_for_DeleteStreetcodeModal * fix_comment * fix_comment * restore_mobx * change_type * rename_constans_file * refactor_mock * refactor_modal_mock * adding_test_cases_with_getByRole * refactor_component_after_merge_with_develop * fix_UT * fix_lint * improve_UT --- __mocks__/@stores/root-store.tsx | 17 + __mocks__/antd/Modal.tsx | 21 + jest.config.ts | 45 +- package-lock.json | 1302 +++++--- package.json | 13 +- .../DeleteStreetcodeModal.component.spec.tsx | 99 + .../DeleteStreetcodeModal.component.tsx | 28 +- src/app/common/constants/modal.constants.ts | 2 + yarn.lock | 2686 ++++++++++++----- 9 files changed, 2963 insertions(+), 1250 deletions(-) create mode 100644 __mocks__/@stores/root-store.tsx create mode 100644 __mocks__/antd/Modal.tsx create mode 100644 src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.spec.tsx create mode 100644 src/app/common/constants/modal.constants.ts diff --git a/__mocks__/@stores/root-store.tsx b/__mocks__/@stores/root-store.tsx new file mode 100644 index 000000000..0c3dd7c1e --- /dev/null +++ b/__mocks__/@stores/root-store.tsx @@ -0,0 +1,17 @@ +export const mockID = 1; +export const mockIsOpen = true; +export const mockSetModal = jest.fn(); + +export const useModalContext = () => { + return { + modalStore: { + setModal: mockSetModal, + modalsState: { + deleteStreetcode: { + isOpen: mockIsOpen, + fromCardId: mockID, + }, + } + } + } +} diff --git a/__mocks__/antd/Modal.tsx b/__mocks__/antd/Modal.tsx new file mode 100644 index 000000000..f6f23a61d --- /dev/null +++ b/__mocks__/antd/Modal.tsx @@ -0,0 +1,21 @@ +import React, { ReactNode, MouseEventHandler, JSX } from 'react'; + +type Props = { + title: string, + open: boolean, + onOk: MouseEventHandler, + onCancel: MouseEventHandler, + children: ReactNode, +} + +export const Modal = ({ title, open, onOk, onCancel, children }: Props): JSX.Element => { + return ( + <> +
{title}
+
{JSON.stringify(open)}
+ + +
{children}
+ + ) +}; diff --git a/jest.config.ts b/jest.config.ts index 1020af0ba..348fb86d5 100644 --- a/jest.config.ts +++ b/jest.config.ts @@ -1,10 +1,49 @@ -/** @type {import('ts-jest').JestConfigWithTsJest} */ -module.exports = { +import type { JestConfigWithTsJest } from 'ts-jest'; + +const jestConfig: JestConfigWithTsJest = { preset: 'ts-jest', testEnvironment: 'jsdom', + roots: [''], moduleNameMapper: { '\\.(css|less|sass|scss)$': 'identity-obj-proxy', + 'antd': '/__mocks__/antd/Modal' + // DEV_NOTE: Down below is the right solution for compiling files by path + // But we need to fix ALL typo errors before it could be compiled + // Temp solution - mocking store/root-store. It will be added in mocks folder + // After fixing type error remove mock or continue using it(as more simple solution) + /* '^@/(.*)$': '/src/$1', + '^@app/(.*)$': '/src/app/$1', + '^@assets/(.*)$': '/src/assets/fonts/$1', + '^@sass/(.*)$': '/src/assets/sass/$1', + '^@images/(.*)$': '/src/assets/images/$1', + '^@features/(.*)$': '/src/features/$1', + '^@api/(.*)$': '/src/app/api/$1', + '^@stores/(.*)$': '/src/app/stores/$1', + '^@models/(.*)$': '/src/models/$1', + '^@components/(.*)$': '/src/app/common/components/$1', + '^@hooks/(.*)$': '/src/app/common/hooks/$1', + '^@constants/(.*)$': '/src/app/common/constants/$1', + '^@utils/(.*)$': '/src/app/common/utils/$1', + */ }, verbose: true, -}; + collectCoverageFrom: [ + "src/**/*.{ts, tsx, js, jsx}" + ], + globals: { + _env_: { + API_URL: 'https://mock_URL.com', + } + }, + coverageThreshold: { + global: { + statements: 0.1, + branches: 0.0, + functions: 0.0, + lines: 0.1, + } + }, +} + +export default jestConfig diff --git a/package-lock.json b/package-lock.json index 0aef5a56e..5c7ee7086 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,11 +18,9 @@ "@react-google-maps/api": "^2.18.1", "@react-hook/resize-observer": "^1.2.6", "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@tinymce/tinymce-react": "^4.3.0", "@types/googlemaps": "^3.43.3", - "@types/jest": "^27.5.2", "@types/maplibre-gl": "^1.14.0", "@types/node": "^16.18.9", "@types/react": "^18.0.26", @@ -46,7 +44,7 @@ "leaflet-gesture-handling": "^1.2.2", "lodash": "^4.17.21", "maplibre-gl": "^2.4.0", - "mobx": "^6.7.0", + "mobx": "^6.12.0", "mobx-react-lite": "^3.4.0", "rc-slider": "^10.1.1", "react": "^18.2.0", @@ -58,7 +56,6 @@ "react-draggable": "^4.4.5", "react-ga4": "^2.1.0", "react-google-recaptcha": "^2.1.0", - "react-helmet": "^6.1.0", "react-icons": "^4.8.0", "react-idle-timer": "^4.6.4", "react-image-size": "^2.0.0", @@ -71,7 +68,7 @@ "react-remove-scroll": "^2.5.5", "react-resize-detector": "^7.1.2", "react-responsive": "^9.0.2", - "react-router-dom": "^6.8.1", + "react-router-dom": "^6.19.0", "react-router-hash-link": "^2.4.3", "react-scripts": "5.0.1", "react-slick": "^0.29.0", @@ -84,16 +81,18 @@ "svg-url-loader": "^8.0.0", "swiper": "^8.4.6", "tinymce": "^6.4.0", - "ts-jest": "^29.1.1", "typescript": "^4.9.4", "yet-another-react-lightbox": "^2.2.7" }, "devDependencies": { "@babel/core": "^7.21.3", + "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/preset-env": "^7.23.3", "@babel/preset-react": "^7.23.3", "@svgr/webpack": "^6.5.1", + "@testing-library/react": "^14.1.2", "@types/html-to-text": "^9.0.4", + "@types/jest": "^29.5.11", "@types/leaflet": "^1.9.0", "@types/react-beautiful-dnd": "^13.1.3", "@types/react-google-recaptcha": "^2.1.5", @@ -113,9 +112,11 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "lint-staged": "^13.1.0", + "mobx-react": "^9.1.0", "react-test-renderer": "^18.2.0", "sass": "^1.69.5", "sass-loader": "^13.2.0", + "ts-jest": "^29.1.1", "ts-loader": "^9.4.2", "ts-node": "^10.9.1", "url-loader": "^4.1.1", @@ -768,9 +769,17 @@ } }, "node_modules/@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "deprecated": "This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, "engines": { "node": ">=6.9.0" }, @@ -2005,6 +2014,17 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/preset-modules": { "version": "0.1.6-no-external-plugins", "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz", @@ -2752,6 +2772,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2768,6 +2789,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2782,6 +2804,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2797,6 +2820,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2807,12 +2831,14 @@ "node_modules/@jest/console/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@jest/console/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -2821,6 +2847,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -2837,6 +2864,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -2848,6 +2876,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, "dependencies": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -2894,6 +2923,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -2908,6 +2938,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2923,6 +2954,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2933,12 +2965,14 @@ "node_modules/@jest/core/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@jest/core/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -2947,6 +2981,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2955,6 +2990,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -2979,6 +3015,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -2987,6 +3024,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -3006,6 +3044,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3022,6 +3061,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -3038,6 +3078,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -3052,6 +3093,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3066,6 +3108,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -3079,6 +3122,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -3090,6 +3134,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "engines": { "node": ">=10" } @@ -3098,6 +3143,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3109,6 +3155,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, "dependencies": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -3123,6 +3170,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, "dependencies": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -3154,6 +3202,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -3170,6 +3219,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3184,6 +3234,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3199,6 +3250,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3209,12 +3261,14 @@ "node_modules/@jest/fake-timers/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@jest/fake-timers/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3223,6 +3277,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3239,6 +3294,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3250,6 +3306,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -3264,6 +3321,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, "dependencies": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -3306,6 +3364,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3320,6 +3379,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3335,6 +3395,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3345,12 +3406,14 @@ "node_modules/@jest/reporters/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@jest/reporters/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3359,6 +3422,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, "dependencies": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -3374,6 +3438,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3390,6 +3455,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -3404,6 +3470,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3418,6 +3485,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" }, @@ -3429,6 +3497,7 @@ "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" }, @@ -3443,6 +3512,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3453,7 +3523,8 @@ "node_modules/@jest/reporters/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/@jest/schemas": { "version": "29.6.3", @@ -3470,6 +3541,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -3483,6 +3555,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, "dependencies": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -3497,6 +3570,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, "dependencies": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -3511,6 +3585,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3525,6 +3600,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3540,6 +3616,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3550,12 +3627,14 @@ "node_modules/@jest/test-sequencer/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@jest/test-sequencer/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3564,6 +3643,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -3588,6 +3668,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -3596,6 +3677,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3612,6 +3694,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -3626,6 +3709,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3640,6 +3724,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3651,6 +3736,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -3676,6 +3762,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -3690,6 +3777,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -3705,6 +3793,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -3715,17 +3804,20 @@ "node_modules/@jest/transform/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/@jest/transform/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/@jest/transform/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -3734,6 +3826,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -3758,6 +3851,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -3766,6 +3860,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -3782,6 +3877,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -3796,6 +3892,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -3810,6 +3907,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4318,11 +4416,11 @@ } }, "node_modules/@remix-run/router": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz", - "integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz", + "integrity": "sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==", "engines": { - "node": ">=14" + "node": ">=14.0.0" } }, "node_modules/@rollup/plugin-babel": { @@ -4425,6 +4523,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, "dependencies": { "type-detect": "4.0.8" } @@ -4433,6 +4532,7 @@ "version": "10.3.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, "dependencies": { "@sinonjs/commons": "^3.0.0" } @@ -4709,7 +4809,6 @@ "version": "9.3.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.0.tgz", "integrity": "sha512-Dffe68pGwI6WlLRYR2I0piIkyole9cSBH5jGQKCGMRpHW5RHCqAUaqc2Kv0tUyd4dU4DLPKhJIjyKOnjv4tuUw==", - "peer": true, "dependencies": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -4728,7 +4827,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "peer": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -4743,7 +4841,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "peer": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4759,7 +4856,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "peer": true, "dependencies": { "color-name": "~1.1.4" }, @@ -4770,14 +4866,12 @@ "node_modules/@testing-library/dom/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "peer": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "node_modules/@testing-library/dom/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true, "engines": { "node": ">=8" } @@ -4786,7 +4880,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "peer": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -4877,104 +4970,23 @@ } }, "node_modules/@testing-library/react": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", - "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.1.2.tgz", + "integrity": "sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==", + "dev": true, "dependencies": { "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.5.0", + "@testing-library/dom": "^9.0.0", "@types/react-dom": "^18.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, "peerDependencies": { "react": "^18.0.0", "react-dom": "^18.0.0" } }, - "node_modules/@testing-library/react/node_modules/@testing-library/dom": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz", - "integrity": "sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@testing-library/react/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@testing-library/react/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/@testing-library/react/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/@testing-library/react/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "node_modules/@testing-library/react/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "node_modules/@testing-library/react/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/@testing-library/user-event": { "version": "13.5.0", "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-13.5.0.tgz", @@ -5239,12 +5251,36 @@ } }, "node_modules/@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "version": "29.5.11", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.11.tgz", + "integrity": "sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==", "dependencies": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "node_modules/@types/jest/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@types/jest/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/@types/jsdom": { @@ -6608,6 +6644,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, "dependencies": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -6628,6 +6665,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -6642,6 +6680,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6657,6 +6696,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -6667,12 +6707,14 @@ "node_modules/babel-jest/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/babel-jest/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -6681,6 +6723,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -6742,6 +6785,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, "dependencies": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -6861,6 +6905,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, "dependencies": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -7071,6 +7116,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, "dependencies": { "fast-json-stable-stringify": "2.x" }, @@ -7450,6 +7496,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -7462,12 +7509,14 @@ "node_modules/cliui/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/cliui/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -7476,6 +7525,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", @@ -7769,6 +7819,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -7789,6 +7840,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -7803,6 +7855,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7818,6 +7871,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -7828,12 +7882,14 @@ "node_modules/create-jest/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/create-jest/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -7842,6 +7898,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -7858,6 +7915,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -8444,6 +8502,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, "peerDependencies": { "babel-plugin-macros": "^3.1.0" }, @@ -8945,6 +9004,7 @@ "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, "engines": { "node": ">=12" }, @@ -12160,6 +12220,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -12185,6 +12246,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, "dependencies": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -12198,6 +12260,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -12212,6 +12275,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12227,6 +12291,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -12237,12 +12302,14 @@ "node_modules/jest-changed-files/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-changed-files/node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -12265,6 +12332,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -12273,6 +12341,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, "engines": { "node": ">=10.17.0" } @@ -12281,6 +12350,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" }, @@ -12292,6 +12362,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -12308,6 +12379,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, "engines": { "node": ">=6" } @@ -12316,6 +12388,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "dependencies": { "path-key": "^3.0.0" }, @@ -12327,6 +12400,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "dependencies": { "mimic-fn": "^2.1.0" }, @@ -12341,6 +12415,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, "engines": { "node": ">=6" } @@ -12349,6 +12424,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -12360,6 +12436,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, "dependencies": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -12390,6 +12467,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -12404,6 +12482,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12419,6 +12498,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -12429,12 +12509,14 @@ "node_modules/jest-circus/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-circus/node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -12443,6 +12525,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -12451,6 +12534,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -12465,6 +12549,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -12473,6 +12558,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -12487,6 +12573,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -12503,6 +12590,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -12516,6 +12604,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -12527,6 +12616,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -12538,6 +12628,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, "dependencies": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -12570,6 +12661,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -12584,6 +12676,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12599,6 +12692,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -12609,12 +12703,14 @@ "node_modules/jest-cli/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-cli/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -12623,6 +12719,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -12631,6 +12728,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -12647,6 +12745,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -12663,6 +12762,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -12676,6 +12776,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -12687,6 +12788,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -12698,6 +12800,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -12742,6 +12845,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -12756,6 +12860,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -12771,6 +12876,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -12781,12 +12887,14 @@ "node_modules/jest-config/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-config/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -12795,6 +12903,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -12803,6 +12912,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -12827,6 +12937,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -12835,6 +12946,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -12854,6 +12966,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -12870,6 +12983,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -12886,6 +13000,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -12900,6 +13015,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -12914,6 +13030,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -12927,6 +13044,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -12938,6 +13056,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "engines": { "node": ">=10" } @@ -12946,6 +13065,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -13035,6 +13155,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, "dependencies": { "detect-newline": "^3.0.0" }, @@ -13046,6 +13167,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -13061,6 +13183,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -13075,6 +13198,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13090,6 +13214,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -13100,12 +13225,14 @@ "node_modules/jest-each/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-each/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -13114,6 +13241,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -13122,6 +13250,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -13138,6 +13267,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -13151,6 +13281,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -13162,6 +13293,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -13287,6 +13419,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -13303,6 +13436,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -13317,6 +13451,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -13332,6 +13467,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -13342,12 +13478,14 @@ "node_modules/jest-environment-node/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-environment-node/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -13356,6 +13494,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -13372,6 +13511,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -13991,6 +14131,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, "dependencies": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -14003,6 +14144,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -14014,6 +14156,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -14022,6 +14165,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -14220,6 +14364,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -14233,6 +14378,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -14247,6 +14393,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14262,6 +14409,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -14272,12 +14420,14 @@ "node_modules/jest-mock/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-mock/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -14286,6 +14436,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -14302,6 +14453,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14357,6 +14509,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, "dependencies": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -14369,6 +14522,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -14464,6 +14618,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, "dependencies": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -14495,6 +14650,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -14509,6 +14665,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14524,6 +14681,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -14534,12 +14692,14 @@ "node_modules/jest-runner/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-runner/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -14548,6 +14708,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -14556,6 +14717,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -14580,6 +14742,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -14588,6 +14751,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -14607,6 +14771,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -14623,6 +14788,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -14639,6 +14805,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -14653,6 +14820,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14667,6 +14835,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -14680,6 +14849,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -14691,6 +14861,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "engines": { "node": ">=10" } @@ -14699,6 +14870,7 @@ "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -14708,6 +14880,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14719,6 +14892,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, "dependencies": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -14751,6 +14925,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -14765,6 +14940,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -14780,6 +14956,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -14790,12 +14967,14 @@ "node_modules/jest-runtime/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-runtime/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -14804,6 +14983,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -14812,6 +14992,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -14836,6 +15017,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -14844,6 +15026,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "dependencies": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -14863,6 +15046,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -14879,6 +15063,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -14895,6 +15080,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "dependencies": { "@types/node": "*", "jest-util": "^29.7.0", @@ -14909,6 +15095,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14923,6 +15110,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -14936,6 +15124,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -14947,6 +15136,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, "engines": { "node": ">=10" } @@ -14955,6 +15145,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -14978,6 +15169,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, "dependencies": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -15008,6 +15200,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -15022,6 +15215,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15037,6 +15231,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -15047,12 +15242,14 @@ "node_modules/jest-snapshot/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-snapshot/node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -15061,6 +15258,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -15069,6 +15267,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -15083,6 +15282,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -15091,6 +15291,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, "dependencies": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -15105,6 +15306,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -15121,6 +15323,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" }, @@ -15132,6 +15335,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -15145,6 +15349,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { "node": ">=10" }, @@ -15156,6 +15361,7 @@ "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" }, @@ -15170,6 +15376,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -15180,7 +15387,8 @@ "node_modules/jest-snapshot/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/jest-util": { "version": "27.5.1", @@ -15392,6 +15600,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, "dependencies": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -15410,6 +15619,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -15424,6 +15634,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -15439,6 +15650,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -15449,12 +15661,14 @@ "node_modules/jest-watcher/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/jest-watcher/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -15463,6 +15677,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -15479,6 +15694,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -16233,7 +16449,8 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true }, "node_modules/makeerror": { "version": "1.0.12", @@ -16563,12 +16780,37 @@ } }, "node_modules/mobx": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.9.0.tgz", - "integrity": "sha512-HdKewQEREEJgsWnErClfbFoVebze6rGazxFLU/XUyrII8dORfVszN1V0BMRnQSzcgsNNtkX8DHj3nC6cdWE9YQ==", + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.12.0.tgz", + "integrity": "sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + } + }, + "node_modules/mobx-react": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-9.1.0.tgz", + "integrity": "sha512-DeDRTYw4AlgHw8xEXtiZdKKEnp+c5/jeUgTbTQXEqnAzfkrgYRWP3p3Nv3Whc2CEcM/mDycbDWGjxKokQdlffg==", + "dev": true, + "dependencies": { + "mobx-react-lite": "^4.0.4" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.9.0", + "react": "^16.8.0 || ^17 || ^18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } } }, "node_modules/mobx-react-lite": { @@ -16592,6 +16834,31 @@ } } }, + "node_modules/mobx-react/node_modules/mobx-react-lite": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.0.5.tgz", + "integrity": "sha512-StfB2wxE8imKj1f6T8WWPf4lVMx3cYH9Iy60bbKXEs21+HQ4tvvfIBZfSmMXgQAefi8xYEwQIz4GN9s0d2h7dg==", + "dev": true, + "dependencies": { + "use-sync-external-store": "^1.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mobx" + }, + "peerDependencies": { + "mobx": "^6.9.0", + "react": "^16.8.0 || ^17 || ^18" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -18678,6 +18945,7 @@ "version": "6.0.4", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, "funding": [ { "type": "individual", @@ -19695,20 +19963,6 @@ "react": ">=16.4.1" } }, - "node_modules/react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "dependencies": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - }, - "peerDependencies": { - "react": ">=16.3.0" - } - }, "node_modules/react-icons": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.9.0.tgz", @@ -20007,29 +20261,29 @@ } }, "node_modules/react-router": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz", - "integrity": "sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==", + "version": "6.21.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.1.tgz", + "integrity": "sha512-W0l13YlMTm1YrpVIOpjCADJqEUpz1vm+CMo47RuFX4Ftegwm6KOYsL5G3eiE52jnJpKvzm6uB/vTKTPKM8dmkA==", "dependencies": { - "@remix-run/router": "1.6.2" + "@remix-run/router": "1.14.1" }, "engines": { - "node": ">=14" + "node": ">=14.0.0" }, "peerDependencies": { "react": ">=16.8" } }, "node_modules/react-router-dom": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz", - "integrity": "sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==", + "version": "6.21.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.1.tgz", + "integrity": "sha512-QCNrtjtDPwHDO+AO21MJd7yIcr41UetYt5jzaB9Y1UYaPTCnVuJq6S748g1dE11OQlCFIQg+RtAA1SEZIyiBeA==", "dependencies": { - "@remix-run/router": "1.6.2", - "react-router": "6.11.2" + "@remix-run/router": "1.14.1", + "react-router": "6.21.1" }, "engines": { - "node": ">=14" + "node": ">=14.0.0" }, "peerDependencies": { "react": ">=16.8", @@ -22253,22 +22507,6 @@ "react": "^16.0.0 || ^17.0.0 || ^18.0.0" } }, - "node_modules/react-side-effect": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", - "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0 || ^18.0.0" - } - }, - "node_modules/react-side-effect": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", - "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", - "peerDependencies": { - "react": "^16.3.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-slick": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.29.0.tgz", @@ -24548,6 +24786,7 @@ "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, "dependencies": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", @@ -24590,6 +24829,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -24604,6 +24844,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -24619,6 +24860,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -24629,12 +24871,14 @@ "node_modules/ts-jest/node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/ts-jest/node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -24643,6 +24887,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "dependencies": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -24659,6 +24904,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" }, @@ -24670,6 +24916,7 @@ "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" }, @@ -24684,6 +24931,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -24694,7 +24942,8 @@ "node_modules/ts-jest/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/ts-loader": { "version": "9.4.3", @@ -25215,6 +25464,15 @@ } } }, + "node_modules/use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "dev": true, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -25265,6 +25523,7 @@ "version": "9.1.3", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "dev": true, "dependencies": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -25277,7 +25536,8 @@ "node_modules/v8-to-istanbul/node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "node_modules/vary": { "version": "1.1.2", @@ -26185,6 +26445,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -26272,6 +26533,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -26289,6 +26551,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, "engines": { "node": ">=12" } @@ -26296,12 +26559,14 @@ "node_modules/yargs/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/yargs/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -26310,6 +26575,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", @@ -26819,10 +27085,16 @@ } }, "@babel/plugin-proposal-private-property-in-object": { - "version": "7.21.0-placeholder-for-preset-env.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", - "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", - "requires": {} + "version": "7.21.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz", + "integrity": "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } }, "@babel/plugin-syntax-async-generators": { "version": "7.8.4", @@ -27608,6 +27880,14 @@ "babel-plugin-polyfill-regenerator": "^0.5.3", "core-js-compat": "^3.31.0", "semver": "^6.3.1" + }, + "dependencies": { + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "requires": {} + } } }, "@babel/preset-modules": { @@ -28095,6 +28375,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -28108,6 +28389,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -28116,6 +28398,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28125,6 +28408,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -28132,17 +28416,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -28156,6 +28443,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -28166,6 +28454,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, "requires": { "@jest/console": "^29.7.0", "@jest/reporters": "^29.7.0", @@ -28201,6 +28490,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -28209,6 +28499,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28218,6 +28509,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -28225,22 +28517,26 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true }, "jest-haste-map": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -28259,12 +28555,14 @@ "jest-regex-util": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true }, "jest-resolve": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -28281,6 +28579,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -28294,6 +28593,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -28307,6 +28607,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "requires": { "@types/node": "*", "jest-util": "^29.7.0", @@ -28318,6 +28619,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -28328,6 +28630,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -28337,19 +28640,22 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, "resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -28360,6 +28666,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, "requires": { "@jest/fake-timers": "^29.7.0", "@jest/types": "^29.6.3", @@ -28371,6 +28678,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, "requires": { "expect": "^29.7.0", "jest-snapshot": "^29.7.0" @@ -28395,6 +28703,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@sinonjs/fake-timers": "^10.0.2", @@ -28408,6 +28717,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -28416,6 +28726,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28425,6 +28736,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -28432,17 +28744,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -28456,6 +28771,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -28466,6 +28782,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, "requires": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -28477,6 +28794,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, "requires": { "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", @@ -28508,6 +28826,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -28516,6 +28835,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28525,6 +28845,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -28532,17 +28853,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "istanbul-lib-instrument": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, "requires": { "@babel/core": "^7.12.3", "@babel/parser": "^7.14.7", @@ -28555,6 +28879,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -28568,6 +28893,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "requires": { "@types/node": "*", "jest-util": "^29.7.0", @@ -28579,6 +28905,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -28589,6 +28916,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, "requires": { "yallist": "^4.0.0" } @@ -28597,6 +28925,7 @@ "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, "requires": { "lru-cache": "^6.0.0" } @@ -28605,6 +28934,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -28612,7 +28942,8 @@ "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 } } }, @@ -28628,6 +28959,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.18", "callsites": "^3.0.0", @@ -28638,6 +28970,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, "requires": { "@jest/console": "^29.7.0", "@jest/types": "^29.6.3", @@ -28649,6 +28982,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, "requires": { "@jest/test-result": "^29.7.0", "graceful-fs": "^4.2.9", @@ -28660,6 +28994,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -28668,6 +29003,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28677,6 +29013,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -28684,17 +29021,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-haste-map": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -28713,12 +29053,14 @@ "jest-regex-util": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -28732,6 +29074,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "requires": { "@types/node": "*", "jest-util": "^29.7.0", @@ -28743,6 +29086,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -28753,6 +29097,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -28763,6 +29108,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, "requires": { "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", @@ -28785,6 +29131,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -28793,6 +29140,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -28802,6 +29150,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -28809,22 +29158,26 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-haste-map": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -28843,12 +29196,14 @@ "jest-regex-util": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -28862,6 +29217,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "requires": { "@types/node": "*", "jest-util": "^29.7.0", @@ -28873,6 +29229,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -28883,6 +29240,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -29255,9 +29613,9 @@ "requires": {} }, "@remix-run/router": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz", - "integrity": "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==" + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz", + "integrity": "sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==" }, "@rollup/plugin-babel": { "version": "5.3.1", @@ -29330,6 +29688,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, "requires": { "type-detect": "4.0.8" } @@ -29338,6 +29697,7 @@ "version": "10.3.0", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, "requires": { "@sinonjs/commons": "^3.0.0" } @@ -29491,7 +29851,6 @@ "version": "9.3.0", "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.0.tgz", "integrity": "sha512-Dffe68pGwI6WlLRYR2I0piIkyole9cSBH5jGQKCGMRpHW5RHCqAUaqc2Kv0tUyd4dU4DLPKhJIjyKOnjv4tuUw==", - "peer": true, "requires": { "@babel/code-frame": "^7.10.4", "@babel/runtime": "^7.12.5", @@ -29507,7 +29866,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "peer": true, "requires": { "color-convert": "^2.0.1" } @@ -29516,7 +29874,6 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "peer": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -29526,7 +29883,6 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "peer": true, "requires": { "color-name": "~1.1.4" } @@ -29534,20 +29890,17 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "peer": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "peer": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "peer": true, "requires": { "has-flag": "^4.0.0" } @@ -29616,73 +29969,14 @@ } }, "@testing-library/react": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz", - "integrity": "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==", + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@testing-library/react/-/react-14.1.2.tgz", + "integrity": "sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==", + "dev": true, "requires": { "@babel/runtime": "^7.12.5", - "@testing-library/dom": "^8.5.0", + "@testing-library/dom": "^9.0.0", "@types/react-dom": "^18.0.0" - }, - "dependencies": { - "@testing-library/dom": { - "version": "8.20.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz", - "integrity": "sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==", - "requires": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "^5.0.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.4.4", - "pretty-format": "^27.0.2" - } - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "requires": { - "has-flag": "^4.0.0" - } - } } }, "@testing-library/user-event": { @@ -29931,12 +30225,29 @@ } }, "@types/jest": { - "version": "27.5.2", - "resolved": "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz", - "integrity": "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==", + "version": "29.5.11", + "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.5.11.tgz", + "integrity": "sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==", "requires": { - "jest-matcher-utils": "^27.0.0", - "pretty-format": "^27.0.0" + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + }, + "pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "requires": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + } + } } }, "@types/jsdom": { @@ -30996,6 +31307,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, "requires": { "@jest/transform": "^29.7.0", "@types/babel__core": "^7.1.14", @@ -31010,6 +31322,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -31018,6 +31331,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -31027,6 +31341,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -31034,17 +31349,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -31090,6 +31408,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, "requires": { "@babel/template": "^7.3.3", "@babel/types": "^7.3.3", @@ -31185,6 +31504,7 @@ "version": "29.6.3", "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, "requires": { "babel-plugin-jest-hoist": "^29.6.3", "babel-preset-current-node-syntax": "^1.0.0" @@ -31349,6 +31669,7 @@ "version": "0.2.6", "resolved": "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz", "integrity": "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==", + "dev": true, "requires": { "fast-json-stable-stringify": "2.x" } @@ -31611,6 +31932,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -31620,17 +31942,20 @@ "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 }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -31868,6 +32193,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -31882,6 +32208,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -31890,6 +32217,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -31899,6 +32227,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -31906,17 +32235,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -31930,6 +32262,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -32335,6 +32668,7 @@ "version": "1.5.1", "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, "requires": {} }, "deep-equal": { @@ -32709,7 +33043,8 @@ "emittery": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==" + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true }, "emoji-regex": { "version": "9.2.2", @@ -35000,6 +35335,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, "requires": { "@jest/core": "^29.7.0", "@jest/types": "^29.6.3", @@ -35011,6 +35347,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, "requires": { "execa": "^5.0.0", "jest-util": "^29.7.0", @@ -35021,6 +35358,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -35029,6 +35367,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -35038,6 +35377,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -35045,12 +35385,14 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, "requires": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -35066,22 +35408,26 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==" + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -35094,12 +35440,14 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, "requires": { "path-key": "^3.0.0" } @@ -35108,6 +35456,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -35115,12 +35464,14 @@ "strip-final-newline": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==" + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -35131,6 +35482,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, "requires": { "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", @@ -35158,6 +35510,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -35166,6 +35519,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -35175,6 +35529,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -35182,22 +35537,26 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -35208,12 +35567,14 @@ "jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true }, "jest-matcher-utils": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, "requires": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -35225,6 +35586,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -35238,6 +35600,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -35247,7 +35610,8 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, @@ -35255,6 +35619,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -35265,6 +35630,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, "requires": { "@jest/core": "^29.7.0", "@jest/test-result": "^29.7.0", @@ -35283,6 +35649,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -35291,6 +35658,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -35300,6 +35668,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -35307,22 +35676,26 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -35336,6 +35709,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -35349,6 +35723,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -35358,7 +35733,8 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, @@ -35366,6 +35742,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -35376,6 +35753,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, "requires": { "@babel/core": "^7.11.6", "@jest/test-sequencer": "^29.7.0", @@ -35405,6 +35783,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -35413,6 +35792,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -35422,6 +35802,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -35429,22 +35810,26 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true }, "jest-haste-map": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -35463,12 +35848,14 @@ "jest-regex-util": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true }, "jest-resolve": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -35485,6 +35872,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -35498,6 +35886,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -35511,6 +35900,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "requires": { "@types/node": "*", "jest-util": "^29.7.0", @@ -35522,6 +35912,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -35532,6 +35923,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -35541,19 +35933,22 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, "resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -35620,6 +36015,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, "requires": { "detect-newline": "^3.0.0" } @@ -35628,6 +36024,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "chalk": "^4.0.0", @@ -35640,6 +36037,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -35648,6 +36046,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -35657,6 +36056,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -35664,22 +36064,26 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -35693,6 +36097,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -35702,7 +36107,8 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, @@ -35710,6 +36116,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -35801,6 +36208,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, "requires": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -35814,6 +36222,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -35822,6 +36231,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -35831,6 +36241,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -35838,17 +36249,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -35862,6 +36276,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -36347,6 +36762,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, "requires": { "jest-get-type": "^29.6.3", "pretty-format": "^29.7.0" @@ -36355,17 +36771,20 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true }, "jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true }, "pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -36512,6 +36931,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -36522,6 +36942,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -36530,6 +36951,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -36539,6 +36961,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -36546,17 +36969,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -36570,6 +36996,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -36673,6 +37100,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, "requires": { "jest-regex-util": "^29.6.3", "jest-snapshot": "^29.7.0" @@ -36681,7 +37109,8 @@ "jest-regex-util": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true } } }, @@ -36689,6 +37118,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, "requires": { "@jest/console": "^29.7.0", "@jest/environment": "^29.7.0", @@ -36717,6 +37147,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -36725,6 +37156,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -36734,6 +37166,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -36741,22 +37174,26 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true }, "jest-haste-map": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -36775,12 +37212,14 @@ "jest-regex-util": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true }, "jest-resolve": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -36797,6 +37236,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -36810,6 +37250,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -36823,6 +37264,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "requires": { "@types/node": "*", "jest-util": "^29.7.0", @@ -36834,6 +37276,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -36844,6 +37287,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -36853,19 +37297,22 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, "resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true }, "source-map-support": { "version": "0.5.13", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -36875,6 +37322,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -36885,6 +37333,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, "requires": { "@jest/environment": "^29.7.0", "@jest/fake-timers": "^29.7.0", @@ -36914,6 +37363,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -36922,6 +37372,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -36931,6 +37382,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -36938,22 +37390,26 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true }, "jest-haste-map": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/graceful-fs": "^4.1.3", @@ -36972,12 +37428,14 @@ "jest-regex-util": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", - "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true }, "jest-resolve": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, "requires": { "chalk": "^4.0.0", "graceful-fs": "^4.2.9", @@ -36994,6 +37452,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -37007,6 +37466,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "camelcase": "^6.2.0", @@ -37020,6 +37480,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, "requires": { "@types/node": "*", "jest-util": "^29.7.0", @@ -37031,6 +37492,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -37041,6 +37503,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -37050,19 +37513,22 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, "resolve.exports": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -37082,6 +37548,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, "requires": { "@babel/core": "^7.11.6", "@babel/generator": "^7.7.2", @@ -37109,6 +37576,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -37117,6 +37585,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -37126,6 +37595,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -37133,22 +37603,26 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, "requires": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -37159,12 +37633,14 @@ "jest-get-type": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", - "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true }, "jest-matcher-utils": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, "requires": { "chalk": "^4.0.0", "jest-diff": "^29.7.0", @@ -37176,6 +37652,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -37189,6 +37666,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, "requires": { "yallist": "^4.0.0" } @@ -37197,6 +37675,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "requires": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -37206,7 +37685,8 @@ "ansi-styles": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==" + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true } } }, @@ -37214,6 +37694,7 @@ "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, "requires": { "lru-cache": "^6.0.0" } @@ -37222,6 +37703,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -37229,7 +37711,8 @@ "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 } } }, @@ -37393,6 +37876,7 @@ "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, "requires": { "@jest/test-result": "^29.7.0", "@jest/types": "^29.6.3", @@ -37408,6 +37892,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -37416,6 +37901,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -37425,6 +37911,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -37432,17 +37919,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -37456,6 +37946,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -38036,7 +38527,8 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "devOptional": true }, "makeerror": { "version": "1.0.12", @@ -38295,9 +38787,29 @@ } }, "mobx": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.9.0.tgz", - "integrity": "sha512-HdKewQEREEJgsWnErClfbFoVebze6rGazxFLU/XUyrII8dORfVszN1V0BMRnQSzcgsNNtkX8DHj3nC6cdWE9YQ==" + "version": "6.12.0", + "resolved": "https://registry.npmjs.org/mobx/-/mobx-6.12.0.tgz", + "integrity": "sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==" + }, + "mobx-react": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/mobx-react/-/mobx-react-9.1.0.tgz", + "integrity": "sha512-DeDRTYw4AlgHw8xEXtiZdKKEnp+c5/jeUgTbTQXEqnAzfkrgYRWP3p3Nv3Whc2CEcM/mDycbDWGjxKokQdlffg==", + "dev": true, + "requires": { + "mobx-react-lite": "^4.0.4" + }, + "dependencies": { + "mobx-react-lite": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.0.5.tgz", + "integrity": "sha512-StfB2wxE8imKj1f6T8WWPf4lVMx3cYH9Iy60bbKXEs21+HQ4tvvfIBZfSmMXgQAefi8xYEwQIz4GN9s0d2h7dg==", + "dev": true, + "requires": { + "use-sync-external-store": "^1.2.0" + } + } + } }, "mobx-react-lite": { "version": "3.4.3", @@ -39626,7 +40138,8 @@ "pure-rand": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", - "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==" + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true }, "q": { "version": "1.5.1", @@ -40338,17 +40851,6 @@ "react-async-script": "^1.1.1" } }, - "react-helmet": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz", - "integrity": "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==", - "requires": { - "object-assign": "^4.1.1", - "prop-types": "^15.7.2", - "react-fast-compare": "^3.1.1", - "react-side-effect": "^2.1.0" - } - }, "react-icons": { "version": "4.9.0", "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.9.0.tgz", @@ -40564,20 +41066,20 @@ } }, "react-router": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz", - "integrity": "sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==", + "version": "6.21.1", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.21.1.tgz", + "integrity": "sha512-W0l13YlMTm1YrpVIOpjCADJqEUpz1vm+CMo47RuFX4Ftegwm6KOYsL5G3eiE52jnJpKvzm6uB/vTKTPKM8dmkA==", "requires": { - "@remix-run/router": "1.6.2" + "@remix-run/router": "1.14.1" } }, "react-router-dom": { - "version": "6.11.2", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz", - "integrity": "sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==", + "version": "6.21.1", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.1.tgz", + "integrity": "sha512-QCNrtjtDPwHDO+AO21MJd7yIcr41UetYt5jzaB9Y1UYaPTCnVuJq6S748g1dE11OQlCFIQg+RtAA1SEZIyiBeA==", "requires": { - "@remix-run/router": "1.6.2", - "react-router": "6.11.2" + "@remix-run/router": "1.14.1", + "react-router": "6.21.1" } }, "react-router-hash-link": { @@ -42197,18 +42699,6 @@ "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" } }, - "react-side-effect": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", - "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", - "requires": {} - }, - "react-side-effect": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz", - "integrity": "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==", - "requires": {} - }, "react-slick": { "version": "0.29.0", "resolved": "https://registry.npmjs.org/react-slick/-/react-slick-0.29.0.tgz", @@ -43898,6 +44388,7 @@ "version": "29.1.1", "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz", "integrity": "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==", + "dev": true, "requires": { "bs-logger": "0.x", "fast-json-stable-stringify": "2.x", @@ -43913,6 +44404,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -43921,6 +44413,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -43930,6 +44423,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -43937,17 +44431,20 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, "requires": { "@jest/types": "^29.6.3", "@types/node": "*", @@ -43961,6 +44458,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, "requires": { "yallist": "^4.0.0" } @@ -43969,6 +44467,7 @@ "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, "requires": { "lru-cache": "^6.0.0" } @@ -43977,6 +44476,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -43984,7 +44484,8 @@ "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 } } }, @@ -44328,6 +44829,13 @@ "tslib": "^2.0.0" } }, + "use-sync-external-store": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz", + "integrity": "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==", + "dev": true, + "requires": {} + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -44369,6 +44877,7 @@ "version": "9.1.3", "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz", "integrity": "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==", + "dev": true, "requires": { "@jridgewell/trace-mapping": "^0.3.12", "@types/istanbul-lib-coverage": "^2.0.1", @@ -44378,7 +44887,8 @@ "convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true } } }, @@ -45090,6 +45600,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, "requires": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -45148,6 +45659,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -45161,17 +45673,20 @@ "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 }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -45183,7 +45698,8 @@ "yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true }, "yet-another-react-lightbox": { "version": "2.6.2", diff --git a/package.json b/package.json index 08a0b25d6..c6db444d1 100644 --- a/package.json +++ b/package.json @@ -17,11 +17,9 @@ "@react-google-maps/api": "^2.18.1", "@react-hook/resize-observer": "^1.2.6", "@testing-library/jest-dom": "^5.16.5", - "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", "@tinymce/tinymce-react": "^4.3.0", "@types/googlemaps": "^3.43.3", - "@types/jest": "^27.5.2", "@types/maplibre-gl": "^1.14.0", "@types/node": "^16.18.9", "@types/react": "^18.0.26", @@ -45,7 +43,7 @@ "leaflet-gesture-handling": "^1.2.2", "lodash": "^4.17.21", "maplibre-gl": "^2.4.0", - "mobx": "^6.7.0", + "mobx": "^6.12.0", "mobx-react-lite": "^3.4.0", "quill": "^1.3.7", "rc-slider": "^10.1.1", @@ -84,7 +82,6 @@ "svg-url-loader": "^8.0.0", "swiper": "^8.4.6", "tinymce": "^6.4.0", - "ts-jest": "^29.1.1", "typescript": "^4.9.4", "yet-another-react-lightbox": "^2.2.7" }, @@ -96,7 +93,8 @@ "serve:w": "webpack --mode development --config config/webpack.dev.js --watch && serve ./dist/", "lint": "eslint --ext \".js,.ts,.tsx\" --ignore-path .gitignore .", "lint:fix": "npm run lint -- --fix", - "test": "jest --coverage" + "test": "jest", + "test:cover": "npm test -- --coverage --watchAll=false" }, "eslintConfig": { "extends": [ @@ -123,10 +121,13 @@ }, "devDependencies": { "@babel/core": "^7.21.3", + "@babel/plugin-proposal-private-property-in-object": "^7.21.11", "@babel/preset-env": "^7.23.3", "@babel/preset-react": "^7.23.3", "@svgr/webpack": "^6.5.1", + "@testing-library/react": "^14.1.2", "@types/html-to-text": "^9.0.4", + "@types/jest": "^29.5.11", "@types/leaflet": "^1.9.0", "@types/quill": "^2.0.14", "@types/react-beautiful-dnd": "^13.1.3", @@ -147,9 +148,11 @@ "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", "lint-staged": "^13.1.0", + "mobx-react": "^9.1.0", "react-test-renderer": "^18.2.0", "sass": "^1.69.5", "sass-loader": "^13.2.0", + "ts-jest": "^29.1.1", "ts-loader": "^9.4.2", "ts-node": "^10.9.1", "url-loader": "^4.1.1", diff --git a/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.spec.tsx b/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.spec.tsx new file mode 100644 index 000000000..e4bfbea08 --- /dev/null +++ b/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.spec.tsx @@ -0,0 +1,99 @@ +import React from 'react'; +import { render, fireEvent, getByRole } from '@testing-library/react'; +import { mockSetModal, mockID, mockIsOpen } from '../../../../../../__mocks__/@stores/root-store'; + +import { TITLE, DELETE_STREETCODE } from '../../../constants/modal.constants'; + +import DeleteStreetcodeModalComponent from "./DeleteStreetcodeModal.component"; + +const mockSetState = jest.fn(); + +describe('DeleteStreetcodeModalComponent', () => { + + // DEV NOTE: + // for educational purposes there are two describe blocks + // using getElementsByClassName and using getByRole + // getElementsByClassName is more universal method + // getByRole has it's own limitations for elements that have roles + // for exp. div element do not have role so getByRole will not work + + describe('using getElementsByClassName', () => { + beforeEach(() => { + const mockUseState: any = (initValue: any) => [initValue, mockSetState]; + jest.spyOn(React, 'useState').mockImplementation(mockUseState); + }); + + afterEach(() => { + jest.resetAllMocks(); + }); + + it('should render itself and its elements', () => { + const { container } = render(); + + const title = container.getElementsByClassName('modalTitle'); + expect(title).toHaveLength(1); + expect(title[0].textContent).toBe(TITLE); + + const isModalOpen = container.getElementsByClassName('isModalOpen'); + expect(isModalOpen).toHaveLength(1); + expect(isModalOpen[0].textContent).toBe(`${mockIsOpen}`); + + const okButton = container.getElementsByClassName('modalOkButton'); + expect(okButton).toHaveLength(1); + + const cancelButton = container.getElementsByClassName('modalCancelButton'); + expect(cancelButton).toHaveLength(1); + + const modalChildren = container.getElementsByClassName('modal-children'); + expect(modalChildren).toHaveLength(1); + expect(modalChildren[0].textContent).toEqual(`${mockID}`); + }); + + it('should call setModal from useModalContext when clicking onClick button', () => { + const { container } = render(); + const okButton = container.getElementsByClassName('modalOkButton')[0]; + + fireEvent.click(okButton); + expect(mockSetModal).toHaveBeenCalledWith(DELETE_STREETCODE); + }); + + it('should call setModal from useModalContext when clicking onCancel button', () => { + const { container } = render(); + const cancelButton = container.getElementsByClassName('modalCancelButton')[0]; + + fireEvent.click(cancelButton); + expect(mockSetState).toHaveBeenCalledWith(false); + }); + }); + + describe('using getByRole', () => { + beforeEach(() => { + const mockUseState: any = (initValue: any) => [initValue, mockSetState]; + jest.spyOn(React, 'useState').mockImplementation(mockUseState); + }); + + afterEach(() => { + jest.resetAllMocks(); + }); + + it('should call setModal from useModalContext when clicking onClick button', () => { + const { container } = render(); + const okButton = getByRole(container, 'button', { + name: /okButton/ // button text + }); + + fireEvent.click(okButton); + expect(mockSetModal).toHaveBeenCalledWith(DELETE_STREETCODE); + }); + + it('should call setModal from useModalContext when clicking onCancel button', () => { + const { container } = render(); + const cancelButton = getByRole(container, 'button', { + name: /cancelButton/ // button text + }); + + fireEvent.click(cancelButton); + expect(mockSetState).toHaveBeenCalledWith(false); + }); + }) +}); diff --git a/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.tsx b/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.tsx index e7c2d2ef9..c65fc0265 100644 --- a/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.tsx +++ b/src/app/common/components/modals/DeleteStreetcode/DeleteStreetcodeModal.component.tsx @@ -1,28 +1,32 @@ import './DeleteStreetcodeModal.styles.scss'; +import { useState } from 'react'; import { observer } from 'mobx-react-lite'; -import { useState } from 'react'; -import useMobx, { useModalContext } from '@stores/root-store'; +import { useModalContext } from '@stores/root-store'; +import { Modal } from 'antd'; -import { Button, Modal } from 'antd'; +import { TITLE, DELETE_STREETCODE } from '../../../constants/modal.constants'; const DeleteStreetcodeModal = () => { const { modalStore: { setModal, modalsState: { deleteStreetcode } } } = useModalContext(); - const clickHandle = () => deleteStreetcode.isOpen = false; - const confirmHandler = () => { - setModal('deleteStreetcode'); - }; + const { fromCardId, isOpen } = deleteStreetcode; + + const [isModalOpen, setIsModalOpen] = useState(isOpen); + + const onCancelHandle = () => setIsModalOpen(false); + + const onOkHandle = () => setModal(DELETE_STREETCODE); return ( confirmHandler()} - onCancel={clickHandle} + title={TITLE} + open={isModalOpen} + onOk={onOkHandle} + onCancel={onCancelHandle} className="deleteModal" > - {deleteStreetcode.fromCardId} + {fromCardId} ); }; diff --git a/src/app/common/constants/modal.constants.ts b/src/app/common/constants/modal.constants.ts new file mode 100644 index 000000000..b9acb4943 --- /dev/null +++ b/src/app/common/constants/modal.constants.ts @@ -0,0 +1,2 @@ +export const TITLE = "Delete streetcode"; +export const DELETE_STREETCODE = 'deleteStreetcode'; diff --git a/yarn.lock b/yarn.lock index 869783e08..9e4201937 100644 --- a/yarn.lock +++ b/yarn.lock @@ -94,19 +94,20 @@ "jsonpointer" "^5.0.0" "leven" "^3.1.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.8.3": - "integrity" "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==" - "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz" - "version" "7.21.4" +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.0", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.22.13", "@babel/code-frame@^7.8.3": + "integrity" "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==" + "resolved" "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz" + "version" "7.22.13" dependencies: - "@babel/highlight" "^7.18.6" + "@babel/highlight" "^7.22.13" + "chalk" "^2.4.2" -"@babel/compat-data@^7.17.7", "@babel/compat-data@^7.22.0", "@babel/compat-data@^7.22.3": - "integrity" "sha512-aNtko9OPOwVESUFp3MZfD8Uzxl7JzSeJpd7npIoxCasU37PFbAQRpKglkaKwlHOyeJdrREpo8TW8ldrkYWwvIQ==" - "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.3.tgz" - "version" "7.22.3" +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.22.9", "@babel/compat-data@^7.23.3": + "integrity" "sha512-BmR4bWbDIoFJmJ9z2cZ8Gmm2MXgEDgjdWgpKmKWUt54UGFJdlj31ECtbaDvCG/qVdG3AQ1SfpZEs01lUFbzLOQ==" + "resolved" "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.3.tgz" + "version" "7.23.3" -"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.16.0", "@babel/core@^7.19.6", "@babel/core@^7.21.3", "@babel/core@^7.4.0-0", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@>=7.11.0": +"@babel/core@^7.0.0", "@babel/core@^7.0.0-0", "@babel/core@^7.0.0-0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.1.0", "@babel/core@^7.11.1", "@babel/core@^7.11.6", "@babel/core@^7.12.0", "@babel/core@^7.12.3", "@babel/core@^7.13.0", "@babel/core@^7.16.0", "@babel/core@^7.19.6", "@babel/core@^7.21.3", "@babel/core@^7.4.0 || ^8.0.0-0 <8.0.0", "@babel/core@^7.7.2", "@babel/core@^7.8.0", "@babel/core@>=7.0.0-beta.0 <8", "@babel/core@>=7.11.0": "integrity" "sha512-Hkqu7J4ynysSXxmAahpN1jjRwVJ+NdpraFLIWflgjpVob3KNyK3/tIUc7Q7szed8WMp0JNa7Qtd1E9Oo22F9gA==" "resolved" "https://registry.npmjs.org/@babel/core/-/core-7.22.1.tgz" "version" "7.22.1" @@ -146,194 +147,185 @@ "@jridgewell/trace-mapping" "^0.3.17" "jsesc" "^2.5.1" -"@babel/helper-annotate-as-pure@^7.18.6": - "integrity" "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==" - "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz" - "version" "7.18.6" +"@babel/helper-annotate-as-pure@^7.18.6", "@babel/helper-annotate-as-pure@^7.22.5": + "integrity" "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==" + "resolved" "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz" + "version" "7.22.5" dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.18.6": - "integrity" "sha512-ahEoxgqNoYXm0k22TvOke48i1PkavGu0qGCmcq9ugi6gnmvKNaMjKBSrZTnWUi1CFEeNAUiVba0Wtzm03aSkJg==" - "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.3.tgz" - "version" "7.22.3" +"@babel/helper-builder-binary-assignment-operator-visitor@^7.22.15": + "integrity" "sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==" + "resolved" "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.15.tgz" + "version" "7.22.15" dependencies: - "@babel/types" "^7.22.3" + "@babel/types" "^7.22.15" -"@babel/helper-compilation-targets@^7.17.7", "@babel/helper-compilation-targets@^7.18.9", "@babel/helper-compilation-targets@^7.20.7", "@babel/helper-compilation-targets@^7.22.1": - "integrity" "sha512-Rqx13UM3yVB5q0D/KwQ8+SPfX/+Rnsy1Lw1k/UwOC4KC6qrzIQoY3lYnBu5EHKBlEHHcj0M0W8ltPSkD8rqfsQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.1.tgz" - "version" "7.22.1" +"@babel/helper-compilation-targets@^7.22.1", "@babel/helper-compilation-targets@^7.22.15", "@babel/helper-compilation-targets@^7.22.6": + "integrity" "sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==" + "resolved" "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.15.tgz" + "version" "7.22.15" dependencies: - "@babel/compat-data" "^7.22.0" - "@babel/helper-validator-option" "^7.21.0" - "browserslist" "^4.21.3" + "@babel/compat-data" "^7.22.9" + "@babel/helper-validator-option" "^7.22.15" + "browserslist" "^4.21.9" "lru-cache" "^5.1.1" - "semver" "^6.3.0" - -"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.1": - "integrity" "sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==" - "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.1.tgz" - "version" "7.22.1" - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.22.1" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-member-expression-to-functions" "^7.22.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-replace-supers" "^7.22.1" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/helper-split-export-declaration" "^7.18.6" - "semver" "^6.3.0" - -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.1": - "integrity" "sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w==" - "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.1.tgz" - "version" "7.22.1" - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" + "semver" "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.18.6", "@babel/helper-create-class-features-plugin@^7.21.0", "@babel/helper-create-class-features-plugin@^7.22.1", "@babel/helper-create-class-features-plugin@^7.22.15": + "integrity" "sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "semver" "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.22.15", "@babel/helper-create-regexp-features-plugin@^7.22.5": + "integrity" "sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==" + "resolved" "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.15.tgz" + "version" "7.22.15" + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" "regexpu-core" "^5.3.1" - "semver" "^6.3.0" + "semver" "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.4.0": - "integrity" "sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==" - "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.0.tgz" - "version" "0.4.0" +"@babel/helper-define-polyfill-provider@^0.4.3": + "integrity" "sha512-WBrLmuPP47n7PNwsZ57pqam6G/RGo1vw/87b0Blc53tZNGZ4x7YvZ6HgQe2vo1W/FR20OgjeZuGXzudPiXHFug==" + "resolved" "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.3.tgz" + "version" "0.4.3" dependencies: - "@babel/helper-compilation-targets" "^7.17.7" - "@babel/helper-plugin-utils" "^7.16.7" + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" "debug" "^4.1.1" "lodash.debounce" "^4.0.8" "resolve" "^1.14.2" - "semver" "^6.1.2" -"@babel/helper-environment-visitor@^7.18.9", "@babel/helper-environment-visitor@^7.22.1": - "integrity" "sha512-Z2tgopurB/kTbidvzeBrc2To3PUP/9i5MUe+fU6QJCQDyPwSH2oRapkLw3KGECDYSjhQZCNxEvNvZlLw8JjGwA==" - "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.1.tgz" - "version" "7.22.1" +"@babel/helper-environment-visitor@^7.22.1", "@babel/helper-environment-visitor@^7.22.20", "@babel/helper-environment-visitor@^7.22.5": + "integrity" "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==" + "resolved" "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz" + "version" "7.22.20" -"@babel/helper-function-name@^7.18.9", "@babel/helper-function-name@^7.19.0", "@babel/helper-function-name@^7.21.0": - "integrity" "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==" - "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz" - "version" "7.21.0" +"@babel/helper-function-name@^7.21.0", "@babel/helper-function-name@^7.22.5", "@babel/helper-function-name@^7.23.0": + "integrity" "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==" + "resolved" "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz" + "version" "7.23.0" dependencies: - "@babel/template" "^7.20.7" - "@babel/types" "^7.21.0" + "@babel/template" "^7.22.15" + "@babel/types" "^7.23.0" -"@babel/helper-hoist-variables@^7.18.6": - "integrity" "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==" - "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz" - "version" "7.18.6" +"@babel/helper-hoist-variables@^7.18.6", "@babel/helper-hoist-variables@^7.22.5": + "integrity" "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==" + "resolved" "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz" + "version" "7.22.5" dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-member-expression-to-functions@^7.22.0": - "integrity" "sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA==" - "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.3.tgz" - "version" "7.22.3" +"@babel/helper-member-expression-to-functions@^7.22.15": + "integrity" "sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==" + "resolved" "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.23.0.tgz" + "version" "7.23.0" dependencies: - "@babel/types" "^7.22.3" + "@babel/types" "^7.23.0" -"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.18.6", "@babel/helper-module-imports@^7.21.4": - "integrity" "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz" - "version" "7.21.4" +"@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4", "@babel/helper-module-imports@^7.21.4", "@babel/helper-module-imports@^7.22.15": + "integrity" "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz" + "version" "7.22.15" dependencies: - "@babel/types" "^7.21.4" + "@babel/types" "^7.22.15" -"@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.20.11", "@babel/helper-module-transforms@^7.21.5", "@babel/helper-module-transforms@^7.22.1": - "integrity" "sha512-dxAe9E7ySDGbQdCVOY/4+UcD8M9ZFqZcZhSPsPacvCG4M+9lwtDDQfI2EoaSvmf7W/8yCBkGU0m7Pvt1ru3UZw==" - "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.1.tgz" - "version" "7.22.1" +"@babel/helper-module-transforms@^7.22.1", "@babel/helper-module-transforms@^7.23.3": + "integrity" "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==" + "resolved" "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-environment-visitor" "^7.22.1" - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-simple-access" "^7.21.5" - "@babel/helper-split-export-declaration" "^7.18.6" - "@babel/helper-validator-identifier" "^7.19.1" - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-simple-access" "^7.22.5" + "@babel/helper-split-export-declaration" "^7.22.6" + "@babel/helper-validator-identifier" "^7.22.20" -"@babel/helper-optimise-call-expression@^7.18.6": - "integrity" "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==" - "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz" - "version" "7.18.6" +"@babel/helper-optimise-call-expression@^7.22.5": + "integrity" "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==" + "resolved" "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz" + "version" "7.22.5" dependencies: - "@babel/types" "^7.18.6" + "@babel/types" "^7.22.5" -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.16.7", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.18.9", "@babel/helper-plugin-utils@^7.19.0", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - "integrity" "sha512-0WDaIlXKOX/3KfBK/dwP1oQGiPh6rjMkT7HIRv7i5RR2VUMwrx5ZL0dwBkKx7+SW1zwNdgjHd34IMk5ZjTeHVg==" - "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.21.5.tgz" - "version" "7.21.5" +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.20.2", "@babel/helper-plugin-utils@^7.21.5", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": + "integrity" "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==" + "resolved" "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz" + "version" "7.22.5" -"@babel/helper-remap-async-to-generator@^7.18.9": - "integrity" "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==" - "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz" - "version" "7.18.9" +"@babel/helper-remap-async-to-generator@^7.22.20": + "integrity" "sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==" + "resolved" "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.20.tgz" + "version" "7.22.20" dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-wrap-function" "^7.18.9" - "@babel/types" "^7.18.9" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-wrap-function" "^7.22.20" -"@babel/helper-replace-supers@^7.18.6", "@babel/helper-replace-supers@^7.20.7", "@babel/helper-replace-supers@^7.22.1": - "integrity" "sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.1.tgz" - "version" "7.22.1" +"@babel/helper-replace-supers@^7.22.1", "@babel/helper-replace-supers@^7.22.20", "@babel/helper-replace-supers@^7.22.9": + "integrity" "sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==" + "resolved" "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.20.tgz" + "version" "7.22.20" dependencies: - "@babel/helper-environment-visitor" "^7.22.1" - "@babel/helper-member-expression-to-functions" "^7.22.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/template" "^7.21.9" - "@babel/traverse" "^7.22.1" - "@babel/types" "^7.22.0" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-member-expression-to-functions" "^7.22.15" + "@babel/helper-optimise-call-expression" "^7.22.5" -"@babel/helper-simple-access@^7.21.5": - "integrity" "sha512-ENPDAMC1wAjR0uaCUwliBdiSl1KBJAVnMTzXqi64c2MG8MPR6ii4qf7bSXDqSFbr4W6W028/rf5ivoHop5/mkg==" - "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.21.5.tgz" - "version" "7.21.5" +"@babel/helper-simple-access@^7.22.5": + "integrity" "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==" + "resolved" "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz" + "version" "7.22.5" dependencies: - "@babel/types" "^7.21.5" + "@babel/types" "^7.22.5" -"@babel/helper-skip-transparent-expression-wrappers@^7.20.0": - "integrity" "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==" - "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz" - "version" "7.20.0" +"@babel/helper-skip-transparent-expression-wrappers@^7.20.0", "@babel/helper-skip-transparent-expression-wrappers@^7.22.5": + "integrity" "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==" + "resolved" "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz" + "version" "7.22.5" dependencies: - "@babel/types" "^7.20.0" + "@babel/types" "^7.22.5" -"@babel/helper-split-export-declaration@^7.18.6": - "integrity" "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==" - "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz" - "version" "7.18.6" +"@babel/helper-split-export-declaration@^7.18.6", "@babel/helper-split-export-declaration@^7.22.6": + "integrity" "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==" + "resolved" "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz" + "version" "7.22.6" dependencies: - "@babel/types" "^7.18.6" - -"@babel/helper-string-parser@^7.21.5": - "integrity" "sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==" - "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.21.5.tgz" - "version" "7.21.5" + "@babel/types" "^7.22.5" -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": - "integrity" "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz" - "version" "7.19.1" +"@babel/helper-string-parser@^7.22.5": + "integrity" "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==" + "resolved" "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz" + "version" "7.22.5" + +"@babel/helper-validator-identifier@^7.22.20": + "integrity" "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz" + "version" "7.22.20" -"@babel/helper-validator-option@^7.21.0": - "integrity" "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==" - "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz" - "version" "7.21.0" +"@babel/helper-validator-option@^7.21.0", "@babel/helper-validator-option@^7.22.15": + "integrity" "sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==" + "resolved" "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.15.tgz" + "version" "7.22.15" -"@babel/helper-wrap-function@^7.18.9": - "integrity" "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==" - "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz" - "version" "7.20.5" +"@babel/helper-wrap-function@^7.22.20": + "integrity" "sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==" + "resolved" "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.20.tgz" + "version" "7.22.20" dependencies: - "@babel/helper-function-name" "^7.19.0" - "@babel/template" "^7.18.10" - "@babel/traverse" "^7.20.5" - "@babel/types" "^7.20.5" + "@babel/helper-function-name" "^7.22.5" + "@babel/template" "^7.22.15" + "@babel/types" "^7.22.19" "@babel/helpers@^7.22.0": "integrity" "sha512-jBJ7jWblbgr7r6wYZHMdIqKc73ycaTcCaWRq4/2LpuPHcx7xMlZvpGQkOYc9HeSjn6rcx15CPlgVcBtZ4WZJ2w==" @@ -344,35 +336,43 @@ "@babel/traverse" "^7.22.1" "@babel/types" "^7.22.3" -"@babel/highlight@^7.18.6": - "integrity" "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==" - "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz" - "version" "7.18.6" +"@babel/highlight@^7.22.13": + "integrity" "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==" + "resolved" "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz" + "version" "7.22.20" dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - "chalk" "^2.0.0" + "@babel/helper-validator-identifier" "^7.22.20" + "chalk" "^2.4.2" "js-tokens" "^4.0.0" -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.21.9", "@babel/parser@^7.22.0", "@babel/parser@^7.22.4": - "integrity" "sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==" - "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.22.4.tgz" - "version" "7.22.4" +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.22.0", "@babel/parser@^7.22.15", "@babel/parser@^7.22.4": + "integrity" "sha512-uVsWNvlVsIninV2prNz/3lHCb+5CJ+e+IUBfbjToAHODtfGYLfCFuY4AU7TskI+dAKk+njsPiBjq1gKTvZOBaw==" + "resolved" "https://registry.npmjs.org/@babel/parser/-/parser-7.23.3.tgz" + "version" "7.23.3" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.18.6": - "integrity" "sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.23.3": + "integrity" "sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.22.3": - "integrity" "sha512-6r4yRwEnorYByILoDRnEqxtojYKuiIv9FojW2E8GUKo9eWBwbKcd9IiZOZpdyXc64RmyGGyPu3/uAcrz/dq2kQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.23.3": + "integrity" "sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" - "@babel/plugin-transform-optional-chaining" "^7.22.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.23.3": + "integrity" "sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-proposal-class-properties@^7.16.0": "integrity" "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==" @@ -426,7 +426,7 @@ "@babel/helper-create-class-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-proposal-private-property-in-object@^7.21.0": +"@babel/plugin-proposal-private-property-in-object@^7.21.11": "integrity" "sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==" "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.11.tgz" "version" "7.21.11" @@ -436,13 +436,10 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-proposal-unicode-property-regex@^7.4.4": - "integrity" "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==" - "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz" - "version" "7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + "integrity" "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz" + "version" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators@^7.8.4": "integrity" "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==" @@ -500,19 +497,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.20.2" -"@babel/plugin-syntax-import-assertions@^7.20.0": - "integrity" "sha512-IUh1vakzNoWalR8ch/areW7qFopR2AEw03JlG7BbrDqmQ4X3q9uuipQwSGrUn7oGiemKjtSLDhNtQHzMHr1JdQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.20.0.tgz" - "version" "7.20.0" +"@babel/plugin-syntax-import-assertions@^7.23.3": + "integrity" "sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.19.0" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-syntax-import-attributes@^7.22.3": - "integrity" "sha512-i35jZJv6aO7hxEbIWQ41adVfOzjm9dcYDNeWlBMd8p0ZQRtNUCBrmGwZt+H5lb+oOC9a3svp956KP0oWGA1YsA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-syntax-import-attributes@^7.23.3": + "integrity" "sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": "integrity" "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==" @@ -528,12 +525,12 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.21.4": - "integrity" "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz" - "version" "7.21.4" +"@babel/plugin-syntax-jsx@^7.21.4", "@babel/plugin-syntax-jsx@^7.22.5", "@babel/plugin-syntax-jsx@^7.7.2": + "integrity" "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": "integrity" "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==" @@ -606,130 +603,130 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.21.5": - "integrity" "sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.21.5.tgz" - "version" "7.21.5" +"@babel/plugin-transform-arrow-functions@^7.23.3": + "integrity" "sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-async-generator-functions@^7.22.3": - "integrity" "sha512-36A4Aq48t66btydbZd5Fk0/xJqbpg/v4QWI4AH4cYHBXy9Mu42UOupZpebKFiCFNT9S9rJFcsld0gsv0ayLjtA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-async-generator-functions@^7.23.3": + "integrity" "sha512-59GsVNavGxAXCDDbakWSMJhajASb4kBCqDjqJsv+p5nKdbz7istmZ3HrX3L2LuiI80+zsOADCvooqQH3qGCucQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-environment-visitor" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" "@babel/plugin-syntax-async-generators" "^7.8.4" -"@babel/plugin-transform-async-to-generator@^7.20.7": - "integrity" "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz" - "version" "7.20.7" +"@babel/plugin-transform-async-to-generator@^7.23.3": + "integrity" "sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-module-imports" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-remap-async-to-generator" "^7.18.9" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-remap-async-to-generator" "^7.22.20" -"@babel/plugin-transform-block-scoped-functions@^7.18.6": - "integrity" "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-block-scoped-functions@^7.23.3": + "integrity" "sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-block-scoping@^7.21.0": - "integrity" "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz" - "version" "7.21.0" +"@babel/plugin-transform-block-scoping@^7.23.3": + "integrity" "sha512-QPZxHrThbQia7UdvfpaRRlq/J9ciz1J4go0k+lPBXbgaNeY7IQrBj/9ceWjvMMI07/ZBzHl/F0R/2K0qH7jCVw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-properties@^7.22.3": - "integrity" "sha512-mASLsd6rhOrLZ5F3WbCxkzl67mmOnqik0zrg5W6D/X0QMW7HtvnoL1dRARLKIbMP3vXwkwziuLesPqWVGIl6Bw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-class-properties@^7.23.3": + "integrity" "sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-class-static-block@^7.22.3": - "integrity" "sha512-5BirgNWNOx7cwbTJCOmKFJ1pZjwk5MUfMIwiBBvsirCJMZeQgs5pk6i1OlkVg+1Vef5LfBahFOrdCnAWvkVKMw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-class-static-block@^7.23.3": + "integrity" "sha512-PENDVxdr7ZxKPyi5Ffc0LjXdnJyrJxyqF5T5YjlVg4a0VFfQHW0r8iAtRiDXkfHlu1wwcvdtnndGYIeJLSuRMQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-class-static-block" "^7.14.5" -"@babel/plugin-transform-classes@^7.21.0": - "integrity" "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz" - "version" "7.21.0" - dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-compilation-targets" "^7.20.7" - "@babel/helper-environment-visitor" "^7.18.9" - "@babel/helper-function-name" "^7.21.0" - "@babel/helper-optimise-call-expression" "^7.18.6" - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-replace-supers" "^7.20.7" - "@babel/helper-split-export-declaration" "^7.18.6" +"@babel/plugin-transform-classes@^7.23.3": + "integrity" "sha512-FGEQmugvAEu2QtgtU0uTASXevfLMFfBeVCIIdcQhn/uBQsMTjBajdnAtanQlOcuihWh10PZ7+HWvc7NtBwP74w==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-environment-visitor" "^7.22.20" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-optimise-call-expression" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" + "@babel/helper-split-export-declaration" "^7.22.6" "globals" "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.21.5": - "integrity" "sha512-TR653Ki3pAwxBxUe8srfF3e4Pe3FTA46uaNHYyQwIoM4oWKSoOZiDNyHJ0oIoDIUPSRQbQG7jzgVBX3FPVne1Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.21.5.tgz" - "version" "7.21.5" +"@babel/plugin-transform-computed-properties@^7.23.3": + "integrity" "sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/template" "^7.20.7" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/template" "^7.22.15" -"@babel/plugin-transform-destructuring@^7.21.3": - "integrity" "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz" - "version" "7.21.3" +"@babel/plugin-transform-destructuring@^7.23.3": + "integrity" "sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dotall-regex@^7.18.6", "@babel/plugin-transform-dotall-regex@^7.4.4": - "integrity" "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-dotall-regex@^7.23.3": + "integrity" "sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-duplicate-keys@^7.18.9": - "integrity" "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz" - "version" "7.18.9" +"@babel/plugin-transform-duplicate-keys@^7.23.3": + "integrity" "sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-dynamic-import@^7.22.1": - "integrity" "sha512-rlhWtONnVBPdmt+jeewS0qSnMz/3yLFrqAP8hHC6EDcrYRSyuz9f9yQhHvVn2Ad6+yO9fHXac5piudeYrInxwQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.1.tgz" - "version" "7.22.1" +"@babel/plugin-transform-dynamic-import@^7.23.3": + "integrity" "sha512-vTG+cTGxPFou12Rj7ll+eD5yWeNl5/8xvQvF08y5Gv3v4mZQoyFf8/n9zg4q5vvCWt5jmgymfzMAldO7orBn7A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" -"@babel/plugin-transform-exponentiation-operator@^7.18.6": - "integrity" "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-exponentiation-operator@^7.23.3": + "integrity" "sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-export-namespace-from@^7.22.3": - "integrity" "sha512-5Ti1cHLTDnt3vX61P9KZ5IG09bFXp4cDVFJIAeCZuxu9OXXJJZp5iP0n/rzM2+iAutJY+KWEyyHcRaHlpQ/P5g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-export-namespace-from@^7.23.3": + "integrity" "sha512-yCLhW34wpJWRdTxxWtFZASJisihrfyMOTOQexhVzA78jlU+dH7Dw+zQgcPepQ5F3C6bAIiblZZ+qBggJdHiBAg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" "@babel/plugin-transform-flow-strip-types@^7.16.0": @@ -740,185 +737,185 @@ "@babel/helper-plugin-utils" "^7.20.2" "@babel/plugin-syntax-flow" "^7.18.6" -"@babel/plugin-transform-for-of@^7.21.5": - "integrity" "sha512-nYWpjKW/7j/I/mZkGVgHJXh4bA1sfdFnJoOXwJuj4m3Q2EraO/8ZyrkCau9P5tbHQk01RMSt6KYLCsW7730SXQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.5.tgz" - "version" "7.21.5" +"@babel/plugin-transform-for-of@^7.23.3": + "integrity" "sha512-X8jSm8X1CMwxmK878qsUGJRmbysKNbdpTv/O1/v0LuY/ZkZrng5WYiekYSdg9m09OTmDDUWeEDsTE+17WYbAZw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-function-name@^7.18.9": - "integrity" "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz" - "version" "7.18.9" +"@babel/plugin-transform-function-name@^7.23.3": + "integrity" "sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-compilation-targets" "^7.18.9" - "@babel/helper-function-name" "^7.18.9" - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-function-name" "^7.23.0" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-json-strings@^7.22.3": - "integrity" "sha512-IuvOMdeOOY2X4hRNAT6kwbePtK21BUyrAEgLKviL8pL6AEEVUVcqtRdN/HJXBLGIbt9T3ETmXRnFedRRmQNTYw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-json-strings@^7.23.3": + "integrity" "sha512-H9Ej2OiISIZowZHaBwF0tsJOih1PftXJtE8EWqlEIwpc7LMTGq0rPOrywKLQ4nefzx8/HMR0D3JGXoMHYvhi0A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-json-strings" "^7.8.3" -"@babel/plugin-transform-literals@^7.18.9": - "integrity" "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz" - "version" "7.18.9" +"@babel/plugin-transform-literals@^7.23.3": + "integrity" "sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-logical-assignment-operators@^7.22.3": - "integrity" "sha512-CbayIfOw4av2v/HYZEsH+Klks3NC2/MFIR3QR8gnpGNNPEaq2fdlVCRYG/paKs7/5hvBLQ+H70pGWOHtlNEWNA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-logical-assignment-operators@^7.23.3": + "integrity" "sha512-+pD5ZbxofyOygEp+zZAfujY2ShNCXRpDRIPOiBmTO693hhyOEteZgl876Xs9SAHPQpcV0vz8LvA/T+w8AzyX8A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" -"@babel/plugin-transform-member-expression-literals@^7.18.6": - "integrity" "sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-member-expression-literals@^7.23.3": + "integrity" "sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-amd@^7.20.11": - "integrity" "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz" - "version" "7.20.11" +"@babel/plugin-transform-modules-amd@^7.23.3": + "integrity" "sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-module-transforms" "^7.20.11" - "@babel/helper-plugin-utils" "^7.20.2" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-modules-commonjs@^7.21.5": - "integrity" "sha512-OVryBEgKUbtqMoB7eG2rs6UFexJi6Zj6FDXx+esBLPTCxCNxAY9o+8Di7IsUGJ+AVhp5ncK0fxWUBd0/1gPhrQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.5.tgz" - "version" "7.21.5" +"@babel/plugin-transform-modules-commonjs@^7.21.5", "@babel/plugin-transform-modules-commonjs@^7.23.3": + "integrity" "sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-module-transforms" "^7.21.5" - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-simple-access" "^7.21.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-simple-access" "^7.22.5" -"@babel/plugin-transform-modules-systemjs@^7.22.3": - "integrity" "sha512-V21W3bKLxO3ZjcBJZ8biSvo5gQ85uIXW2vJfh7JSWf/4SLUSr1tOoHX3ruN4+Oqa2m+BKfsxTR1I+PsvkIWvNw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-modules-systemjs@^7.23.3": + "integrity" "sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-hoist-variables" "^7.18.6" - "@babel/helper-module-transforms" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-hoist-variables" "^7.22.5" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" -"@babel/plugin-transform-modules-umd@^7.18.6": - "integrity" "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-modules-umd@^7.23.3": + "integrity" "sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-module-transforms" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-module-transforms" "^7.23.3" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-named-capturing-groups-regex@^7.22.3": - "integrity" "sha512-c6HrD/LpUdNNJsISQZpds3TXvfYIAbo+efE9aWmY/PmSRD0agrJ9cPMt4BmArwUQ7ZymEWTFjTyp+yReLJZh0Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-named-capturing-groups-regex@^7.22.5": + "integrity" "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz" + "version" "7.22.5" dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-create-regexp-features-plugin" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-new-target@^7.22.3": - "integrity" "sha512-5RuJdSo89wKdkRTqtM9RVVJzHum9c2s0te9rB7vZC1zKKxcioWIy+xcu4OoIAjyFZhb/bp5KkunuLin1q7Ct+w==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-new-target@^7.23.3": + "integrity" "sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-nullish-coalescing-operator@^7.22.3": - "integrity" "sha512-CpaoNp16nX7ROtLONNuCyenYdY/l7ZsR6aoVa7rW7nMWisoNoQNIH5Iay/4LDyRjKMuElMqXiBoOQCDLTMGZiw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-nullish-coalescing-operator@^7.23.3": + "integrity" "sha512-xzg24Lnld4DYIdysyf07zJ1P+iIfJpxtVFOzX4g+bsJ3Ng5Le7rXx9KwqKzuyaUeRnt+I1EICwQITqc0E2PmpA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" -"@babel/plugin-transform-numeric-separator@^7.22.3": - "integrity" "sha512-+AF88fPDJrnseMh5vD9+SH6wq4ZMvpiTMHh58uLs+giMEyASFVhcT3NkoyO+NebFCNnpHJEq5AXO2txV4AGPDQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-numeric-separator@^7.23.3": + "integrity" "sha512-s9GO7fIBi/BLsZ0v3Rftr6Oe4t0ctJ8h4CCXfPoEJwmvAPMyNrfkOOJzm6b9PX9YXcCJWWQd/sBF/N26eBiMVw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-transform-object-rest-spread@^7.22.3": - "integrity" "sha512-38bzTsqMMCI46/TQnJwPPpy33EjLCc1Gsm2hRTF6zTMWnKsN61vdrpuzIEGQyKEhDSYDKyZHrrd5FMj4gcUHhw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-object-rest-spread@^7.23.3": + "integrity" "sha512-VxHt0ANkDmu8TANdE9Kc0rndo/ccsmfe2Cx2y5sI4hu3AukHQ5wAu4cM7j3ba8B9548ijVyclBU+nuDQftZsog==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/compat-data" "^7.22.3" - "@babel/helper-compilation-targets" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/compat-data" "^7.23.3" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.22.3" + "@babel/plugin-transform-parameters" "^7.23.3" -"@babel/plugin-transform-object-super@^7.18.6": - "integrity" "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-object-super@^7.23.3": + "integrity" "sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.6" - "@babel/helper-replace-supers" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-replace-supers" "^7.22.20" -"@babel/plugin-transform-optional-catch-binding@^7.22.3": - "integrity" "sha512-bnDFWXFzWY0BsOyqaoSXvMQ2F35zutQipugog/rqotL2S4ciFOKlRYUu9djt4iq09oh2/34hqfRR2k1dIvuu4g==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-optional-catch-binding@^7.23.3": + "integrity" "sha512-LxYSb0iLjUamfm7f1D7GpiS4j0UAC8AOiehnsGAP8BEsIX8EOi3qV6bbctw8M7ZvLtcoZfZX5Z7rN9PlWk0m5A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" -"@babel/plugin-transform-optional-chaining@^7.22.3": - "integrity" "sha512-63v3/UFFxhPKT8j8u1jTTGVyITxl7/7AfOqK8C5gz1rHURPUGe3y5mvIf68eYKGoBNahtJnTxBKug4BQOnzeJg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-optional-chaining@^7.23.3": + "integrity" "sha512-zvL8vIfIUgMccIAK1lxjvNv572JHFJIKb4MWBz5OGdBQA0fB0Xluix5rmOby48exiJc987neOmP/m9Fnpkz3Tg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" "@babel/plugin-syntax-optional-chaining" "^7.8.3" -"@babel/plugin-transform-parameters@^7.22.3": - "integrity" "sha512-x7QHQJHPuD9VmfpzboyGJ5aHEr9r7DsAsdxdhJiTB3J3j8dyl+NFZ+rX5Q2RWFDCs61c06qBfS4ys2QYn8UkMw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-parameters@^7.23.3": + "integrity" "sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-methods@^7.22.3": - "integrity" "sha512-fC7jtjBPFqhqpPAE+O4LKwnLq7gGkD3ZmC2E3i4qWH34mH3gOg2Xrq5YMHUq6DM30xhqM1DNftiRaSqVjEG+ug==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-private-methods@^7.23.3": + "integrity" "sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-create-class-features-plugin" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-private-property-in-object@^7.22.3": - "integrity" "sha512-C7MMl4qWLpgVCbXfj3UW8rR1xeCnisQ0cU7YJHV//8oNBS0aCIVg1vFnZXxOckHhEpQyqNNkWmvSEWnMLlc+Vw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-private-property-in-object@^7.23.3": + "integrity" "sha512-a5m2oLNFyje2e/rGKjVfAELTVI5mbA0FeZpBnkOWWV7eSmKQ+T/XW0Vf+29ScLzSxX+rnsarvU0oie/4m6hkxA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-create-class-features-plugin" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-create-class-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-syntax-private-property-in-object" "^7.14.5" -"@babel/plugin-transform-property-literals@^7.18.6": - "integrity" "sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-property-literals@^7.23.3": + "integrity" "sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-react-constant-elements@^7.12.1", "@babel/plugin-transform-react-constant-elements@^7.18.12": "integrity" "sha512-b5J6muxQYp4H7loAQv/c7GO5cPuRA6H5hx4gO+/Hn+Cu9MRQU0PNiUoWq1L//8sq6kFSNxGXFb2XTaUfa9y+Pg==" @@ -927,53 +924,53 @@ dependencies: "@babel/helper-plugin-utils" "^7.21.5" -"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.18.6": - "integrity" "sha512-TV4sQ+T013n61uMoygyMRm+xf04Bd5oqFpv2jAEQwSZ8NwQA7zeRPg1LMVg2PWi3zWBz+CLKD+v5bcpZ/BS0aA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-react-display-name@^7.16.0", "@babel/plugin-transform-react-display-name@^7.23.3": + "integrity" "sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-react-jsx-development@^7.18.6": - "integrity" "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-react-jsx-development@^7.22.5": + "integrity" "sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.22.5.tgz" + "version" "7.22.5" dependencies: - "@babel/plugin-transform-react-jsx" "^7.18.6" + "@babel/plugin-transform-react-jsx" "^7.22.5" -"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.18.6", "@babel/plugin-transform-react-jsx@^7.22.3": - "integrity" "sha512-JEulRWG2f04a7L8VWaOngWiK6p+JOSpB+DAtwfJgOaej1qdbNxqtK7MwTBHjUA10NeFcszlFNqCdbRcirzh2uQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.3.tgz" - "version" "7.22.3" +"@babel/plugin-transform-react-jsx@^7.14.9", "@babel/plugin-transform-react-jsx@^7.22.15", "@babel/plugin-transform-react-jsx@^7.22.5": + "integrity" "sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.22.15.tgz" + "version" "7.22.15" dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-module-imports" "^7.21.4" - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/plugin-syntax-jsx" "^7.21.4" - "@babel/types" "^7.22.3" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-module-imports" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/plugin-syntax-jsx" "^7.22.5" + "@babel/types" "^7.22.15" -"@babel/plugin-transform-react-pure-annotations@^7.18.6": - "integrity" "sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-react-pure-annotations@^7.23.3": + "integrity" "sha512-qMFdSS+TUhB7Q/3HVPnEdYJDQIk57jkntAwSuz9xfSE4n+3I+vHYCli3HoHawN1Z3RfCz/y1zXA/JXjG6cVImQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-annotate-as-pure" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-annotate-as-pure" "^7.22.5" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-regenerator@^7.21.5": - "integrity" "sha512-ZoYBKDb6LyMi5yCsByQ5jmXsHAQDDYeexT1Szvlmui+lADvfSecr5Dxd/PkrTC3pAD182Fcju1VQkB4oCp9M+w==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.21.5.tgz" - "version" "7.21.5" +"@babel/plugin-transform-regenerator@^7.23.3": + "integrity" "sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - "regenerator-transform" "^0.15.1" + "@babel/helper-plugin-utils" "^7.22.5" + "regenerator-transform" "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.18.6": - "integrity" "sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-reserved-words@^7.23.3": + "integrity" "sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-runtime@^7.16.4": "integrity" "sha512-Urkiz1m4zqiRo17klj+l3nXgiRTFQng91Bc1eiLF7BMQu1e7wE5Gcq9xSv062IF068NHjcutSbIMev60gXxAvA==" @@ -987,41 +984,41 @@ "babel-plugin-polyfill-regenerator" "^0.5.0" "semver" "^6.3.0" -"@babel/plugin-transform-shorthand-properties@^7.18.6": - "integrity" "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-shorthand-properties@^7.23.3": + "integrity" "sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-spread@^7.20.7": - "integrity" "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz" - "version" "7.20.7" +"@babel/plugin-transform-spread@^7.23.3": + "integrity" "sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.20.2" - "@babel/helper-skip-transparent-expression-wrappers" "^7.20.0" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.22.5" -"@babel/plugin-transform-sticky-regex@^7.18.6": - "integrity" "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz" - "version" "7.18.6" +"@babel/plugin-transform-sticky-regex@^7.23.3": + "integrity" "sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-template-literals@^7.18.9": - "integrity" "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz" - "version" "7.18.9" +"@babel/plugin-transform-template-literals@^7.23.3": + "integrity" "sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" -"@babel/plugin-transform-typeof-symbol@^7.18.9": - "integrity" "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz" - "version" "7.18.9" +"@babel/plugin-transform-typeof-symbol@^7.23.3": + "integrity" "sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.18.9" + "@babel/helper-plugin-utils" "^7.22.5" "@babel/plugin-transform-typescript@^7.21.3": "integrity" "sha512-pyjnCIniO5PNaEuGxT28h0HbMru3qCVrMqVgVOz/krComdIrY9W6FCLBq9NWHY8HDGaUlan+UhmZElDENIfCcw==" @@ -1033,56 +1030,57 @@ "@babel/helper-plugin-utils" "^7.21.5" "@babel/plugin-syntax-typescript" "^7.21.4" -"@babel/plugin-transform-unicode-escapes@^7.21.5": - "integrity" "sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.21.5.tgz" - "version" "7.21.5" - dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - -"@babel/plugin-transform-unicode-property-regex@^7.22.3": - "integrity" "sha512-5ScJ+OmdX+O6HRuMGW4kv7RL9vIKdtdAj9wuWUKy1wbHY3jaM/UlyIiC1G7J6UJiiyMukjjK0QwL3P0vBd0yYg==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.3.tgz" - "version" "7.22.3" - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" - -"@babel/plugin-transform-unicode-regex@^7.18.6": - "integrity" "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz" - "version" "7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.18.6" - "@babel/helper-plugin-utils" "^7.18.6" - -"@babel/plugin-transform-unicode-sets-regex@^7.22.3": - "integrity" "sha512-hNufLdkF8vqywRp+P55j4FHXqAX2LRUccoZHH7AFn1pq5ZOO2ISKW9w13bFZVjBoTqeve2HOgoJCcaziJVhGNw==" - "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.3.tgz" - "version" "7.22.3" - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" - -"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.19.4": - "integrity" "sha512-c3lHOjbwBv0TkhYCr+XCR6wKcSZ1QbQTVdSkZUaVpLv8CVWotBMArWUi5UAJrcrQaEnleVkkvaV8F/pmc/STZQ==" - "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.4.tgz" - "version" "7.22.4" - dependencies: - "@babel/compat-data" "^7.22.3" - "@babel/helper-compilation-targets" "^7.22.1" - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.18.6" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.22.3" - "@babel/plugin-proposal-private-property-in-object" "^7.21.0" +"@babel/plugin-transform-unicode-escapes@^7.23.3": + "integrity" "sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-property-regex@^7.23.3": + "integrity" "sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-regex@^7.23.3": + "integrity" "sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/plugin-transform-unicode-sets-regex@^7.23.3": + "integrity" "sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==" + "resolved" "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + +"@babel/preset-env@^7.11.0", "@babel/preset-env@^7.12.1", "@babel/preset-env@^7.16.4", "@babel/preset-env@^7.19.4", "@babel/preset-env@^7.23.3": + "integrity" "sha512-ovzGc2uuyNfNAs/jyjIGxS8arOHS5FENZaNn4rtE7UdKMMkqHCvboHfcuhWLZNX5cB44QfcGNWjaevxMzzMf+Q==" + "resolved" "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.23.3.tgz" + "version" "7.23.3" + dependencies: + "@babel/compat-data" "^7.23.3" + "@babel/helper-compilation-targets" "^7.22.15" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.23.3" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.23.3" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.23.3" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-class-properties" "^7.12.13" "@babel/plugin-syntax-class-static-block" "^7.14.5" "@babel/plugin-syntax-dynamic-import" "^7.8.3" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.20.0" - "@babel/plugin-syntax-import-attributes" "^7.22.3" + "@babel/plugin-syntax-import-assertions" "^7.23.3" + "@babel/plugin-syntax-import-attributes" "^7.23.3" "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" @@ -1094,84 +1092,81 @@ "@babel/plugin-syntax-private-property-in-object" "^7.14.5" "@babel/plugin-syntax-top-level-await" "^7.14.5" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.21.5" - "@babel/plugin-transform-async-generator-functions" "^7.22.3" - "@babel/plugin-transform-async-to-generator" "^7.20.7" - "@babel/plugin-transform-block-scoped-functions" "^7.18.6" - "@babel/plugin-transform-block-scoping" "^7.21.0" - "@babel/plugin-transform-class-properties" "^7.22.3" - "@babel/plugin-transform-class-static-block" "^7.22.3" - "@babel/plugin-transform-classes" "^7.21.0" - "@babel/plugin-transform-computed-properties" "^7.21.5" - "@babel/plugin-transform-destructuring" "^7.21.3" - "@babel/plugin-transform-dotall-regex" "^7.18.6" - "@babel/plugin-transform-duplicate-keys" "^7.18.9" - "@babel/plugin-transform-dynamic-import" "^7.22.1" - "@babel/plugin-transform-exponentiation-operator" "^7.18.6" - "@babel/plugin-transform-export-namespace-from" "^7.22.3" - "@babel/plugin-transform-for-of" "^7.21.5" - "@babel/plugin-transform-function-name" "^7.18.9" - "@babel/plugin-transform-json-strings" "^7.22.3" - "@babel/plugin-transform-literals" "^7.18.9" - "@babel/plugin-transform-logical-assignment-operators" "^7.22.3" - "@babel/plugin-transform-member-expression-literals" "^7.18.6" - "@babel/plugin-transform-modules-amd" "^7.20.11" - "@babel/plugin-transform-modules-commonjs" "^7.21.5" - "@babel/plugin-transform-modules-systemjs" "^7.22.3" - "@babel/plugin-transform-modules-umd" "^7.18.6" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.3" - "@babel/plugin-transform-new-target" "^7.22.3" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.22.3" - "@babel/plugin-transform-numeric-separator" "^7.22.3" - "@babel/plugin-transform-object-rest-spread" "^7.22.3" - "@babel/plugin-transform-object-super" "^7.18.6" - "@babel/plugin-transform-optional-catch-binding" "^7.22.3" - "@babel/plugin-transform-optional-chaining" "^7.22.3" - "@babel/plugin-transform-parameters" "^7.22.3" - "@babel/plugin-transform-private-methods" "^7.22.3" - "@babel/plugin-transform-private-property-in-object" "^7.22.3" - "@babel/plugin-transform-property-literals" "^7.18.6" - "@babel/plugin-transform-regenerator" "^7.21.5" - "@babel/plugin-transform-reserved-words" "^7.18.6" - "@babel/plugin-transform-shorthand-properties" "^7.18.6" - "@babel/plugin-transform-spread" "^7.20.7" - "@babel/plugin-transform-sticky-regex" "^7.18.6" - "@babel/plugin-transform-template-literals" "^7.18.9" - "@babel/plugin-transform-typeof-symbol" "^7.18.9" - "@babel/plugin-transform-unicode-escapes" "^7.21.5" - "@babel/plugin-transform-unicode-property-regex" "^7.22.3" - "@babel/plugin-transform-unicode-regex" "^7.18.6" - "@babel/plugin-transform-unicode-sets-regex" "^7.22.3" - "@babel/preset-modules" "^0.1.5" - "@babel/types" "^7.22.4" - "babel-plugin-polyfill-corejs2" "^0.4.3" - "babel-plugin-polyfill-corejs3" "^0.8.1" - "babel-plugin-polyfill-regenerator" "^0.5.0" - "core-js-compat" "^3.30.2" - "semver" "^6.3.0" - -"@babel/preset-modules@^0.1.5": - "integrity" "sha512-A57th6YRG7oR3cq/yt/Y84MvGgE0eJG2F1JLhKuyG+jFxEgrd/HAMJatiFtmOiZurz+0DkrvbheCLaV5f2JfjA==" - "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.5.tgz" - "version" "0.1.5" + "@babel/plugin-transform-arrow-functions" "^7.23.3" + "@babel/plugin-transform-async-generator-functions" "^7.23.3" + "@babel/plugin-transform-async-to-generator" "^7.23.3" + "@babel/plugin-transform-block-scoped-functions" "^7.23.3" + "@babel/plugin-transform-block-scoping" "^7.23.3" + "@babel/plugin-transform-class-properties" "^7.23.3" + "@babel/plugin-transform-class-static-block" "^7.23.3" + "@babel/plugin-transform-classes" "^7.23.3" + "@babel/plugin-transform-computed-properties" "^7.23.3" + "@babel/plugin-transform-destructuring" "^7.23.3" + "@babel/plugin-transform-dotall-regex" "^7.23.3" + "@babel/plugin-transform-duplicate-keys" "^7.23.3" + "@babel/plugin-transform-dynamic-import" "^7.23.3" + "@babel/plugin-transform-exponentiation-operator" "^7.23.3" + "@babel/plugin-transform-export-namespace-from" "^7.23.3" + "@babel/plugin-transform-for-of" "^7.23.3" + "@babel/plugin-transform-function-name" "^7.23.3" + "@babel/plugin-transform-json-strings" "^7.23.3" + "@babel/plugin-transform-literals" "^7.23.3" + "@babel/plugin-transform-logical-assignment-operators" "^7.23.3" + "@babel/plugin-transform-member-expression-literals" "^7.23.3" + "@babel/plugin-transform-modules-amd" "^7.23.3" + "@babel/plugin-transform-modules-commonjs" "^7.23.3" + "@babel/plugin-transform-modules-systemjs" "^7.23.3" + "@babel/plugin-transform-modules-umd" "^7.23.3" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.22.5" + "@babel/plugin-transform-new-target" "^7.23.3" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.23.3" + "@babel/plugin-transform-numeric-separator" "^7.23.3" + "@babel/plugin-transform-object-rest-spread" "^7.23.3" + "@babel/plugin-transform-object-super" "^7.23.3" + "@babel/plugin-transform-optional-catch-binding" "^7.23.3" + "@babel/plugin-transform-optional-chaining" "^7.23.3" + "@babel/plugin-transform-parameters" "^7.23.3" + "@babel/plugin-transform-private-methods" "^7.23.3" + "@babel/plugin-transform-private-property-in-object" "^7.23.3" + "@babel/plugin-transform-property-literals" "^7.23.3" + "@babel/plugin-transform-regenerator" "^7.23.3" + "@babel/plugin-transform-reserved-words" "^7.23.3" + "@babel/plugin-transform-shorthand-properties" "^7.23.3" + "@babel/plugin-transform-spread" "^7.23.3" + "@babel/plugin-transform-sticky-regex" "^7.23.3" + "@babel/plugin-transform-template-literals" "^7.23.3" + "@babel/plugin-transform-typeof-symbol" "^7.23.3" + "@babel/plugin-transform-unicode-escapes" "^7.23.3" + "@babel/plugin-transform-unicode-property-regex" "^7.23.3" + "@babel/plugin-transform-unicode-regex" "^7.23.3" + "@babel/plugin-transform-unicode-sets-regex" "^7.23.3" + "@babel/preset-modules" "0.1.6-no-external-plugins" + "babel-plugin-polyfill-corejs2" "^0.4.6" + "babel-plugin-polyfill-corejs3" "^0.8.5" + "babel-plugin-polyfill-regenerator" "^0.5.3" + "core-js-compat" "^3.31.0" + "semver" "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + "integrity" "sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==" + "resolved" "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz" + "version" "0.1.6-no-external-plugins" dependencies: "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" "@babel/types" "^7.4.4" "esutils" "^2.0.2" -"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0", "@babel/preset-react@^7.18.6": - "integrity" "sha512-lxDz1mnZ9polqClBCVBjIVUypoB4qV3/tZUDb/IlYbW1kiiLaXaX+bInbRjl+lNQ/iUZraQ3+S8daEmoELMWug==" - "resolved" "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.22.3.tgz" - "version" "7.22.3" +"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.16.0", "@babel/preset-react@^7.18.6", "@babel/preset-react@^7.23.3": + "integrity" "sha512-tbkHOS9axH6Ysf2OUEqoSZ6T3Fa2SrNH6WTWSPBboxKzdxNc9qOICeLXkNG0ZEwbQ1HY8liwOce4aN/Ceyuq6w==" + "resolved" "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-plugin-utils" "^7.21.5" - "@babel/helper-validator-option" "^7.21.0" - "@babel/plugin-transform-react-display-name" "^7.18.6" - "@babel/plugin-transform-react-jsx" "^7.22.3" - "@babel/plugin-transform-react-jsx-development" "^7.18.6" - "@babel/plugin-transform-react-pure-annotations" "^7.18.6" + "@babel/helper-plugin-utils" "^7.22.5" + "@babel/helper-validator-option" "^7.22.15" + "@babel/plugin-transform-react-display-name" "^7.23.3" + "@babel/plugin-transform-react-jsx" "^7.22.15" + "@babel/plugin-transform-react-jsx-development" "^7.22.5" + "@babel/plugin-transform-react-pure-annotations" "^7.23.3" "@babel/preset-typescript@^7.16.0", "@babel/preset-typescript@^7.18.6": "integrity" "sha512-iqe3sETat5EOrORXiQ6rWfoOg2y68Cs75B9wNxdPW4kixJxh7aXQE1KPdWLDniC24T/6dSnguF33W9j/ZZQcmA==" @@ -1196,16 +1191,16 @@ dependencies: "regenerator-runtime" "^0.13.11" -"@babel/template@^7.18.10", "@babel/template@^7.20.7", "@babel/template@^7.21.9", "@babel/template@^7.3.3": - "integrity" "sha512-MK0X5k8NKOuWRamiEfc3KEJiHMTkGZNUjzMipqCGDDc6ijRl/B7RGSKVGncu4Ro/HdyzzY6cmoXuKI2Gffk7vQ==" - "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.21.9.tgz" - "version" "7.21.9" +"@babel/template@^7.21.9", "@babel/template@^7.22.15", "@babel/template@^7.3.3": + "integrity" "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==" + "resolved" "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz" + "version" "7.22.15" dependencies: - "@babel/code-frame" "^7.21.4" - "@babel/parser" "^7.21.9" - "@babel/types" "^7.21.5" + "@babel/code-frame" "^7.22.13" + "@babel/parser" "^7.22.15" + "@babel/types" "^7.22.15" -"@babel/traverse@^7.20.5", "@babel/traverse@^7.22.1", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": +"@babel/traverse@^7.22.1", "@babel/traverse@^7.4.5", "@babel/traverse@^7.7.2": "integrity" "sha512-Tn1pDsjIcI+JcLKq1AVlZEr4226gpuAQTsLMorsYg9tuS/kG7nuwwJ4AB8jfQuEgb/COBwR/DqJxmoiYFu5/rQ==" "resolved" "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.4.tgz" "version" "7.22.4" @@ -1221,13 +1216,13 @@ "debug" "^4.1.0" "globals" "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.18.6", "@babel/types@^7.18.9", "@babel/types@^7.20.0", "@babel/types@^7.20.5", "@babel/types@^7.20.7", "@babel/types@^7.21.0", "@babel/types@^7.21.4", "@babel/types@^7.21.5", "@babel/types@^7.22.0", "@babel/types@^7.22.3", "@babel/types@^7.22.4", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - "integrity" "sha512-Tx9x3UBHTTsMSW85WB2kphxYQVvrZ/t1FxD88IpSgIjiUJlCm9z+xWIDwyo1vffTwSqteqyznB8ZE9vYYk16zA==" - "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.22.4.tgz" - "version" "7.22.4" +"@babel/types@^7.0.0", "@babel/types@^7.12.6", "@babel/types@^7.20.0", "@babel/types@^7.20.7", "@babel/types@^7.22.0", "@babel/types@^7.22.15", "@babel/types@^7.22.19", "@babel/types@^7.22.3", "@babel/types@^7.22.4", "@babel/types@^7.22.5", "@babel/types@^7.23.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + "integrity" "sha512-OZnvoH2l8PK5eUvEcUyCt/sXgr/h+UWpVuBbOljwcrAgUl6lpchoQ++PHGyQy1AtYnVA6CEq3y5xeEI10brpXw==" + "resolved" "https://registry.npmjs.org/@babel/types/-/types-7.23.3.tgz" + "version" "7.23.3" dependencies: - "@babel/helper-string-parser" "^7.21.5" - "@babel/helper-validator-identifier" "^7.19.1" + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.20" "to-fast-properties" "^2.0.0" "@bcoe/v8-coverage@^0.2.3": @@ -1235,6 +1230,13 @@ "resolved" "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz" "version" "0.2.3" +"@cspotcode/source-map-support@^0.8.0": + "integrity" "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==" + "resolved" "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + "version" "0.8.1" + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + "@csstools/normalize.css@*": "integrity" "sha512-M0qqxAcwCsIVfpFQSlGN5XjXWu8l5JDZN+fPt1LeW5SZexQTgnaEvgXAY+CeygRw0EeppWHi12JxESWiWrB0Sg==" "resolved" "https://registry.npmjs.org/@csstools/normalize.css/-/normalize.css-12.0.0.tgz" @@ -1525,6 +1527,18 @@ "jest-util" "^28.1.3" "slash" "^3.0.0" +"@jest/console@^29.7.0": + "integrity" "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==" + "resolved" "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + "chalk" "^4.0.0" + "jest-message-util" "^29.7.0" + "jest-util" "^29.7.0" + "slash" "^3.0.0" + "@jest/core@^27.5.1": "integrity" "sha512-AK6/UTrvQD0Cd24NSqmIA6rKsu0tKIxfiCducZvqxYdmMisOYAsdItspT+fQDQYARPf8XgjAFZi0ogW2agH5nQ==" "resolved" "https://registry.npmjs.org/@jest/core/-/core-27.5.1.tgz" @@ -1559,6 +1573,40 @@ "slash" "^3.0.0" "strip-ansi" "^6.0.0" +"@jest/core@^29.7.0": + "integrity" "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==" + "resolved" "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "jest-changed-files" "^29.7.0" + "jest-config" "^29.7.0" + "jest-haste-map" "^29.7.0" + "jest-message-util" "^29.7.0" + "jest-regex-util" "^29.6.3" + "jest-resolve" "^29.7.0" + "jest-resolve-dependencies" "^29.7.0" + "jest-runner" "^29.7.0" + "jest-runtime" "^29.7.0" + "jest-snapshot" "^29.7.0" + "jest-util" "^29.7.0" + "jest-validate" "^29.7.0" + "jest-watcher" "^29.7.0" + "micromatch" "^4.0.4" + "pretty-format" "^29.7.0" + "slash" "^3.0.0" + "strip-ansi" "^6.0.0" + "@jest/environment@^27.5.1": "integrity" "sha512-/WQjhPJe3/ghaol/4Bq480JKXV/Rfw8nQdN7f41fM8VDHLcxKXou6QyXAh3EFr9/bVG3x74z1NWDkP87EiY8gA==" "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-27.5.1.tgz" @@ -1569,6 +1617,31 @@ "@types/node" "*" "jest-mock" "^27.5.1" +"@jest/environment@^29.7.0": + "integrity" "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==" + "resolved" "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + "jest-mock" "^29.7.0" + +"@jest/expect-utils@^29.7.0": + "integrity" "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==" + "resolved" "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "jest-get-type" "^29.6.3" + +"@jest/expect@^29.7.0": + "integrity" "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==" + "resolved" "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "expect" "^29.7.0" + "jest-snapshot" "^29.7.0" + "@jest/fake-timers@^27.5.1": "integrity" "sha512-/aPowoolwa07k7/oM3aASneNeBGCmGQsc3ugN4u6s4C/+s5M64MFo/+djTdiwcbQlRfFElGuDXWzaWj6QgKObQ==" "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-27.5.1.tgz" @@ -1581,6 +1654,18 @@ "jest-mock" "^27.5.1" "jest-util" "^27.5.1" +"@jest/fake-timers@^29.7.0": + "integrity" "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==" + "resolved" "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + "jest-message-util" "^29.7.0" + "jest-mock" "^29.7.0" + "jest-util" "^29.7.0" + "@jest/globals@^27.5.1": "integrity" "sha512-ZEJNB41OBQQgGzgyInAv0UUfDDj3upmHydjieSxFvTRuZElrx7tXg/uVQ5hYVEwiXs3+aMsAeEc9X7xiSKCm4Q==" "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-27.5.1.tgz" @@ -1590,6 +1675,16 @@ "@jest/types" "^27.5.1" "expect" "^27.5.1" +"@jest/globals@^29.7.0": + "integrity" "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==" + "resolved" "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + "jest-mock" "^29.7.0" + "@jest/reporters@^27.5.1": "integrity" "sha512-cPXh9hWIlVJMQkVk84aIvXuBB4uQQmFqZiacloFuGiP3ah1sbCxCosidXFDfqG8+6fO1oR2dTJTlsOy4VFmUfw==" "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-27.5.1.tgz" @@ -1621,6 +1716,36 @@ "terminal-link" "^2.0.0" "v8-to-istanbul" "^8.1.0" +"@jest/reporters@^29.7.0": + "integrity" "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==" + "resolved" "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + "chalk" "^4.0.0" + "collect-v8-coverage" "^1.0.0" + "exit" "^0.1.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "istanbul-lib-coverage" "^3.0.0" + "istanbul-lib-instrument" "^6.0.0" + "istanbul-lib-report" "^3.0.0" + "istanbul-lib-source-maps" "^4.0.0" + "istanbul-reports" "^3.1.3" + "jest-message-util" "^29.7.0" + "jest-util" "^29.7.0" + "jest-worker" "^29.7.0" + "slash" "^3.0.0" + "string-length" "^4.0.1" + "strip-ansi" "^6.0.0" + "v8-to-istanbul" "^9.0.1" + "@jest/schemas@^28.1.3": "integrity" "sha512-/l/VWsdt/aBXgjshLWOFyFt3IVdYypu5y2Wn2rOO1un6nkqIn8SLXzgIMYXFyYsRWDyF5EthmKJMIdJvk08grg==" "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-28.1.3.tgz" @@ -1628,6 +1753,13 @@ dependencies: "@sinclair/typebox" "^0.24.1" +"@jest/schemas@^29.6.3": + "integrity" "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==" + "resolved" "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz" + "version" "29.6.3" + dependencies: + "@sinclair/typebox" "^0.27.8" + "@jest/source-map@^27.5.1": "integrity" "sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==" "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-27.5.1.tgz" @@ -1637,6 +1769,15 @@ "graceful-fs" "^4.2.9" "source-map" "^0.6.0" +"@jest/source-map@^29.6.3": + "integrity" "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==" + "resolved" "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz" + "version" "29.6.3" + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + "callsites" "^3.0.0" + "graceful-fs" "^4.2.9" + "@jest/test-result@^27.5.1": "integrity" "sha512-EW35l2RYFUcUQxFJz5Cv5MTOxlJIQs4I7gxzi2zVU7PJhOwfYq1MdC5nhSmYjX1gmMmLPvB3sIaC+BkcHRBfag==" "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-27.5.1.tgz" @@ -1657,6 +1798,16 @@ "@types/istanbul-lib-coverage" "^2.0.0" "collect-v8-coverage" "^1.0.0" +"@jest/test-result@^29.7.0": + "integrity" "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==" + "resolved" "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "collect-v8-coverage" "^1.0.0" + "@jest/test-sequencer@^27.5.1": "integrity" "sha512-LCheJF7WB2+9JuCS7VB/EmGIdQuhtqjRNI9A43idHv3E4KltCTsPsLxvdaubFHSYwY/fNjMWjl6vNRhDiN7vpQ==" "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-27.5.1.tgz" @@ -1667,6 +1818,16 @@ "jest-haste-map" "^27.5.1" "jest-runtime" "^27.5.1" +"@jest/test-sequencer@^29.7.0": + "integrity" "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==" + "resolved" "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/test-result" "^29.7.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^29.7.0" + "slash" "^3.0.0" + "@jest/transform@^27.5.1": "integrity" "sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==" "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-27.5.1.tgz" @@ -1688,6 +1849,27 @@ "source-map" "^0.6.1" "write-file-atomic" "^3.0.0" +"@jest/transform@^29.7.0": + "integrity" "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==" + "resolved" "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "babel-plugin-istanbul" "^6.1.1" + "chalk" "^4.0.0" + "convert-source-map" "^2.0.0" + "fast-json-stable-stringify" "^2.1.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^29.7.0" + "jest-regex-util" "^29.6.3" + "jest-util" "^29.7.0" + "micromatch" "^4.0.4" + "pirates" "^4.0.4" + "slash" "^3.0.0" + "write-file-atomic" "^4.0.2" + "@jest/types@^27.5.1": "integrity" "sha512-Cx46iJ9QpwQTjIdq5VJu2QTMMs3QlEjI0x1QbBP5W1+nMzyc2XmimiRR/CbX9TO0cPTeUlxWMOu8mslYsJ8DEw==" "resolved" "https://registry.npmjs.org/@jest/types/-/types-27.5.1.tgz" @@ -1711,6 +1893,18 @@ "@types/yargs" "^17.0.8" "chalk" "^4.0.0" +"@jest/types@^29.0.0", "@jest/types@^29.6.3": + "integrity" "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==" + "resolved" "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz" + "version" "29.6.3" + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + "chalk" "^4.0.0" + "@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": "integrity" "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==" "resolved" "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" @@ -1720,7 +1914,7 @@ "@jridgewell/sourcemap-codec" "^1.4.10" "@jridgewell/trace-mapping" "^0.3.9" -"@jridgewell/resolve-uri@3.1.0": +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@3.1.0": "integrity" "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==" "resolved" "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz" "version" "3.1.0" @@ -1748,7 +1942,7 @@ "resolved" "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" "version" "1.4.14" -"@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.9": +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.17", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.9": "integrity" "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==" "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz" "version" "0.3.18" @@ -1756,6 +1950,14 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" +"@jridgewell/trace-mapping@0.3.9": + "integrity" "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==" + "resolved" "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + "version" "0.3.9" + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@juggle/resize-observer@^3.3.1": "integrity" "sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==" "resolved" "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz" @@ -2014,10 +2216,10 @@ "resolved" "https://registry.npmjs.org/@react-leaflet/core/-/core-2.1.0.tgz" "version" "2.1.0" -"@remix-run/router@1.6.2": - "integrity" "sha512-LzqpSrMK/3JBAVBI9u3NWtOhWNw5AMQfrUFYB0+bDHTSw17z++WJLsPsxAuK+oSddsxk4d7F/JcdDPM1M5YAhA==" - "resolved" "https://registry.npmjs.org/@remix-run/router/-/router-1.6.2.tgz" - "version" "1.6.2" +"@remix-run/router@1.14.1": + "integrity" "sha512-Qg4DMQsfPNAs88rb2xkdk03N3bjK4jgX5fR24eHCTR9q6PrhZQZ4UJBPzCHJkIpTRN1UKxx2DzjZmnC+7Lj0Ow==" + "resolved" "https://registry.npmjs.org/@remix-run/router/-/router-1.14.1.tgz" + "version" "1.14.1" "@rollup/plugin-babel@^5.2.0": "integrity" "sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==" @@ -2074,6 +2276,11 @@ "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz" "version" "0.24.51" +"@sinclair/typebox@^0.27.8": + "integrity" "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==" + "resolved" "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz" + "version" "0.27.8" + "@sinonjs/commons@^1.7.0": "integrity" "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==" "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz" @@ -2081,6 +2288,20 @@ dependencies: "type-detect" "4.0.8" +"@sinonjs/commons@^3.0.0": + "integrity" "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==" + "resolved" "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "type-detect" "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + "integrity" "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==" + "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz" + "version" "10.3.0" + dependencies: + "@sinonjs/commons" "^3.0.0" + "@sinonjs/fake-timers@^8.0.1": "integrity" "sha512-OAPJUAtgeINhh/TAlUID4QTs53Njm7xzddaVlEs/SXwgtiD1tW22zAB/W1wdqfrpmikgaWQ9Fw6Ws+hsiRm5Vg==" "resolved" "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-8.1.0.tgz" @@ -2307,21 +2528,7 @@ "@svgr/plugin-jsx" "^6.5.1" "@svgr/plugin-svgo" "^6.5.1" -"@testing-library/dom@^8.5.0": - "integrity" "sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==" - "resolved" "https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz" - "version" "8.20.0" - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^5.0.1" - "aria-query" "^5.0.0" - "chalk" "^4.1.0" - "dom-accessibility-api" "^0.5.9" - "lz-string" "^1.4.4" - "pretty-format" "^27.0.2" - -"@testing-library/dom@>=7.21.4": +"@testing-library/dom@^9.0.0", "@testing-library/dom@>=7.21.4": "integrity" "sha512-Dffe68pGwI6WlLRYR2I0piIkyole9cSBH5jGQKCGMRpHW5RHCqAUaqc2Kv0tUyd4dU4DLPKhJIjyKOnjv4tuUw==" "resolved" "https://registry.npmjs.org/@testing-library/dom/-/dom-9.3.0.tgz" "version" "9.3.0" @@ -2350,13 +2557,13 @@ "lodash" "^4.17.15" "redent" "^3.0.0" -"@testing-library/react@^13.4.0": - "integrity" "sha512-sXOGON+WNTh3MLE9rve97ftaZukN3oNf2KjDy7YTx6hcTO2uuLHuCGynMDhFwGw/jYf4OJ2Qk0i4i79qMNNkyw==" - "resolved" "https://registry.npmjs.org/@testing-library/react/-/react-13.4.0.tgz" - "version" "13.4.0" +"@testing-library/react@^14.1.2": + "integrity" "sha512-z4p7DVBTPjKM5qDZ0t5ZjzkpSNb+fZy1u6bzO7kk8oeGagpPCAtgh4cx1syrfp7a+QWkM021jGqjJaxJJnXAZg==" + "resolved" "https://registry.npmjs.org/@testing-library/react/-/react-14.1.2.tgz" + "version" "14.1.2" dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^8.5.0" + "@testing-library/dom" "^9.0.0" "@types/react-dom" "^18.0.0" "@testing-library/user-event@^13.5.0": @@ -2379,11 +2586,36 @@ "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz" "version" "1.1.2" +"@tootallnate/once@2": + "integrity" "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" + "resolved" "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz" + "version" "2.0.0" + "@trysound/sax@0.2.0": "integrity" "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==" "resolved" "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz" "version" "0.2.0" +"@tsconfig/node10@^1.0.7": + "integrity" "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" + "resolved" "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + "version" "1.0.9" + +"@tsconfig/node12@^1.0.7": + "integrity" "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" + "resolved" "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + "version" "1.0.11" + +"@tsconfig/node14@^1.0.0": + "integrity" "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" + "resolved" "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + "version" "1.0.3" + +"@tsconfig/node16@^1.0.2": + "integrity" "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" + "resolved" "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + "version" "1.0.4" + "@types/aria-query@^5.0.1": "integrity" "sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==" "resolved" "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz" @@ -2513,7 +2745,7 @@ "resolved" "https://registry.npmjs.org/@types/googlemaps/-/googlemaps-3.43.3.tgz" "version" "3.43.3" -"@types/graceful-fs@^4.1.2": +"@types/graceful-fs@^4.1.2", "@types/graceful-fs@^4.1.3": "integrity" "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==" "resolved" "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz" "version" "4.1.6" @@ -2564,13 +2796,22 @@ dependencies: "@types/istanbul-lib-report" "*" -"@types/jest@*", "@types/jest@^27.5.2": - "integrity" "sha512-mpT8LJJ4CMeeahobofYWIjFo0xonRS/HfxnVEPMPFSQdGUt1uHCnoPT7Zhb+sjDU2wz0oKV0OLUR0WzrHNgfeA==" - "resolved" "https://registry.npmjs.org/@types/jest/-/jest-27.5.2.tgz" - "version" "27.5.2" +"@types/jest@*", "@types/jest@^29.5.11": + "integrity" "sha512-S2mHmYIVe13vrm6q4kN6fLYYAka15ALQki/vgDC3mIukEOx8WJlv0kQPM+d4w8Gp6u0uSdKND04IlTXBv0rwnQ==" + "resolved" "https://registry.npmjs.org/@types/jest/-/jest-29.5.11.tgz" + "version" "29.5.11" dependencies: - "jest-matcher-utils" "^27.0.0" - "pretty-format" "^27.0.0" + "expect" "^29.0.0" + "pretty-format" "^29.0.0" + +"@types/jsdom@^20.0.0": + "integrity" "sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==" + "resolved" "https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz" + "version" "20.0.1" + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + "parse5" "^7.0.0" "@types/json-schema@*", "@types/json-schema@^7.0.4", "@types/json-schema@^7.0.5", "@types/json-schema@^7.0.8", "@types/json-schema@^7.0.9": "integrity" "sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==" @@ -2787,6 +3028,11 @@ dependencies: "@types/jest" "*" +"@types/tough-cookie@*": + "integrity" "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" + "resolved" "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz" + "version" "4.0.5" + "@types/trusted-types@^2.0.2": "integrity" "sha512-NfQ4gyz38SL8sDNrSixxU2Os1a5xcdFxipAFxYEuLUlvU2uDwS4NUpsImcf1//SlWItCVMMLiylsxbmNMToV/g==" "resolved" "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.3.tgz" @@ -2800,21 +3046,21 @@ "@types/node" "*" "@types/yargs-parser@*": - "integrity" "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==" - "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz" - "version" "21.0.0" + "integrity" "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==" + "resolved" "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz" + "version" "21.0.3" "@types/yargs@^16.0.0": - "integrity" "sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==" - "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.5.tgz" - "version" "16.0.5" + "integrity" "sha512-1GwLEkmFafeb/HbE6pC7tFlgYSQ4Iqh2qlWCq8xN+Qfaiaxr2PcLfuhfRFRYqI6XJyeFoLYyKnhFbNsst9FMtQ==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-16.0.8.tgz" + "version" "16.0.8" dependencies: "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - "integrity" "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==" - "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz" - "version" "17.0.24" + "integrity" "sha512-bocYSx4DI8TmdlvxqGpVNXOgCNR1Jj0gNPhhAY+iz1rgKDAaYrAYdFYnhDV1IFuiuVc9HkOwyDcFxaTElF3/wg==" + "resolved" "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.31.tgz" + "version" "17.0.31" dependencies: "@types/yargs-parser" "*" @@ -3055,7 +3301,7 @@ "resolved" "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz" "version" "4.2.2" -"abab@^2.0.3", "abab@^2.0.5": +"abab@^2.0.3", "abab@^2.0.5", "abab@^2.0.6": "integrity" "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==" "resolved" "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz" "version" "2.0.6" @@ -3076,6 +3322,14 @@ "acorn" "^7.1.1" "acorn-walk" "^7.1.1" +"acorn-globals@^7.0.0": + "integrity" "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==" + "resolved" "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz" + "version" "7.0.1" + dependencies: + "acorn" "^8.1.0" + "acorn-walk" "^8.0.2" + "acorn-import-assertions@^1.9.0": "integrity" "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==" "resolved" "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz" @@ -3091,7 +3345,12 @@ "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz" "version" "7.2.0" -"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8", "acorn@^8.2.4", "acorn@^8.7.1", "acorn@^8.8.0", "acorn@^8.8.2": +"acorn-walk@^8.0.2", "acorn-walk@^8.1.1": + "integrity" "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==" + "resolved" "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz" + "version" "8.3.0" + +"acorn@^6.0.0 || ^7.0.0 || ^8.0.0", "acorn@^8", "acorn@^8.1.0", "acorn@^8.2.4", "acorn@^8.4.1", "acorn@^8.7.1", "acorn@^8.8.0", "acorn@^8.8.1", "acorn@^8.8.2": "integrity" "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==" "resolved" "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz" "version" "8.8.2" @@ -3317,6 +3576,11 @@ "normalize-path" "^3.0.0" "picomatch" "^2.0.4" +"arg@^4.1.0": + "integrity" "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" + "resolved" "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + "version" "4.1.3" + "arg@^5.0.2": "integrity" "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" "resolved" "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz" @@ -3521,6 +3785,19 @@ "graceful-fs" "^4.2.9" "slash" "^3.0.0" +"babel-jest@^29.0.0", "babel-jest@^29.7.0": + "integrity" "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==" + "resolved" "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + "babel-plugin-istanbul" "^6.1.1" + "babel-preset-jest" "^29.6.3" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "slash" "^3.0.0" + "babel-loader@^8.2.3": "integrity" "sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==" "resolved" "https://registry.npmjs.org/babel-loader/-/babel-loader-8.3.0.tgz" @@ -3552,6 +3829,16 @@ "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" +"babel-plugin-jest-hoist@^29.6.3": + "integrity" "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==" + "resolved" "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz" + "version" "29.6.3" + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + "babel-plugin-macros@^3.1.0": "integrity" "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==" "resolved" "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz" @@ -3566,29 +3853,29 @@ "resolved" "https://registry.npmjs.org/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.8.tgz" "version" "0.3.8" -"babel-plugin-polyfill-corejs2@^0.4.3": - "integrity" "sha512-bM3gHc337Dta490gg+/AseNB9L4YLHxq1nGKZZSHbhXv4aTYU2MD2cjza1Ru4S6975YLTaL1K8uJf6ukJhhmtw==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.3.tgz" - "version" "0.4.3" +"babel-plugin-polyfill-corejs2@^0.4.3", "babel-plugin-polyfill-corejs2@^0.4.6": + "integrity" "sha512-jhHiWVZIlnPbEUKSSNb9YoWcQGdlTLq7z1GHL4AjFxaoOUMuuEVJ+Y4pAaQUGOGk93YsVCKPbqbfw3m0SM6H8Q==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.6.tgz" + "version" "0.4.6" dependencies: - "@babel/compat-data" "^7.17.7" - "@babel/helper-define-polyfill-provider" "^0.4.0" - "semver" "^6.1.1" + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.4.3" + "semver" "^6.3.1" -"babel-plugin-polyfill-corejs3@^0.8.1": - "integrity" "sha512-ikFrZITKg1xH6pLND8zT14UPgjKHiGLqex7rGEZCH2EvhsneJaJPemmpQaIZV5AL03II+lXylw3UmddDK8RU5Q==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.1.tgz" - "version" "0.8.1" +"babel-plugin-polyfill-corejs3@^0.8.1", "babel-plugin-polyfill-corejs3@^0.8.5": + "integrity" "sha512-leDIc4l4tUgU7str5BWLS2h8q2N4Nf6lGZP6UrNDxdtfF2g69eJ5L0H7S8A5Ln/arfFAfHor5InAdZuIOwZdgQ==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.6.tgz" + "version" "0.8.6" dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" - "core-js-compat" "^3.30.1" + "@babel/helper-define-polyfill-provider" "^0.4.3" + "core-js-compat" "^3.33.1" -"babel-plugin-polyfill-regenerator@^0.5.0": - "integrity" "sha512-hDJtKjMLVa7Z+LwnTCxoDLQj6wdc+B8dun7ayF2fYieI6OzfuvcLMB32ihJZ4UhCBwNYGl5bg/x/P9cMdnkc2g==" - "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.0.tgz" - "version" "0.5.0" +"babel-plugin-polyfill-regenerator@^0.5.0", "babel-plugin-polyfill-regenerator@^0.5.3": + "integrity" "sha512-8sHeDOmXC8csczMrYEOf0UTNa4yE2SxV5JGeT/LP1n0OYVDUUFPxG9vdk2AlDlIit4t+Kf0xCtpgXPBwnn/9pw==" + "resolved" "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.3.tgz" + "version" "0.5.3" dependencies: - "@babel/helper-define-polyfill-provider" "^0.4.0" + "@babel/helper-define-polyfill-provider" "^0.4.3" "babel-plugin-styled-components@>= 1.12.0": "integrity" "sha512-jBioLwBVHpOMU4NsueH/ADcHrjS0Y/WTpt2eGVmmuSFNEv2DF3XhcMncuZlbbjxQ4vzxg+yEr6E6TNjrIQbsJQ==" @@ -3637,6 +3924,14 @@ "babel-plugin-jest-hoist" "^27.5.1" "babel-preset-current-node-syntax" "^1.0.0" +"babel-preset-jest@^29.6.3": + "integrity" "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==" + "resolved" "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz" + "version" "29.6.3" + dependencies: + "babel-plugin-jest-hoist" "^29.6.3" + "babel-preset-current-node-syntax" "^1.0.0" + "babel-preset-react-app@^10.0.1": "integrity" "sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==" "resolved" "https://registry.npmjs.org/babel-preset-react-app/-/babel-preset-react-app-10.0.1.tgz" @@ -3759,15 +4054,22 @@ "resolved" "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz" "version" "1.0.0" -"browserslist@^4.0.0", "browserslist@^4.14.5", "browserslist@^4.18.1", "browserslist@^4.21.3", "browserslist@^4.21.4", "browserslist@^4.21.5", "browserslist@>= 4", "browserslist@>= 4.21.0", "browserslist@>=4": - "integrity" "sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==" - "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.21.7.tgz" - "version" "4.21.7" +"browserslist@^4.0.0", "browserslist@^4.14.5", "browserslist@^4.18.1", "browserslist@^4.21.4", "browserslist@^4.21.5", "browserslist@^4.21.9", "browserslist@^4.22.1", "browserslist@>= 4", "browserslist@>= 4.21.0", "browserslist@>=4": + "integrity" "sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==" + "resolved" "https://registry.npmjs.org/browserslist/-/browserslist-4.22.1.tgz" + "version" "4.22.1" dependencies: - "caniuse-lite" "^1.0.30001489" - "electron-to-chromium" "^1.4.411" - "node-releases" "^2.0.12" - "update-browserslist-db" "^1.0.11" + "caniuse-lite" "^1.0.30001541" + "electron-to-chromium" "^1.4.535" + "node-releases" "^2.0.13" + "update-browserslist-db" "^1.0.13" + +"bs-logger@0.x": + "integrity" "sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==" + "resolved" "https://registry.npmjs.org/bs-logger/-/bs-logger-0.2.6.tgz" + "version" "0.2.6" + dependencies: + "fast-json-stable-stringify" "2.x" "bser@2.1.1": "integrity" "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==" @@ -3847,17 +4149,17 @@ "lodash.memoize" "^4.1.2" "lodash.uniq" "^4.5.0" -"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30001464", "caniuse-lite@^1.0.30001489": - "integrity" "sha512-F6x5IEuigtUfU5ZMQK2jsy5JqUUlEFRVZq8bO2a+ysq5K7jD6PPc9YXZj78xDNS3uNchesp1Jw47YXEqr+Viyg==" - "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001495.tgz" - "version" "1.0.30001495" +"caniuse-lite@^1.0.0", "caniuse-lite@^1.0.30001464", "caniuse-lite@^1.0.30001541": + "integrity" "sha512-na2WUmOxnwIZtwnFI2CZ/3er0wdNzU7hN+cPYz/z2ajHThnkWjNBOpEPP4n+4r2WPM847JaMotaJE3bnfzjyKw==" + "resolved" "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001563.tgz" + "version" "1.0.30001563" "case-sensitive-paths-webpack-plugin@^2.4.0": "integrity" "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==" "resolved" "https://registry.npmjs.org/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz" "version" "2.4.0" -"chalk@^2.0.0", "chalk@^2.4.1": +"chalk@^2.4.1", "chalk@^2.4.2": "integrity" "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==" "resolved" "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz" "version" "2.4.2" @@ -3971,9 +4273,9 @@ "version" "3.8.0" "cjs-module-lexer@^1.0.0": - "integrity" "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==" - "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.2.tgz" - "version" "1.2.2" + "integrity" "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + "resolved" "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz" + "version" "1.2.3" "classnames@^2.2.1", "classnames@^2.2.3", "classnames@^2.2.5", "classnames@^2.2.6", "classnames@^2.3.1", "classnames@^2.3.2", "classnames@2.x": "integrity" "sha512-CSbhY4cFEJRe6/GQzIk5qXZ4Jeg5pcsP7b5peFSDpffpe1cqjASH/n9UTjBwOp6XpMSTwQ8Za2K5V02ueA7Tmw==" @@ -4024,6 +4326,15 @@ "strip-ansi" "^6.0.0" "wrap-ansi" "^7.0.0" +"cliui@^8.0.1": + "integrity" "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==" + "resolved" "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz" + "version" "8.0.1" + dependencies: + "string-width" "^4.2.0" + "strip-ansi" "^6.0.1" + "wrap-ansi" "^7.0.0" + "clone-deep@^4.0.1": "integrity" "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==" "resolved" "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz" @@ -4210,6 +4521,11 @@ "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz" "version" "1.9.0" +"convert-source-map@^2.0.0": + "integrity" "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==" + "resolved" "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz" + "version" "2.0.0" + "cookie-signature@1.0.6": "integrity" "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" "resolved" "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" @@ -4227,12 +4543,12 @@ dependencies: "toggle-selection" "^1.0.6" -"core-js-compat@^3.30.1", "core-js-compat@^3.30.2": - "integrity" "sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==" - "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.2.tgz" - "version" "3.30.2" +"core-js-compat@^3.31.0", "core-js-compat@^3.33.1": + "integrity" "sha512-axfo+wxFVxnqf8RvxTzoAlzW4gRoacrHeoFlc9n0x50+7BEyZL/Rt3hicaED1/CEd7I6tPCPVUYcJwCMO5XUYw==" + "resolved" "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.33.2.tgz" + "version" "3.33.2" dependencies: - "browserslist" "^4.21.5" + "browserslist" "^4.22.1" "core-js-pure@^3.23.3": "integrity" "sha512-p/npFUJXXBkCCTIlEGBdghofn00jWG6ZOtdoIXSJmAu2QBvN0IqpZXWweOytcwE6cfx8ZvVUy1vw8zxhe4Y2vg==" @@ -4276,6 +4592,24 @@ "path-type" "^4.0.0" "yaml" "^1.10.0" +"create-jest@^29.7.0": + "integrity" "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==" + "resolved" "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/types" "^29.6.3" + "chalk" "^4.0.0" + "exit" "^0.1.2" + "graceful-fs" "^4.2.9" + "jest-config" "^29.7.0" + "jest-util" "^29.7.0" + "prompts" "^2.0.1" + +"create-require@^1.1.0": + "integrity" "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" + "resolved" "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + "version" "1.1.1" + "cross-spawn@^7.0.2", "cross-spawn@^7.0.3": "integrity" "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==" "resolved" "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" @@ -4509,6 +4843,11 @@ "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz" "version" "0.4.4" +"cssom@^0.5.0": + "integrity" "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==" + "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz" + "version" "0.5.0" + "cssom@~0.3.6": "integrity" "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==" "resolved" "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz" @@ -4540,6 +4879,15 @@ "whatwg-mimetype" "^2.3.0" "whatwg-url" "^8.0.0" +"data-urls@^3.0.2": + "integrity" "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==" + "resolved" "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz" + "version" "3.0.2" + dependencies: + "abab" "^2.0.6" + "whatwg-mimetype" "^3.0.0" + "whatwg-url" "^11.0.0" + "date-fns@^2.29.3", "date-fns@>= 2.x": "integrity" "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==" "resolved" "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz" @@ -4587,7 +4935,7 @@ dependencies: "ms" "2.0.0" -"decimal.js@^10.2.1": +"decimal.js@^10.2.1", "decimal.js@^10.4.2": "integrity" "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" "resolved" "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz" "version" "10.4.3" @@ -4602,6 +4950,11 @@ "resolved" "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz" "version" "0.7.0" +"dedent@^1.0.0": + "integrity" "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==" + "resolved" "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz" + "version" "1.5.1" + "deep-equal@^2.0.5": "integrity" "sha512-lKdkdV6EOGoVn65XaOsPdH4rMxTZOnmFyuIkMjM1i5HHCbfjC97dawgTAy0deYNfuqUqW+Q5VrVaQYtUpSd6yQ==" "resolved" "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.1.tgz" @@ -4626,7 +4979,7 @@ "which-collection" "^1.0.1" "which-typed-array" "^1.1.9" -"deep-is@^0.1.3", "deep-is@~0.1.3": +"deep-is@^0.1.3": "integrity" "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" "resolved" "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz" "version" "0.1.4" @@ -4709,6 +5062,16 @@ "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-27.5.1.tgz" "version" "27.5.1" +"diff-sequences@^29.6.3": + "integrity" "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==" + "resolved" "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz" + "version" "29.6.3" + +"diff@^4.0.1": + "integrity" "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" + "resolved" "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + "version" "4.0.2" + "dir-glob@^3.0.1": "integrity" "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==" "resolved" "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" @@ -4823,6 +5186,13 @@ dependencies: "webidl-conversions" "^5.0.0" +"domexception@^4.0.0": + "integrity" "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==" + "resolved" "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "webidl-conversions" "^7.0.0" + "domhandler@^4.0.0", "domhandler@^4.2.0", "domhandler@^4.3.1": "integrity" "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==" "resolved" "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz" @@ -4946,16 +5316,21 @@ dependencies: "jake" "^10.8.5" -"electron-to-chromium@^1.4.411": - "integrity" "sha512-wZOyn3s/aQOtLGAwXMZfteQPN68kgls2wDAnYOA8kCjBvKVrW5RwmWVspxJYTqrcN7Y263XJVsC66VCIGzDO3g==" - "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.421.tgz" - "version" "1.4.421" +"electron-to-chromium@^1.4.535": + "integrity" "sha512-RyJX0q/zOkAoefZhB9XHghGeATVP0Q3mwA253XD/zj2OeXc+JZB9pCaEv6R578JUYaWM9PRhye0kXvd/V1cQ3Q==" + "resolved" "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.587.tgz" + "version" "1.4.587" "emittery@^0.10.2": "integrity" "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==" "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz" "version" "0.10.2" +"emittery@^0.13.1": + "integrity" "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==" + "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz" + "version" "0.13.1" + "emittery@^0.8.1": "integrity" "sha512-uDfvUjVrfGJJhymx/kz6prltenw1u7WrCg1oa94zYY8xxVpLLUu045LAT0dhDZdXG58/EpPL/5kA180fQ/qudg==" "resolved" "https://registry.npmjs.org/emittery/-/emittery-0.8.1.tgz" @@ -5149,14 +5524,13 @@ "version" "4.0.0" "escodegen@^2.0.0": - "integrity" "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==" - "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz" - "version" "2.0.0" + "integrity" "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==" + "resolved" "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz" + "version" "2.1.0" dependencies: "esprima" "^4.0.1" "estraverse" "^5.2.0" "esutils" "^2.0.2" - "optionator" "^0.8.1" optionalDependencies: "source-map" "~0.6.1" @@ -5513,6 +5887,17 @@ "jest-matcher-utils" "^27.5.1" "jest-message-util" "^27.5.1" +"expect@^29.0.0", "expect@^29.7.0": + "integrity" "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==" + "resolved" "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/expect-utils" "^29.7.0" + "jest-get-type" "^29.6.3" + "jest-matcher-utils" "^29.7.0" + "jest-message-util" "^29.7.0" + "jest-util" "^29.7.0" + "express@^4.17.3": "integrity" "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==" "resolved" "https://registry.npmjs.org/express/-/express-4.18.2.tgz" @@ -5566,12 +5951,12 @@ "merge2" "^1.3.0" "micromatch" "^4.0.4" -"fast-json-stable-stringify@^2.0.0", "fast-json-stable-stringify@^2.1.0": +"fast-json-stable-stringify@^2.0.0", "fast-json-stable-stringify@^2.1.0", "fast-json-stable-stringify@2.x": "integrity" "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" "resolved" "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz" "version" "2.1.0" -"fast-levenshtein@^2.0.6", "fast-levenshtein@~2.0.6": +"fast-levenshtein@^2.0.6": "integrity" "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" "resolved" "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz" "version" "2.0.6" @@ -6137,6 +6522,13 @@ dependencies: "whatwg-encoding" "^1.0.5" +"html-encoding-sniffer@^3.0.0": + "integrity" "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==" + "resolved" "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "whatwg-encoding" "^2.0.0" + "html-entities@^2.1.0", "html-entities@^2.3.2": "integrity" "sha512-72TJlcMkYsEJASa/3HnX7VT59htM7iSHbH59NSZbtc+22Ap0Txnlx91sfeB+/A7wNZg7UxtZdhAW4y+/jimrdg==" "resolved" "https://registry.npmjs.org/html-entities/-/html-entities-2.3.5.tgz" @@ -6252,6 +6644,15 @@ "agent-base" "6" "debug" "4" +"http-proxy-agent@^5.0.0": + "integrity" "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==" + "resolved" "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz" + "version" "5.0.0" + dependencies: + "@tootallnate/once" "2" + "agent-base" "6" + "debug" "4" + "http-proxy-middleware@^2.0.3": "integrity" "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==" "resolved" "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz" @@ -6277,7 +6678,7 @@ "resolved" "https://registry.npmjs.org/http-status-codes/-/http-status-codes-2.2.0.tgz" "version" "2.2.0" -"https-proxy-agent@^5.0.0": +"https-proxy-agent@^5.0.0", "https-proxy-agent@^5.0.1": "integrity" "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==" "resolved" "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz" "version" "5.0.1" @@ -6300,7 +6701,7 @@ "resolved" "https://registry.npmjs.org/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz" "version" "1.0.4" -"iconv-lite@^0.6.3": +"iconv-lite@^0.6.3", "iconv-lite@0.6.3": "integrity" "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==" "resolved" "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" "version" "0.6.3" @@ -6708,9 +7109,9 @@ "version" "3.0.1" "istanbul-lib-coverage@^3.0.0", "istanbul-lib-coverage@^3.2.0": - "integrity" "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==" - "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz" - "version" "3.2.0" + "integrity" "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==" + "resolved" "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz" + "version" "3.2.2" "istanbul-lib-instrument@^5.0.4", "istanbul-lib-instrument@^5.1.0": "integrity" "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==" @@ -6723,13 +7124,24 @@ "istanbul-lib-coverage" "^3.2.0" "semver" "^6.3.0" +"istanbul-lib-instrument@^6.0.0": + "integrity" "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==" + "resolved" "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz" + "version" "6.0.1" + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + "istanbul-lib-coverage" "^3.2.0" + "semver" "^7.5.4" + "istanbul-lib-report@^3.0.0": - "integrity" "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==" - "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz" - "version" "3.0.0" + "integrity" "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==" + "resolved" "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz" + "version" "3.0.1" dependencies: "istanbul-lib-coverage" "^3.0.0" - "make-dir" "^3.0.0" + "make-dir" "^4.0.0" "supports-color" "^7.1.0" "istanbul-lib-source-maps@^4.0.0": @@ -6742,9 +7154,9 @@ "source-map" "^0.6.1" "istanbul-reports@^3.1.3": - "integrity" "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==" - "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz" - "version" "3.1.5" + "integrity" "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==" + "resolved" "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz" + "version" "3.1.6" dependencies: "html-escaper" "^2.0.0" "istanbul-lib-report" "^3.0.0" @@ -6768,6 +7180,15 @@ "execa" "^5.0.0" "throat" "^6.0.1" +"jest-changed-files@^29.7.0": + "integrity" "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==" + "resolved" "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "execa" "^5.0.0" + "jest-util" "^29.7.0" + "p-limit" "^3.1.0" + "jest-circus@^27.5.1": "integrity" "sha512-D95R7x5UtlMA5iBYsOHFFbMD/GVA4R/Kdq15f7xYWUfWHBto9NYRsOvnSauTgdF+ogCpJ4tyKOXhUifxS65gdw==" "resolved" "https://registry.npmjs.org/jest-circus/-/jest-circus-27.5.1.tgz" @@ -6793,6 +7214,32 @@ "stack-utils" "^2.0.3" "throat" "^6.0.1" +"jest-circus@^29.7.0": + "integrity" "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==" + "resolved" "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + "chalk" "^4.0.0" + "co" "^4.6.0" + "dedent" "^1.0.0" + "is-generator-fn" "^2.0.0" + "jest-each" "^29.7.0" + "jest-matcher-utils" "^29.7.0" + "jest-message-util" "^29.7.0" + "jest-runtime" "^29.7.0" + "jest-snapshot" "^29.7.0" + "jest-util" "^29.7.0" + "p-limit" "^3.1.0" + "pretty-format" "^29.7.0" + "pure-rand" "^6.0.0" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + "jest-cli@^27.5.1": "integrity" "sha512-Hc6HOOwYq4/74/c62dEE3r5elx8wjYqxY0r0G/nFrLDPMFRu6RA/u8qINOIkvhxG7mMQ5EJsOGfRpI8L6eFUVw==" "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-27.5.1.tgz" @@ -6811,6 +7258,23 @@ "prompts" "^2.0.1" "yargs" "^16.2.0" +"jest-cli@^29.7.0": + "integrity" "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==" + "resolved" "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "chalk" "^4.0.0" + "create-jest" "^29.7.0" + "exit" "^0.1.2" + "import-local" "^3.0.2" + "jest-config" "^29.7.0" + "jest-util" "^29.7.0" + "jest-validate" "^29.7.0" + "yargs" "^17.3.1" + "jest-config@^27.5.1": "integrity" "sha512-5sAsjm6tGdsVbW9ahcChPAFCk4IlkQUknH5AvKjuLTSlcO/wCZKyFdn7Rg0EkC+OGgWODEy2hDpWB1PgzH0JNA==" "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-27.5.1.tgz" @@ -6841,6 +7305,34 @@ "slash" "^3.0.0" "strip-json-comments" "^3.1.1" +"jest-config@^29.7.0": + "integrity" "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==" + "resolved" "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + "babel-jest" "^29.7.0" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "deepmerge" "^4.2.2" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-circus" "^29.7.0" + "jest-environment-node" "^29.7.0" + "jest-get-type" "^29.6.3" + "jest-regex-util" "^29.6.3" + "jest-resolve" "^29.7.0" + "jest-runner" "^29.7.0" + "jest-util" "^29.7.0" + "jest-validate" "^29.7.0" + "micromatch" "^4.0.4" + "parse-json" "^5.2.0" + "pretty-format" "^29.7.0" + "slash" "^3.0.0" + "strip-json-comments" "^3.1.1" + "jest-diff@^27.5.1": "integrity" "sha512-m0NvkX55LDt9T4mctTEgnZk3fmEg3NRYutvMPWM/0iPnkFj2wIeF45O1718cMSOFO1vINkqmxqD8vE37uTEbqw==" "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-27.5.1.tgz" @@ -6851,6 +7343,16 @@ "jest-get-type" "^27.5.1" "pretty-format" "^27.5.1" +"jest-diff@^29.7.0": + "integrity" "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==" + "resolved" "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "chalk" "^4.0.0" + "diff-sequences" "^29.6.3" + "jest-get-type" "^29.6.3" + "pretty-format" "^29.7.0" + "jest-docblock@^27.5.1": "integrity" "sha512-rl7hlABeTsRYxKiUfpHrQrG4e2obOiTQWfMEH3PxPjOtdsfLQO4ReWSZaQ7DETm4xu07rl4q/h4zcKXyU0/OzQ==" "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-27.5.1.tgz" @@ -6858,6 +7360,13 @@ dependencies: "detect-newline" "^3.0.0" +"jest-docblock@^29.7.0": + "integrity" "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==" + "resolved" "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "detect-newline" "^3.0.0" + "jest-each@^27.5.1": "integrity" "sha512-1Ff6p+FbhT/bXQnEouYy00bkNSY7OUpfIcmdl8vZ31A1UUaurOLPA8a8BbJOF2RDUElwJhmeaV7LnagI+5UwNQ==" "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-27.5.1.tgz" @@ -6869,6 +7378,17 @@ "jest-util" "^27.5.1" "pretty-format" "^27.5.1" +"jest-each@^29.7.0": + "integrity" "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==" + "resolved" "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/types" "^29.6.3" + "chalk" "^4.0.0" + "jest-get-type" "^29.6.3" + "jest-util" "^29.7.0" + "pretty-format" "^29.7.0" + "jest-environment-jsdom@^27.5.1": "integrity" "sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==" "resolved" "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-27.5.1.tgz" @@ -6882,6 +7402,20 @@ "jest-util" "^27.5.1" "jsdom" "^16.6.0" +"jest-environment-jsdom@^29.7.0": + "integrity" "sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA==" + "resolved" "https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/jsdom" "^20.0.0" + "@types/node" "*" + "jest-mock" "^29.7.0" + "jest-util" "^29.7.0" + "jsdom" "^20.0.0" + "jest-environment-node@^27.5.1": "integrity" "sha512-Jt4ZUnxdOsTGwSRAfKEnE6BcwsSPNOijjwifq5sDFSA2kesnXTvNqKHYgM0hDq3549Uf/KzdXNYn4wMZJPlFLw==" "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-27.5.1.tgz" @@ -6894,11 +7428,28 @@ "jest-mock" "^27.5.1" "jest-util" "^27.5.1" +"jest-environment-node@^29.7.0": + "integrity" "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==" + "resolved" "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + "jest-mock" "^29.7.0" + "jest-util" "^29.7.0" + "jest-get-type@^27.5.1": "integrity" "sha512-2KY95ksYSaK7DMBWQn6dQz3kqAf3BB64y2udeG+hv4KfSOb9qwcYQstTJc1KCbsix+wLZWZYN8t7nwX3GOBLRw==" "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-27.5.1.tgz" "version" "27.5.1" +"jest-get-type@^29.6.3": + "integrity" "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==" + "resolved" "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz" + "version" "29.6.3" + "jest-haste-map@^27.5.1": "integrity" "sha512-7GgkZ4Fw4NFbMSDSpZwXeBiIbx+t/46nJ2QitkOjvwPYyZmqttu2TDSimMHP1EkPOi4xUZAN1doE5Vd25H4Jng==" "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-27.5.1.tgz" @@ -6919,6 +7470,25 @@ optionalDependencies: "fsevents" "^2.3.2" +"jest-haste-map@^29.7.0": + "integrity" "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==" + "resolved" "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + "anymatch" "^3.0.3" + "fb-watchman" "^2.0.0" + "graceful-fs" "^4.2.9" + "jest-regex-util" "^29.6.3" + "jest-util" "^29.7.0" + "jest-worker" "^29.7.0" + "micromatch" "^4.0.4" + "walker" "^1.0.8" + optionalDependencies: + "fsevents" "^2.3.2" + "jest-jasmine2@^27.5.1": "integrity" "sha512-jtq7VVyG8SqAorDpApwiJJImd0V2wv1xzdheGHRGyuT7gZm6gG47QEskOlzsN1PG/6WNaCo5pmwMHDf3AkG2pQ==" "resolved" "https://registry.npmjs.org/jest-jasmine2/-/jest-jasmine2-27.5.1.tgz" @@ -6950,7 +7520,15 @@ "jest-get-type" "^27.5.1" "pretty-format" "^27.5.1" -"jest-matcher-utils@^27.0.0", "jest-matcher-utils@^27.5.1": +"jest-leak-detector@^29.7.0": + "integrity" "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==" + "resolved" "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "jest-get-type" "^29.6.3" + "pretty-format" "^29.7.0" + +"jest-matcher-utils@^27.5.1": "integrity" "sha512-z2uTx/T6LBaCoNWNFWwChLBKYxTMcGBRjAt+2SbP929/Fflb9aa5LGma654Rz8z9HLxsrUaYzxE9T/EFIL/PAw==" "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-27.5.1.tgz" "version" "27.5.1" @@ -6960,6 +7538,16 @@ "jest-get-type" "^27.5.1" "pretty-format" "^27.5.1" +"jest-matcher-utils@^29.7.0": + "integrity" "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==" + "resolved" "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "chalk" "^4.0.0" + "jest-diff" "^29.7.0" + "jest-get-type" "^29.6.3" + "pretty-format" "^29.7.0" + "jest-message-util@^27.5.1": "integrity" "sha512-rMyFe1+jnyAAf+NHwTclDz0eAaLkVDdKVHHBFWsBWHnnh5YeJMNWWsv7AbFYXfK3oTqvL7VTWkhNLu1jX24D+g==" "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-27.5.1.tgz" @@ -6990,6 +7578,21 @@ "slash" "^3.0.0" "stack-utils" "^2.0.3" +"jest-message-util@^29.7.0": + "integrity" "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==" + "resolved" "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "micromatch" "^4.0.4" + "pretty-format" "^29.7.0" + "slash" "^3.0.0" + "stack-utils" "^2.0.3" + "jest-mock@^27.5.1": "integrity" "sha512-K4jKbY1d4ENhbrG2zuPWaQBvDly+iZ2yAW+T1fATN78hc0sInwn7wZB8XtlNnvHug5RMwV897Xm4LqmPM4e2Og==" "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-27.5.1.tgz" @@ -6998,6 +7601,15 @@ "@jest/types" "^27.5.1" "@types/node" "*" +"jest-mock@^29.7.0": + "integrity" "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==" + "resolved" "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + "jest-util" "^29.7.0" + "jest-pnp-resolver@^1.2.2": "integrity" "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==" "resolved" "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz" @@ -7013,6 +7625,11 @@ "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-28.0.2.tgz" "version" "28.0.2" +"jest-regex-util@^29.6.3": + "integrity" "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==" + "resolved" "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz" + "version" "29.6.3" + "jest-resolve-dependencies@^27.5.1": "integrity" "sha512-QQOOdY4PE39iawDn5rzbIePNigfe5B9Z91GDD1ae/xNDlu9kaat8QQ5EKnNmVWPV54hUdxCVwwj6YMgR2O7IOg==" "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-27.5.1.tgz" @@ -7022,6 +7639,14 @@ "jest-regex-util" "^27.5.1" "jest-snapshot" "^27.5.1" +"jest-resolve-dependencies@^29.7.0": + "integrity" "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==" + "resolved" "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "jest-regex-util" "^29.6.3" + "jest-snapshot" "^29.7.0" + "jest-resolve@*", "jest-resolve@^27.4.2", "jest-resolve@^27.5.1": "integrity" "sha512-FFDy8/9E6CV83IMbDpcjOhumAQPDyETnU2KZ1O98DwTnz8AOBsW/Xv3GySr1mOZdItLR+zDZ7I/UdTFbgSOVCw==" "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-27.5.1.tgz" @@ -7038,6 +7663,21 @@ "resolve.exports" "^1.1.0" "slash" "^3.0.0" +"jest-resolve@^29.7.0": + "integrity" "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==" + "resolved" "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "chalk" "^4.0.0" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^29.7.0" + "jest-pnp-resolver" "^1.2.2" + "jest-util" "^29.7.0" + "jest-validate" "^29.7.0" + "resolve" "^1.20.0" + "resolve.exports" "^2.0.0" + "slash" "^3.0.0" + "jest-runner@^27.5.1": "integrity" "sha512-g4NPsM4mFCOwFKXO4p/H/kWGdJp9V8kURY2lX8Me2drgXqG7rrZAx5kv+5H7wtt/cdFIjhqYx1HrlqWHaOvDaQ==" "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-27.5.1.tgz" @@ -7065,6 +7705,33 @@ "source-map-support" "^0.5.6" "throat" "^6.0.1" +"jest-runner@^29.7.0": + "integrity" "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==" + "resolved" "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + "chalk" "^4.0.0" + "emittery" "^0.13.1" + "graceful-fs" "^4.2.9" + "jest-docblock" "^29.7.0" + "jest-environment-node" "^29.7.0" + "jest-haste-map" "^29.7.0" + "jest-leak-detector" "^29.7.0" + "jest-message-util" "^29.7.0" + "jest-resolve" "^29.7.0" + "jest-runtime" "^29.7.0" + "jest-util" "^29.7.0" + "jest-watcher" "^29.7.0" + "jest-worker" "^29.7.0" + "p-limit" "^3.1.0" + "source-map-support" "0.5.13" + "jest-runtime@^27.5.1": "integrity" "sha512-o7gxw3Gf+H2IGt8fv0RiyE1+r83FJBRruoA+FXrlHw6xEyBsU8ugA6IPfTdVyA0w8HClpbK+DGJxH59UrNMx8A==" "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-27.5.1.tgz" @@ -7093,6 +7760,34 @@ "slash" "^3.0.0" "strip-bom" "^4.0.0" +"jest-runtime@^29.7.0": + "integrity" "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==" + "resolved" "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + "chalk" "^4.0.0" + "cjs-module-lexer" "^1.0.0" + "collect-v8-coverage" "^1.0.0" + "glob" "^7.1.3" + "graceful-fs" "^4.2.9" + "jest-haste-map" "^29.7.0" + "jest-message-util" "^29.7.0" + "jest-mock" "^29.7.0" + "jest-regex-util" "^29.6.3" + "jest-resolve" "^29.7.0" + "jest-snapshot" "^29.7.0" + "jest-util" "^29.7.0" + "slash" "^3.0.0" + "strip-bom" "^4.0.0" + "jest-serializer@^27.5.1": "integrity" "sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==" "resolved" "https://registry.npmjs.org/jest-serializer/-/jest-serializer-27.5.1.tgz" @@ -7129,6 +7824,32 @@ "pretty-format" "^27.5.1" "semver" "^7.3.2" +"jest-snapshot@^29.7.0": + "integrity" "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==" + "resolved" "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "babel-preset-current-node-syntax" "^1.0.0" + "chalk" "^4.0.0" + "expect" "^29.7.0" + "graceful-fs" "^4.2.9" + "jest-diff" "^29.7.0" + "jest-get-type" "^29.6.3" + "jest-matcher-utils" "^29.7.0" + "jest-message-util" "^29.7.0" + "jest-util" "^29.7.0" + "natural-compare" "^1.4.0" + "pretty-format" "^29.7.0" + "semver" "^7.5.3" + "jest-util@^27.5.1": "integrity" "sha512-Kv2o/8jNvX1MQ0KGtw480E/w4fBCDOnH6+6DmeKi6LZUIlKA5kwY0YNdlzaWTiVgxqAqik11QyxDOKk543aKXw==" "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-27.5.1.tgz" @@ -7153,6 +7874,30 @@ "graceful-fs" "^4.2.9" "picomatch" "^2.2.3" +"jest-util@^29.0.0": + "integrity" "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "graceful-fs" "^4.2.9" + "picomatch" "^2.2.3" + +"jest-util@^29.7.0": + "integrity" "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==" + "resolved" "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + "chalk" "^4.0.0" + "ci-info" "^3.2.0" + "graceful-fs" "^4.2.9" + "picomatch" "^2.2.3" + "jest-validate@^27.5.1": "integrity" "sha512-thkNli0LYTmOI1tDB3FI1S1RTp/Bqyd9pTarJwL87OIBFuqEb5Apv5EaApEudYg4g86e3CT6kM0RowkhtEnCBQ==" "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-27.5.1.tgz" @@ -7165,6 +7910,18 @@ "leven" "^3.1.0" "pretty-format" "^27.5.1" +"jest-validate@^29.7.0": + "integrity" "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==" + "resolved" "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/types" "^29.6.3" + "camelcase" "^6.2.0" + "chalk" "^4.0.0" + "jest-get-type" "^29.6.3" + "leven" "^3.1.0" + "pretty-format" "^29.7.0" + "jest-watch-typeahead@^1.0.0": "integrity" "sha512-Va5nLSJTN7YFtC2jd+7wsoe1pNe5K4ShLux/E5iHEwlB9AxaxmggY7to9KUqKojhaJw3aXqt5WAb4jGPOolpEw==" "resolved" "https://registry.npmjs.org/jest-watch-typeahead/-/jest-watch-typeahead-1.1.0.tgz" @@ -7205,6 +7962,20 @@ "jest-util" "^28.1.3" "string-length" "^4.0.1" +"jest-watcher@^29.7.0": + "integrity" "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==" + "resolved" "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + "ansi-escapes" "^4.2.1" + "chalk" "^4.0.0" + "emittery" "^0.13.1" + "jest-util" "^29.7.0" + "string-length" "^4.0.1" + "jest-worker@^26.2.1": "integrity" "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==" "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz" @@ -7232,6 +8003,16 @@ "merge-stream" "^2.0.0" "supports-color" "^8.0.0" +"jest-worker@^29.7.0": + "integrity" "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==" + "resolved" "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@types/node" "*" + "jest-util" "^29.7.0" + "merge-stream" "^2.0.0" + "supports-color" "^8.0.0" + "jest@^27.0.0 || ^28.0.0", "jest@^27.4.3": "integrity" "sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==" "resolved" "https://registry.npmjs.org/jest/-/jest-27.5.1.tgz" @@ -7241,6 +8022,16 @@ "import-local" "^3.0.2" "jest-cli" "^27.5.1" +"jest@^29.0.0", "jest@^29.7.0": + "integrity" "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==" + "resolved" "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + "import-local" "^3.0.2" + "jest-cli" "^29.7.0" + "jiti@^1.18.2": "integrity" "sha512-QAdOptna2NYiSSpv0O/BwoHBSmz4YhpzJHyi+fnMRTXFjp7B8i/YG5Z8IfusxB1ufjcD2Sre1F3R+nX3fvy7gg==" "resolved" "https://registry.npmjs.org/jiti/-/jiti-1.18.2.tgz" @@ -7311,6 +8102,38 @@ "ws" "^7.4.6" "xml-name-validator" "^3.0.0" +"jsdom@^20.0.0": + "integrity" "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==" + "resolved" "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz" + "version" "20.0.3" + dependencies: + "abab" "^2.0.6" + "acorn" "^8.8.1" + "acorn-globals" "^7.0.0" + "cssom" "^0.5.0" + "cssstyle" "^2.3.0" + "data-urls" "^3.0.2" + "decimal.js" "^10.4.2" + "domexception" "^4.0.0" + "escodegen" "^2.0.0" + "form-data" "^4.0.0" + "html-encoding-sniffer" "^3.0.0" + "http-proxy-agent" "^5.0.0" + "https-proxy-agent" "^5.0.1" + "is-potential-custom-element-name" "^1.0.1" + "nwsapi" "^2.2.2" + "parse5" "^7.1.1" + "saxes" "^6.0.0" + "symbol-tree" "^3.2.4" + "tough-cookie" "^4.1.2" + "w3c-xmlserializer" "^4.0.0" + "webidl-conversions" "^7.0.0" + "whatwg-encoding" "^2.0.0" + "whatwg-mimetype" "^3.0.0" + "whatwg-url" "^11.0.0" + "ws" "^8.11.0" + "xml-name-validator" "^4.0.0" + "jsesc@^2.5.1": "integrity" "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==" "resolved" "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz" @@ -7365,7 +8188,7 @@ dependencies: "minimist" "^1.2.0" -"json5@^2.1.2", "json5@^2.2.0", "json5@^2.2.2": +"json5@^2.1.2", "json5@^2.2.0", "json5@^2.2.2", "json5@^2.2.3": "integrity" "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==" "resolved" "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" "version" "2.2.3" @@ -7481,14 +8304,6 @@ "prelude-ls" "^1.2.1" "type-check" "~0.4.0" -"levn@~0.3.0": - "integrity" "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==" - "resolved" "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz" - "version" "0.3.0" - dependencies: - "prelude-ls" "~1.1.2" - "type-check" "~0.3.2" - "lie@~3.1.0": "integrity" "sha512-RiNhHysUjhrDQntfYSfY4MU24coXXdEOgw9WGcKHNeEwffDYbF//u87M1EWaMGzuFoSbqW0C9C6lEEhDOAswfw==" "resolved" "https://registry.npmjs.org/lie/-/lie-3.1.1.tgz" @@ -7599,7 +8414,7 @@ "resolved" "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz" "version" "4.0.8" -"lodash.memoize@^4.1.2": +"lodash.memoize@^4.1.2", "lodash.memoize@4.x": "integrity" "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==" "resolved" "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz" "version" "4.1.2" @@ -7662,7 +8477,7 @@ dependencies: "yallist" "^4.0.0" -"lz-string@^1.4.4", "lz-string@^1.5.0": +"lz-string@^1.5.0": "integrity" "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==" "resolved" "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz" "version" "1.5.0" @@ -7674,13 +8489,25 @@ dependencies: "sourcemap-codec" "^1.4.8" -"make-dir@^3.0.0", "make-dir@^3.0.2", "make-dir@^3.1.0": +"make-dir@^3.0.2", "make-dir@^3.1.0": "integrity" "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==" "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz" "version" "3.1.0" dependencies: "semver" "^6.0.0" +"make-dir@^4.0.0": + "integrity" "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==" + "resolved" "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "semver" "^7.5.3" + +"make-error@^1.1.1", "make-error@1.x": + "integrity" "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" + "resolved" "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + "version" "1.3.6" + "makeerror@1.0.12": "integrity" "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==" "resolved" "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz" @@ -7917,10 +8744,24 @@ "resolved" "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-3.4.3.tgz" "version" "3.4.3" -"mobx@^6.1.0", "mobx@^6.7.0": - "integrity" "sha512-HdKewQEREEJgsWnErClfbFoVebze6rGazxFLU/XUyrII8dORfVszN1V0BMRnQSzcgsNNtkX8DHj3nC6cdWE9YQ==" - "resolved" "https://registry.npmjs.org/mobx/-/mobx-6.9.0.tgz" - "version" "6.9.0" +"mobx-react-lite@^4.0.4": + "integrity" "sha512-StfB2wxE8imKj1f6T8WWPf4lVMx3cYH9Iy60bbKXEs21+HQ4tvvfIBZfSmMXgQAefi8xYEwQIz4GN9s0d2h7dg==" + "resolved" "https://registry.npmjs.org/mobx-react-lite/-/mobx-react-lite-4.0.5.tgz" + "version" "4.0.5" + dependencies: + "use-sync-external-store" "^1.2.0" + +"mobx-react@^9.1.0": + "integrity" "sha512-DeDRTYw4AlgHw8xEXtiZdKKEnp+c5/jeUgTbTQXEqnAzfkrgYRWP3p3Nv3Whc2CEcM/mDycbDWGjxKokQdlffg==" + "resolved" "https://registry.npmjs.org/mobx-react/-/mobx-react-9.1.0.tgz" + "version" "9.1.0" + dependencies: + "mobx-react-lite" "^4.0.4" + +"mobx@^6.1.0", "mobx@^6.12.0", "mobx@^6.9.0": + "integrity" "sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==" + "resolved" "https://registry.npmjs.org/mobx/-/mobx-6.12.0.tgz" + "version" "6.12.0" "ms@^2.1.1", "ms@2.1.2": "integrity" "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" @@ -8002,10 +8843,10 @@ "resolved" "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz" "version" "0.4.0" -"node-releases@^2.0.12": - "integrity" "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==" - "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz" - "version" "2.0.12" +"node-releases@^2.0.13": + "integrity" "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==" + "resolved" "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz" + "version" "2.0.13" "normalize-path@^3.0.0", "normalize-path@~3.0.0": "integrity" "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" @@ -8055,10 +8896,10 @@ dependencies: "boolbase" "^1.0.0" -"nwsapi@^2.2.0": - "integrity" "sha512-6xpotnECFy/og7tKSBVmUNft7J3jyXAka4XvG6AUhFWRz+Q/Ljus7znJAA3bxColfQLdS+XsjoodtJfCgeTEFQ==" - "resolved" "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.5.tgz" - "version" "2.2.5" +"nwsapi@^2.2.0", "nwsapi@^2.2.2": + "integrity" "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" + "resolved" "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz" + "version" "2.2.7" "object-assign@^4.0.1", "object-assign@^4.1.1": "integrity" "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" @@ -8203,18 +9044,6 @@ "is-docker" "^2.1.1" "is-wsl" "^2.2.0" -"optionator@^0.8.1": - "integrity" "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==" - "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz" - "version" "0.8.3" - dependencies: - "deep-is" "~0.1.3" - "fast-levenshtein" "~2.0.6" - "levn" "~0.3.0" - "prelude-ls" "~1.1.2" - "type-check" "~0.3.2" - "word-wrap" "~1.2.3" - "optionator@^0.9.1": "integrity" "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==" "resolved" "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz" @@ -8241,7 +9070,7 @@ dependencies: "p-try" "^2.0.0" -"p-limit@^3.0.2": +"p-limit@^3.0.2", "p-limit@^3.1.0": "integrity" "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==" "resolved" "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz" "version" "3.1.0" @@ -8319,6 +9148,13 @@ "json-parse-even-better-errors" "^2.3.0" "lines-and-columns" "^1.1.6" +"parse5@^7.0.0", "parse5@^7.1.1": + "integrity" "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==" + "resolved" "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz" + "version" "7.1.2" + dependencies: + "entities" "^4.4.0" + "parse5@6.0.1": "integrity" "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" "resolved" "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz" @@ -9017,11 +9853,6 @@ "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz" "version" "1.2.1" -"prelude-ls@~1.1.2": - "integrity" "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" - "resolved" "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz" - "version" "1.1.2" - "pretty-bytes@^5.3.0", "pretty-bytes@^5.4.1": "integrity" "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==" "resolved" "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz" @@ -9035,7 +9866,7 @@ "lodash" "^4.17.20" "renderkid" "^3.0.0" -"pretty-format@^27.0.0", "pretty-format@^27.0.2", "pretty-format@^27.5.1": +"pretty-format@^27.0.2", "pretty-format@^27.5.1": "integrity" "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==" "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz" "version" "27.5.1" @@ -9054,6 +9885,24 @@ "ansi-styles" "^5.0.0" "react-is" "^18.0.0" +"pretty-format@^29.0.0": + "integrity" "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/schemas" "^29.6.3" + "ansi-styles" "^5.0.0" + "react-is" "^18.0.0" + +"pretty-format@^29.7.0": + "integrity" "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==" + "resolved" "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz" + "version" "29.7.0" + dependencies: + "@jest/schemas" "^29.6.3" + "ansi-styles" "^5.0.0" + "react-is" "^18.0.0" + "process-nextick-args@~1.0.6": "integrity" "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw==" "resolved" "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz" @@ -9111,6 +9960,11 @@ "resolved" "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz" "version" "2.3.0" +"pure-rand@^6.0.0": + "integrity" "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==" + "resolved" "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz" + "version" "6.0.4" + "q@^1.1.2": "integrity" "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==" "resolved" "https://registry.npmjs.org/q/-/q-1.5.1.tgz" @@ -9668,7 +10522,7 @@ "resolved" "https://registry.npmjs.org/react-error-overlay/-/react-error-overlay-6.0.11.tgz" "version" "6.0.11" -"react-fast-compare@^3.0.1", "react-fast-compare@^3.1.1": +"react-fast-compare@^3.0.1": "integrity" "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" "resolved" "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz" "version" "3.2.2" @@ -9686,16 +10540,6 @@ "prop-types" "^15.5.0" "react-async-script" "^1.1.1" -"react-helmet@^6.1.0": - "integrity" "sha512-4uMzEY9nlDlgxr61NL3XbKRy1hEkXmKNXhjbAIOVw5vcFrsdYbH2FEwcNyWvWinl103nXgzYNlns9ca+8kFiWw==" - "resolved" "https://registry.npmjs.org/react-helmet/-/react-helmet-6.1.0.tgz" - "version" "6.1.0" - dependencies: - "object-assign" "^4.1.1" - "prop-types" "^15.7.2" - "react-fast-compare" "^3.1.1" - "react-side-effect" "^2.1.0" - "react-icons@^4.8.0": "integrity" "sha512-ijUnFr//ycebOqujtqtV9PFS7JjhWg0QU6ykURVHuL4cbofvRCf3f6GMn9+fBktEFQOIVZnuAYLZdiyadRQRFg==" "resolved" "https://registry.npmjs.org/react-icons/-/react-icons-4.9.0.tgz" @@ -9711,6 +10555,11 @@ "resolved" "https://registry.npmjs.org/react-image-size/-/react-image-size-2.0.2.tgz" "version" "2.0.2" +"react-is@^16.12.0 || ^17.0.0 || ^18.0.0", "react-is@^18.0.0", "react-is@^18.2.0", "react-is@>= 16.8.0": + "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" + "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" + "version" "18.2.0" + "react-is@^16.12.0": "integrity" "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" "resolved" "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz" @@ -9736,11 +10585,6 @@ "resolved" "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz" "version" "17.0.2" -"react-is@^18.0.0", "react-is@>= 16.8.0": - "integrity" "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" - "resolved" "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz" - "version" "18.2.0" - "react-leaflet-cluster@^2.1.0": "integrity" "sha512-16X7XQpRThQFC4PH4OpXHimGg19ouWmjxjtpxOeBKpvERSvIRqTx7fvhTwkEPNMFTQ8zTfddz6fRTUmUEQul7g==" "resolved" "https://registry.npmjs.org/react-leaflet-cluster/-/react-leaflet-cluster-2.1.0.tgz" @@ -9848,13 +10692,13 @@ "prop-types" "^15.6.1" "shallow-equal" "^1.2.1" -"react-router-dom@^6.8.1", "react-router-dom@>=4": - "integrity" "sha512-JNbKtAeh1VSJQnH6RvBDNhxNwemRj7KxCzc5jb7zvDSKRnPWIFj9pO+eXqjM69gQJ0r46hSz1x4l9y0651DKWw==" - "resolved" "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.11.2.tgz" - "version" "6.11.2" +"react-router-dom@^6.19.0", "react-router-dom@>=4": + "integrity" "sha512-QCNrtjtDPwHDO+AO21MJd7yIcr41UetYt5jzaB9Y1UYaPTCnVuJq6S748g1dE11OQlCFIQg+RtAA1SEZIyiBeA==" + "resolved" "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.21.1.tgz" + "version" "6.21.1" dependencies: - "@remix-run/router" "1.6.2" - "react-router" "6.11.2" + "@remix-run/router" "1.14.1" + "react-router" "6.21.1" "react-router-hash-link@^2.4.3": "integrity" "sha512-NU7GWc265m92xh/aYD79Vr1W+zAIXDWp3L2YZOYP4rCqPnJ6LI6vh3+rKgkidtYijozHclaEQTAHaAaMWPVI4A==" @@ -9863,12 +10707,12 @@ dependencies: "prop-types" "^15.7.2" -"react-router@6.11.2": - "integrity" "sha512-74z9xUSaSX07t3LM+pS6Un0T55ibUE/79CzfZpy5wsPDZaea1F8QkrsiyRnA2YQ7LwE/umaydzXZV80iDCPkMg==" - "resolved" "https://registry.npmjs.org/react-router/-/react-router-6.11.2.tgz" - "version" "6.11.2" +"react-router@6.21.1": + "integrity" "sha512-W0l13YlMTm1YrpVIOpjCADJqEUpz1vm+CMo47RuFX4Ftegwm6KOYsL5G3eiE52jnJpKvzm6uB/vTKTPKM8dmkA==" + "resolved" "https://registry.npmjs.org/react-router/-/react-router-6.21.1.tgz" + "version" "6.21.1" dependencies: - "@remix-run/router" "1.6.2" + "@remix-run/router" "1.14.1" "react-scripts@5.0.1": "integrity" "sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==" @@ -9925,10 +10769,13 @@ optionalDependencies: "fsevents" "^2.3.2" -"react-side-effect@^2.1.0": - "integrity" "sha512-PVjOcvVOyIILrYoyGEpDN3vmYNLdy1CajSFNt4TDsVQC5KpTijDvWVoR+/7Rz2xT978D8/ZtFceXxzsPwZEDvw==" - "resolved" "https://registry.npmjs.org/react-side-effect/-/react-side-effect-2.1.2.tgz" - "version" "2.1.2" +"react-shallow-renderer@^16.15.0": + "integrity" "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==" + "resolved" "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz" + "version" "16.15.0" + dependencies: + "object-assign" "^4.1.1" + "react-is" "^16.12.0 || ^17.0.0 || ^18.0.0" "react-slick@^0.29.0": "integrity" "sha512-TGdOKE+ZkJHHeC4aaoH85m8RnFyWqdqRfAGkhd6dirmATXMZWAxOpTLmw2Ll/jPTQ3eEG7ercFr/sbzdeYCJXA==" @@ -9957,6 +10804,15 @@ "invariant" "^2.2.4" "tslib" "^2.0.0" +"react-test-renderer@^18.2.0": + "integrity" "sha512-JWD+aQ0lh2gvh4NM3bBM42Kx+XybOxCpgYK7F8ugAlpaTSnWsX+39Z4XkOykGZAHrjwwTZT3x3KxswVWxHPUqA==" + "resolved" "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-18.2.0.tgz" + "version" "18.2.0" + dependencies: + "react-is" "^18.2.0" + "react-shallow-renderer" "^16.15.0" + "scheduler" "^0.23.0" + "react-toastify@^9.1.1": "integrity" "sha512-fPfb8ghtn/XMxw3LkxQBk3IyagNpF/LIKjOBflbexr2AWxAH1MJgvnESwEwBn9liLFXgTKWgBSdZpw9m4OTHTg==" "resolved" "https://registry.npmjs.org/react-toastify/-/react-toastify-9.1.3.tgz" @@ -9973,7 +10829,7 @@ "prop-types" "15.8.1" "youtube-player" "5.5.2" -"react@*", "react@^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16 || ^17 || ^18", "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.3.0 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17 || ^18", "react@^16.8.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.3 || ^17 || ^18", "react@^16.8.5 || ^17.0.0 || ^18.0.0", "react@^18.0.0", "react@^18.0.0 || ^17.0.1 || ^16.7.0", "react@^18.2.0", "react@>= 16", "react@>= 16.3.0", "react@>= 16.8.0", "react@>=0.14.1", "react@>=15", "react@>=16", "react@>=16.0.0", "react@>=16.11.0", "react@>=16.3.0", "react@>=16.4.0", "react@>=16.4.1", "react@>=16.6.0", "react@>=16.8", "react@>=16.8.0", "react@>=16.9.0", "react@0.14 || 15 || 16 || 17 || 18": +"react@*", "react@^0.14.0 || ^15.0.1 || ^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16 || ^17 || ^18", "react@^16.0.0 || ^17.0.0 || ^18.0.0", "react@^16.8 || ^17 || ^18", "react@^16.8.0 || ^17 || ^18", "react@^16.8.0 || ^17.0.0 || ^18.0.0", "react@^16.8.3 || ^17 || ^18", "react@^16.8.5 || ^17.0.0 || ^18.0.0", "react@^18.0.0", "react@^18.0.0 || ^17.0.1 || ^16.7.0", "react@^18.2.0", "react@>= 16", "react@>= 16.3.0", "react@>= 16.8.0", "react@>=0.14.1", "react@>=15", "react@>=16", "react@>=16.0.0", "react@>=16.11.0", "react@>=16.3.0", "react@>=16.4.0", "react@>=16.4.1", "react@>=16.6.0", "react@>=16.8", "react@>=16.8.0", "react@>=16.9.0", "react@0.14 || 15 || 16 || 17 || 18": "integrity" "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==" "resolved" "https://registry.npmjs.org/react/-/react-18.2.0.tgz" "version" "18.2.0" @@ -10070,10 +10926,10 @@ "resolved" "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz" "version" "0.13.11" -"regenerator-transform@^0.15.1": - "integrity" "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==" - "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz" - "version" "0.15.1" +"regenerator-transform@^0.15.2": + "integrity" "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==" + "resolved" "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz" + "version" "0.15.2" dependencies: "@babel/runtime" "^7.8.4" @@ -10191,6 +11047,11 @@ "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-1.1.1.tgz" "version" "1.1.1" +"resolve.exports@^2.0.0": + "integrity" "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==" + "resolved" "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz" + "version" "2.0.2" + "resolve@^1.1.7", "resolve@^1.14.2", "resolve@^1.19.0", "resolve@^1.20.0", "resolve@^1.22.1", "resolve@^1.22.2": "integrity" "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==" "resolved" "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz" @@ -10335,10 +11196,10 @@ "klona" "^2.0.6" "neo-async" "^2.6.2" -"sass@^1.3.0", "sass@^1.57.1": - "integrity" "sha512-NHpxIzN29MXvWiuswfc1W3I0N8SXBd8UR26WntmDlRYf0bSADnwnOjsyMZ3lMezSlArD33Vs3YFhp7dWvL770A==" - "resolved" "https://registry.npmjs.org/sass/-/sass-1.62.1.tgz" - "version" "1.62.1" +"sass@^1.3.0", "sass@^1.69.5": + "integrity" "sha512-qg2+UCJibLr2LCVOt3OlPhr/dqVHWOa9XtZf2OjbLs/T4VPSJ00udtgJxH3neXZm+QqX8B+3cU7RaLqp1iVfcQ==" + "resolved" "https://registry.npmjs.org/sass/-/sass-1.69.5.tgz" + "version" "1.69.5" dependencies: "chokidar" ">=3.0.0 <4.0.0" "immutable" "^4.0.0" @@ -10356,6 +11217,13 @@ dependencies: "xmlchars" "^2.2.0" +"saxes@^6.0.0": + "integrity" "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==" + "resolved" "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz" + "version" "6.0.0" + dependencies: + "xmlchars" "^2.2.0" + "scheduler@^0.23.0": "integrity" "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==" "resolved" "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz" @@ -10426,12 +11294,12 @@ dependencies: "node-forge" "^1" -"semver@^6.0.0", "semver@^6.1.1", "semver@^6.1.2", "semver@^6.3.0": - "integrity" "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz" - "version" "6.3.0" +"semver@^6.0.0", "semver@^6.3.0", "semver@^6.3.1": + "integrity" "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz" + "version" "6.3.1" -"semver@^7.3.2": +"semver@^7.3.2", "semver@^7.3.5": "integrity" "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==" "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" "version" "7.5.1" @@ -10445,24 +11313,31 @@ dependencies: "lru-cache" "^6.0.0" -"semver@^7.3.5": +"semver@^7.3.7": "integrity" "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==" "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" "version" "7.5.1" dependencies: "lru-cache" "^6.0.0" -"semver@^7.3.7": +"semver@^7.3.8": "integrity" "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==" "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" "version" "7.5.1" dependencies: "lru-cache" "^6.0.0" -"semver@^7.3.8": - "integrity" "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==" - "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz" - "version" "7.5.1" +"semver@^7.5.3": + "integrity" "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + "version" "7.5.4" + dependencies: + "lru-cache" "^6.0.0" + +"semver@^7.5.4": + "integrity" "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==" + "resolved" "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz" + "version" "7.5.4" dependencies: "lru-cache" "^6.0.0" @@ -10678,6 +11553,14 @@ "buffer-from" "^1.0.0" "source-map" "^0.6.0" +"source-map-support@0.5.13": + "integrity" "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==" + "resolved" "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz" + "version" "0.5.13" + dependencies: + "buffer-from" "^1.0.0" + "source-map" "^0.6.0" + "source-map-url@^0.4.0": "integrity" "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==" "resolved" "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz" @@ -10833,6 +11716,15 @@ "is-fullwidth-code-point" "^3.0.0" "strip-ansi" "^6.0.1" +"string-width@^4.2.3": + "integrity" "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==" + "resolved" "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" + "version" "4.2.3" + dependencies: + "emoji-regex" "^8.0.0" + "is-fullwidth-code-point" "^3.0.0" + "strip-ansi" "^6.0.1" + "string-width@^5.0.0": "integrity" "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==" "resolved" "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" @@ -11318,7 +12210,7 @@ dependencies: "commander" "2" -"tough-cookie@^4.0.0": +"tough-cookie@^4.0.0", "tough-cookie@^4.1.2": "integrity" "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==" "resolved" "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz" "version" "4.1.3" @@ -11342,6 +12234,13 @@ dependencies: "punycode" "^2.1.1" +"tr46@^3.0.0": + "integrity" "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==" + "resolved" "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" + "version" "3.0.0" + dependencies: + "punycode" "^2.1.1" + "traverse@0.6.6": "integrity" "sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==" "resolved" "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz" @@ -11357,6 +12256,20 @@ "resolved" "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" "version" "0.1.13" +"ts-jest@^29.1.1": + "integrity" "sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==" + "resolved" "https://registry.npmjs.org/ts-jest/-/ts-jest-29.1.1.tgz" + "version" "29.1.1" + dependencies: + "bs-logger" "0.x" + "fast-json-stable-stringify" "2.x" + "jest-util" "^29.0.0" + "json5" "^2.2.3" + "lodash.memoize" "4.x" + "make-error" "1.x" + "semver" "^7.5.3" + "yargs-parser" "^21.0.1" + "ts-loader@^9.4.2": "integrity" "sha512-n3hBnm6ozJYzwiwt5YRiJZkzktftRpMiBApHaJPoWLA+qetQBAXkHqCLM6nwSdRDimqVtA5ocIkcTRLMTt7yzA==" "resolved" "https://registry.npmjs.org/ts-loader/-/ts-loader-9.4.3.tgz" @@ -11367,6 +12280,25 @@ "micromatch" "^4.0.0" "semver" "^7.3.4" +"ts-node@^10.9.1", "ts-node@>=9.0.0": + "integrity" "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==" + "resolved" "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + "version" "10.9.1" + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + "acorn" "^8.4.1" + "acorn-walk" "^8.1.1" + "arg" "^4.1.0" + "create-require" "^1.1.0" + "diff" "^4.0.1" + "make-error" "^1.1.1" + "v8-compile-cache-lib" "^3.0.1" + "yn" "3.1.1" + "tsconfig-paths@^3.14.1": "integrity" "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==" "resolved" "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz" @@ -11406,13 +12338,6 @@ dependencies: "prelude-ls" "^1.2.1" -"type-check@~0.3.2": - "integrity" "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==" - "resolved" "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz" - "version" "0.3.2" - dependencies: - "prelude-ls" "~1.1.2" - "type-detect@4.0.8": "integrity" "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==" "resolved" "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz" @@ -11457,7 +12382,7 @@ dependencies: "is-typedarray" "^1.0.0" -"typescript@*", "typescript@^3.2.1 || ^4", "typescript@^4.9.4", "typescript@>= 2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta": +"typescript@*", "typescript@^3.2.1 || ^4", "typescript@^4.9.4", "typescript@>= 2.7", "typescript@>=2.7", "typescript@>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta", "typescript@>=4.3 <6": "integrity" "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==" "resolved" "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz" "version" "4.9.5" @@ -11527,10 +12452,10 @@ "resolved" "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz" "version" "1.2.0" -"update-browserslist-db@^1.0.11": - "integrity" "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==" - "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz" - "version" "1.0.11" +"update-browserslist-db@^1.0.13": + "integrity" "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==" + "resolved" "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz" + "version" "1.0.13" dependencies: "escalade" "^3.1.1" "picocolors" "^1.0.0" @@ -11584,6 +12509,11 @@ "detect-node-es" "^1.1.0" "tslib" "^2.0.0" +"use-sync-external-store@^1.2.0": + "integrity" "sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==" + "resolved" "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz" + "version" "1.2.0" + "util-deprecate@^1.0.1", "util-deprecate@^1.0.2", "util-deprecate@~1.0.1": "integrity" "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" "resolved" "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" @@ -11614,6 +12544,11 @@ "resolved" "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" "version" "8.3.2" +"v8-compile-cache-lib@^3.0.1": + "integrity" "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" + "resolved" "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + "version" "3.0.1" + "v8-to-istanbul@^8.1.0": "integrity" "sha512-FGtKtv3xIpR6BYhvgH8MI/y78oT7d8Au3ww4QIxymrCtZEh5b8gCw2siywE+puhEmuWKDtmfrvF5UlB298ut3w==" "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-8.1.1.tgz" @@ -11623,6 +12558,15 @@ "convert-source-map" "^1.6.0" "source-map" "^0.7.3" +"v8-to-istanbul@^9.0.1": + "integrity" "sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg==" + "resolved" "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.3.tgz" + "version" "9.1.3" + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + "convert-source-map" "^2.0.0" + "vary@~1.1.2": "integrity" "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==" "resolved" "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" @@ -11651,7 +12595,14 @@ dependencies: "xml-name-validator" "^3.0.0" -"walker@^1.0.7": +"w3c-xmlserializer@^4.0.0": + "integrity" "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==" + "resolved" "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz" + "version" "4.0.0" + dependencies: + "xml-name-validator" "^4.0.0" + +"walker@^1.0.7", "walker@^1.0.8": "integrity" "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==" "resolved" "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz" "version" "1.0.8" @@ -11688,6 +12639,11 @@ "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-6.1.0.tgz" "version" "6.1.0" +"webidl-conversions@^7.0.0": + "integrity" "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" + "resolved" "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" + "version" "7.0.0" + "webpack-cli@^5.0.1", "webpack-cli@5.x.x": "integrity" "sha512-MTuk7NUMvEHQUSXCpvUrF1q2p0FJS40dPFfqQvG3jTWcgv/8plBNz2Kv2HXZiLGPnfmSAA5uCtCILO1JBmmkfw==" "resolved" "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.3.tgz" @@ -11842,6 +12798,13 @@ dependencies: "iconv-lite" "0.4.24" +"whatwg-encoding@^2.0.0": + "integrity" "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==" + "resolved" "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz" + "version" "2.0.0" + dependencies: + "iconv-lite" "0.6.3" + "whatwg-fetch@^3.6.2": "integrity" "sha512-bJlen0FcuU/0EMLrdbJ7zOnW6ITZLrZMIarMUVmdKtsGvZna8vxKYaexICWPfZ8qwf9fzNq+UEIZrnSaApt6RA==" "resolved" "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.2.tgz" @@ -11852,6 +12815,19 @@ "resolved" "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz" "version" "2.3.0" +"whatwg-mimetype@^3.0.0": + "integrity" "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==" + "resolved" "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz" + "version" "3.0.0" + +"whatwg-url@^11.0.0": + "integrity" "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==" + "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz" + "version" "11.0.0" + dependencies: + "tr46" "^3.0.0" + "webidl-conversions" "^7.0.0" + "whatwg-url@^7.0.0": "integrity" "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==" "resolved" "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" @@ -11922,7 +12898,7 @@ "resolved" "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz" "version" "2.0.1" -"word-wrap@^1.2.3", "word-wrap@~1.2.3": +"word-wrap@^1.2.3": "integrity" "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" "resolved" "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz" "version" "1.2.3" @@ -12129,21 +13105,34 @@ "signal-exit" "^3.0.2" "typedarray-to-buffer" "^3.1.5" +"write-file-atomic@^4.0.2": + "integrity" "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==" + "resolved" "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz" + "version" "4.0.2" + dependencies: + "imurmurhash" "^0.1.4" + "signal-exit" "^3.0.7" + "ws@^7.4.6": "integrity" "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==" "resolved" "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz" "version" "7.5.9" -"ws@^8.13.0": - "integrity" "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==" - "resolved" "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz" - "version" "8.13.0" +"ws@^8.11.0", "ws@^8.13.0": + "integrity" "sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==" + "resolved" "https://registry.npmjs.org/ws/-/ws-8.14.2.tgz" + "version" "8.14.2" "xml-name-validator@^3.0.0": "integrity" "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==" "resolved" "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz" "version" "3.0.0" +"xml-name-validator@^4.0.0": + "integrity" "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==" + "resolved" "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz" + "version" "4.0.0" + "xml2js@0.4.17": "integrity" "sha512-1O7wk/NTQN0UEOItIYTxK4qP4sMUVU60MbF4Nj0a8jd6eebMXOicVI/KFOEsYKKH4uBpx6XG9ZGZctXK5rtO5Q==" "resolved" "https://registry.npmjs.org/xml2js/-/xml2js-0.4.17.tgz" @@ -12199,6 +13188,11 @@ "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz" "version" "20.2.9" +"yargs-parser@^21.0.1", "yargs-parser@^21.1.1": + "integrity" "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" + "resolved" "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz" + "version" "21.1.1" + "yargs@^16.2.0": "integrity" "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==" "resolved" "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz" @@ -12212,11 +13206,29 @@ "y18n" "^5.0.5" "yargs-parser" "^20.2.2" +"yargs@^17.3.1": + "integrity" "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==" + "resolved" "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz" + "version" "17.7.2" + dependencies: + "cliui" "^8.0.1" + "escalade" "^3.1.1" + "get-caller-file" "^2.0.5" + "require-directory" "^2.1.1" + "string-width" "^4.2.3" + "y18n" "^5.0.5" + "yargs-parser" "^21.1.1" + "yet-another-react-lightbox@^2.2.7": "integrity" "sha512-P03quWhfmmqvgraMPxJybiwlwtCnHeO1oCDjJoyDIU/mif0AzJQR1ZAYMCAgNdV1jrJNovDfN3LjWP5L5QzmyA==" "resolved" "https://registry.npmjs.org/yet-another-react-lightbox/-/yet-another-react-lightbox-2.6.2.tgz" "version" "2.6.2" +"yn@3.1.1": + "integrity" "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" + "resolved" "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + "version" "3.1.1" + "yocto-queue@^0.1.0": "integrity" "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==" "resolved" "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz" From 0ede3768dbe0e42e65f9cef67e71f453cc49deca Mon Sep 17 00:00:00 2001 From: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Date: Mon, 15 Jan 2024 12:47:09 +0200 Subject: [PATCH 12/15] 1097 rq text editor fix validation of texts for the max allowable length (#1107) * Fixed bug with main/additional texts * Fixed improper length validation in modals (ReactQuill editor) * Removed the inaccuracy in the editor * Added ability to press Ctrl+A --- .../EditorUtilities/quillUtils.utility.ts | 8 +++----- .../components/Editor/QEditor.component.tsx | 17 +++++++++++++---- .../JobsPage/JobsModal/JobsModal.component.tsx | 4 +++- .../ForFansAdminModal.component.tsx | 4 +++- .../MainNewStreetcode.component.tsx | 8 ++++++-- .../NewsPage/NewsModal/NewsModal.component.tsx | 4 +++- 6 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/app/common/components/Editor/EditorUtilities/quillUtils.utility.ts b/src/app/common/components/Editor/EditorUtilities/quillUtils.utility.ts index 40333e01f..9e3b17323 100644 --- a/src/app/common/components/Editor/EditorUtilities/quillUtils.utility.ts +++ b/src/app/common/components/Editor/EditorUtilities/quillUtils.utility.ts @@ -7,10 +7,8 @@ export const setQuillEditorContent = (currentEditor: QuillEditor | null, text: s } }; -export const checkQuillEditorTextLength = (currentEditor: QuillEditor | null, maxChars: number) => { - if (currentEditor && currentEditor.editor) { - if (currentEditor.editor.getText().length > maxChars) { - throw new Error(); - } +export const checkQuillEditorTextLength = (counter: number, maxChars: number) => { + if (counter > maxChars) { + throw new Error(); } }; diff --git a/src/app/common/components/Editor/QEditor.component.tsx b/src/app/common/components/Editor/QEditor.component.tsx index f8e383107..f389adab7 100644 --- a/src/app/common/components/Editor/QEditor.component.tsx +++ b/src/app/common/components/Editor/QEditor.component.tsx @@ -12,15 +12,16 @@ import LinkHandler from './EditorExtensions/LinkHandler'; interface EditorProps { qRef: React.RefObject, - value: string; + value: string, onChange: (html: string) => void; maxChars: number, initialVal?: string, - selectionChange?: (selection: string) => void; + selectionChange?: (selection: string) => void, + onCharacterCountChange?: (count: number) => void, } const Editor: React.FC = ({ - qRef, value, onChange, maxChars, initialVal, selectionChange, + qRef, value, onChange, maxChars, initialVal, selectionChange, onCharacterCountChange = () => {}, }) => { const [val, setVal] = useState(value); const [rawText, setRawText] = useState(removeHtmlTags(value) ?? ''); @@ -49,6 +50,10 @@ const Editor: React.FC = ({ } }, [characterCount, maxChars]); + useEffect(() => { + onCharacterCountChange(characterCount); + }, [characterCount, onCharacterCountChange]); + const handleOnChange = (html: string) => { onChange(html); setVal(html); @@ -87,7 +92,11 @@ const Editor: React.FC = ({ const handleKeyDown = (e: React.KeyboardEvent) => { if (characterCount >= maxChars) { setValidateDescription(true); - if (!availableButtons.has(e.key) && quillRef.current?.editor?.getSelection()?.length === 0) { + const ctrlAIsPressed = (e.ctrlKey || e.metaKey) && e.key.toLowerCase() === 'a'; + const isSelectionEmpty = quillRef.current?.editor?.getSelection()?.length === 0; + const disableKeysPressing = !availableButtons.has(e.key) && isSelectionEmpty && !ctrlAIsPressed; + + if (disableKeysPressing) { e.preventDefault(); } } diff --git a/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx b/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx index 549c608fc..b1c14b7a4 100644 --- a/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx +++ b/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx @@ -32,6 +32,7 @@ const JobsModal = ({ open, setOpen, currentId }: Props) => { }; const textEditor = useRef(null); const [current, setCurrent] = useState(); + const [editorCharacterCount, setEditorCharacterCount] = useState(0); const [form] = Form.useForm(); const [storedJob, setStoredJob] = useState(); const emptyJob: Job = { @@ -76,7 +77,7 @@ const JobsModal = ({ open, setOpen, currentId }: Props) => { const handleSave = async () => { try { const values = await form.validateFields(); - checkQuillEditorTextLength(textEditor?.current, maxLengths.maxLenghtVacancyDesc); + checkQuillEditorTextLength(editorCharacterCount, maxLengths.maxLenghtVacancyDesc); const { title, status, description, salary } = values; const isActive = status === 'setActive'; @@ -168,6 +169,7 @@ const JobsModal = ({ open, setOpen, currentId }: Props) => { value={current?.description ?? ''} onChange={handleEditorChange} maxChars={maxLengths.maxLenghtVacancyDesc} + onCharacterCountChange={setEditorCharacterCount} /> (false); const [textIsChanged, setTextIsChanged] = useState(false); + const [editorCharacterCount, setEditorCharacterCount] = useState(0); const maxLength = character_limit || 10000; message.config({ @@ -218,7 +219,7 @@ const ForFansModal = ({ const handleOk = async () => { try { await form.validateFields(); - checkQuillEditorTextLength(editorRef?.current, maxLength); + checkQuillEditorTextLength(editorCharacterCount, maxLength); if (validateTextChange()) { form.submit(); message.success('Категорію для фанатів успішно додано!'); @@ -309,6 +310,7 @@ const ForFansModal = ({ value={editorContent} onChange={setEditorContent} maxChars={maxLength} + onCharacterCountChange={setEditorCharacterCount} /> {!textIsPresent && textIsChanged && (

Введіть текст

diff --git a/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx b/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx index 505c1b6d9..f1be1a9e4 100644 --- a/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx +++ b/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx @@ -27,6 +27,7 @@ import StreetcodeArtApi from '@/app/api/media/streetcode-art.api'; import StreetcodesApi from '@/app/api/streetcode/streetcodes.api'; import TransactionLinksApi from '@/app/api/transactions/transactLinks.api'; import FRONTEND_ROUTES from '@/app/common/constants/frontend-routes.constants'; +import removeHtmlTags from '@/app/common/utils/removeHtmlTags.utility'; import QUILL_TEXTS_LENGTH from '@/features/AdminPage/NewStreetcode/TextBlock/TextLengthConstants/textMaxLength.constant'; import Subtitle, { SubtitleCreate } from '@/models/additional-content/subtitles.model'; import { StreetcodeTag, StreetcodeTagUpdate } from '@/models/additional-content/tag.model'; @@ -129,8 +130,11 @@ const NewStreetcode = () => { }; const validateQuillTexts = (mainText: string | undefined, additionalText: string | undefined) => { - const tooLongMainText = mainText && mainText.length > QUILL_TEXTS_LENGTH.mainTextMaxLength; - const tooLongAdditionalText = additionalText && additionalText.length > QUILL_TEXTS_LENGTH.additionalTextMaxLength; + const mainTextWithoutHtml = mainText ? removeHtmlTags(mainText) : ''; + const additionalTextWithoutHtml = additionalText ? removeHtmlTags(additionalText) : ''; + + const tooLongMainText = mainText && mainTextWithoutHtml.length > QUILL_TEXTS_LENGTH.mainTextMaxLength; + const tooLongAdditionalText = additionalText && additionalTextWithoutHtml.length > QUILL_TEXTS_LENGTH.additionalTextMaxLength; if (tooLongMainText || tooLongAdditionalText) { throw new Error('The value is too long either in the main text or in the additional text'); diff --git a/src/features/AdminPage/NewsPage/NewsModal/NewsModal.component.tsx b/src/features/AdminPage/NewsPage/NewsModal/NewsModal.component.tsx index e3273e126..9f4d81a57 100644 --- a/src/features/AdminPage/NewsPage/NewsModal/NewsModal.component.tsx +++ b/src/features/AdminPage/NewsPage/NewsModal/NewsModal.component.tsx @@ -63,6 +63,7 @@ const NewsModal: React.FC<{ const fillInAllFieldsMessage = "Будь ласка, заповніть всі обов'язкові поля правильно"; const [actionSuccess, setActionSuccess] = useState(false); const [waitingForApiResponse, setWaitingForApiResponse] = useState(false); + const [editorCharacterCount, setEditorCharacterCount] = useState(0); message.config({ top: 100, @@ -166,7 +167,7 @@ const NewsModal: React.FC<{ const handleOk = async () => { try { await form.validateFields(); - checkQuillEditorTextLength(editorRef?.current, sizeLimit); + checkQuillEditorTextLength(editorCharacterCount, sizeLimit); if (handleTextChange()) { setWaitingForApiResponse(true); await form.submit(); @@ -297,6 +298,7 @@ const NewsModal: React.FC<{ value={data} onChange={handleUpdate} maxChars={sizeLimit} + onCharacterCountChange={setEditorCharacterCount} /> {!textIsPresent && textIsChanged && (

Введіть текст

From 701d747be1afa7606f81ce0ebaddf73ff4d2a329 Mon Sep 17 00:00:00 2001 From: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Date: Mon, 15 Jan 2024 12:49:20 +0200 Subject: [PATCH 13/15] Fixed indents in news page (#1099) * Fixed indents in news page * Fixed bug with indents for tinymce texts * Fixed bug with improper indents * Renamed utility * Fixed styles with indents - for fans modal --- src/app/common/components/Editor/QEditor.component.tsx | 9 +++++++-- .../components/modals/Sources/SourcesModal.styles.scss | 2 +- src/app/common/utils/removeHtmlTags.utility.ts | 4 ++-- src/features/AdditionalPages/NewsPage/News.styles.scss | 6 ++++-- .../AdminPage/JobsPage/JobsModal/JobsModal.component.tsx | 2 +- .../ForFansAdminModal/ForFansAdminModal.component.tsx | 4 ++-- .../AdminPage/NewsPage/NewsModal/NewsModal.component.tsx | 2 +- 7 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/app/common/components/Editor/QEditor.component.tsx b/src/app/common/components/Editor/QEditor.component.tsx index f389adab7..7f025bb4a 100644 --- a/src/app/common/components/Editor/QEditor.component.tsx +++ b/src/app/common/components/Editor/QEditor.component.tsx @@ -3,7 +3,7 @@ import './QEditor.styles.scss'; import React, { useEffect, useRef, useState } from 'react'; import ReactQuill, { UnprivilegedEditor } from 'react-quill'; -import removeHtmlTags from '@app/common/utils/removeHtmlTags.utility'; +import { refactorIndentsHtml, removeHtmlTags } from '@app/common/utils/removeHtmlTags.utility'; import { Sources } from 'quill'; import 'react-quill/dist/quill.snow.css'; @@ -23,7 +23,8 @@ interface EditorProps { const Editor: React.FC = ({ qRef, value, onChange, maxChars, initialVal, selectionChange, onCharacterCountChange = () => {}, }) => { - const [val, setVal] = useState(value); + const indentedValue = refactorIndentsHtml(value); + const [val, setVal] = useState(indentedValue); const [rawText, setRawText] = useState(removeHtmlTags(value) ?? ''); const [characterCount, setCharacterCount] = useState(rawText.length ?? 0); const [validateDescription, setValidateDescription] = useState(false); @@ -38,6 +39,10 @@ const Editor: React.FC = ({ }; useEffect(() => { + if (value.includes('\n')) { + const preservedIndents = refactorIndentsHtml(value); + setVal(preservedIndents); + } const valueWithoutHtml = removeHtmlTags(value); setRawText(valueWithoutHtml); }, [value]); diff --git a/src/app/common/components/modals/Sources/SourcesModal.styles.scss b/src/app/common/components/modals/Sources/SourcesModal.styles.scss index c4788befb..2bdca321d 100644 --- a/src/app/common/components/modals/Sources/SourcesModal.styles.scss +++ b/src/app/common/components/modals/Sources/SourcesModal.styles.scss @@ -59,10 +59,10 @@ $CancelBtn: "/src/assets/images/utils/Cancel_btn.svg"; .mainContentContainer { height: pxToRem(570px); - @include mut.flexed($direction: column, $gap: 10px); @include mut.rem-margined(30px, 10px, 30px, 30px); padding-right: pxToRem(10px); overflow-y: scroll; + white-space: pre-line; font-weight: 300; font-size: 15px; diff --git a/src/app/common/utils/removeHtmlTags.utility.ts b/src/app/common/utils/removeHtmlTags.utility.ts index 42783deb8..08156e434 100644 --- a/src/app/common/utils/removeHtmlTags.utility.ts +++ b/src/app/common/utils/removeHtmlTags.utility.ts @@ -1,6 +1,6 @@ -const removeHtmlTags = (content: string) => content.replace(/<[^>]*>| /g, (match) => { +export const removeHtmlTags = (content: string) => content.replace(/<[^>]*>| /g, (match) => { if (match === ' ') return ' '; return ''; }); -export default removeHtmlTags; +export const refactorIndentsHtml = (content: string) => content.replace(/\n/g, '


'); diff --git a/src/features/AdditionalPages/NewsPage/News.styles.scss b/src/features/AdditionalPages/NewsPage/News.styles.scss index 186faef7a..0243d0703 100644 --- a/src/features/AdditionalPages/NewsPage/News.styles.scss +++ b/src/features/AdditionalPages/NewsPage/News.styles.scss @@ -45,10 +45,9 @@ .newsTextArea { @include mut.with-font($font-family: ft.$roboto-font, $font-weight: 300, $font-size: 20px); overflow-wrap: break-word; + white-space: pre-line; p { - padding-bottom: f.pxToRem(24px); - strong { @include mut.with-font($font-family: ft.$closer-text-font, $font-weight: 500); } @@ -79,6 +78,7 @@ @include mut.with-font($font-family: ft.$roboto-font, $font-weight: 500, $font-size: 20px); @include mut.flexed($justify-content: space-between, $align-items: center); line-height: f.pxToRem(14px); + padding-top: f.pxToRem(24px); text-align: center; text-decoration: underline; text-decoration-color: c.$dark-red-color; @@ -155,6 +155,7 @@ } .newsTextArea { + white-space: pre-line; @include mut.with-font($font-family: ft.$roboto-font, $font-weight: 300, $font-size: 20px); } @@ -199,6 +200,7 @@ } .newsTextArea { + white-space: pre-line; @include mut.with-font($font-family: ft.$roboto-font, $font-weight: 300, $font-size: 16px); } diff --git a/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx b/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx index b1c14b7a4..39ef80b76 100644 --- a/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx +++ b/src/features/AdminPage/JobsPage/JobsModal/JobsModal.component.tsx @@ -48,8 +48,8 @@ const JobsModal = ({ open, setOpen, currentId }: Props) => { if (open && currentId !== 0) { try { const currentJob = await JobApi.getById(currentId); - setCurrent(currentJob); setQuillEditorContent(textEditor.current, currentJob?.description); + setCurrent(currentJob); form.setFieldsValue({ title: currentJob?.title, status: currentJob?.status ? 'setActive' : 'setInactive', diff --git a/src/features/AdminPage/NewStreetcode/ForFansBlock/ForFansAdminModal/ForFansAdminModal.component.tsx b/src/features/AdminPage/NewStreetcode/ForFansBlock/ForFansAdminModal/ForFansAdminModal.component.tsx index 3afb13d79..5c68a783d 100644 --- a/src/features/AdminPage/NewStreetcode/ForFansBlock/ForFansAdminModal/ForFansAdminModal.component.tsx +++ b/src/features/AdminPage/NewStreetcode/ForFansBlock/ForFansAdminModal/ForFansAdminModal.component.tsx @@ -98,6 +98,7 @@ const ForFansModal = ({ setTextIsPresent(false); setTextIsChanged(false); setOpen(false); + editorRef.current?.editor?.setText(''); }; async function fetchData() { @@ -109,8 +110,8 @@ const ForFansModal = ({ categoryUpdate.current = sourceCreateUpdateStreetcode.ElementToUpdate; const categoryText = categoryUpdate?.current?.text; if (categoryUpdate.current && open) { - setEditorContent(categoryText ?? ''); setQuillEditorContent(editorRef.current, categoryText ?? ''); + setEditorContent(categoryText ?? ''); form.setFieldValue('category', categoryUpdate.current.sourceLinkCategoryId); } else { categoryUpdate.current = null; @@ -142,7 +143,6 @@ const ForFansModal = ({ isEditedCategoryPersisted: boolean, ) => { if (!isEditedCategoryPersisted) { - console.log(editorContent); sourceCreateUpdateStreetcode .addSourceCategoryContent({ id: getNewMinNegativeId(sourceCreateUpdateStreetcode.streetcodeCategoryContents.map((x) => x.id)), diff --git a/src/features/AdminPage/NewsPage/NewsModal/NewsModal.component.tsx b/src/features/AdminPage/NewsPage/NewsModal/NewsModal.component.tsx index 9f4d81a57..a4d5e0a05 100644 --- a/src/features/AdminPage/NewsPage/NewsModal/NewsModal.component.tsx +++ b/src/features/AdminPage/NewsPage/NewsModal/NewsModal.component.tsx @@ -114,8 +114,8 @@ const NewsModal: React.FC<{ }, ] : [], }); - setQuillEditorContent(editorRef.current, newsItem.text); + setData(newsItem.text); } else { imageId.current = 0; image.current = undefined; From 03d6dd32ca4895e9bdd506c4b71435ae03028912 Mon Sep 17 00:00:00 2001 From: Vitalii <98163405+MementoMorj@users.noreply.github.com> Date: Mon, 15 Jan 2024 12:50:51 +0200 Subject: [PATCH 14/15] try to fix donate button (#1106) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update master 2 (#1105) * Change amount of pictures for different size of screen (#1096) * Change amount of pictures for different size of sreenview * - change breakpoint to standard 768 --------- Co-authored-by: Oleh-Kril * Gmail is opened in new tab (#1087) * - refactor to open in a new tab (#1093) * fix modals closing (#1085) * fix modals closing * separate arrow function from props --------- Co-authored-by: Oleh-Kril * New editor v2 (#1086) * Initial react-quill config (news/main streetcode text). Needs cleaning & refactoring * Added quill everywhere, needs refactoring * cleaned code * Fixed text updating in ForFans admin block * Added utility to convert content to quill delta * Added validation when empty text fields in modals * Fixed bug with max length quill * Added the impossibility of saving a record with improper length * Cleaned code * Refactoring of editor * Removed package-lock.json changes from PR * Dynamics meta tags (#1095) * modify index.html * add server and configure metadata for news * add dynamic metatags for streetcodes * moved news file to another folder * run linter * add update for news (not completed) * adjust put and delete * handle delete and update of streetcode and news * add part of tests * -add api error filter * - cover with tests & refactor * - refactor code to separate logic and reduce code complexity * - test get and update * - write tests for delete - refactor to use constants - add all urls-to-omit * fix comments * fix comments: - refactor to use destructuring assigment - remove comments - move some lines to constants * remove stageback url * Update develop (#1102) * Develop (#1084) * Hide a slide outline * fix news modal from closing when image is not created (#1061) * - getting news from cache - green notification on news modal success (#1063) * fix scrolling to the main text (#1075) * remove react helmet + add banner (#1072) * Fixed progress bar visibility and popups (#1070) * Fixed progress bar visibility and popups * add animation transition to make it smoother --------- Co-authored-by: Oleh-Kril * Fix issue 847 Fix Url Ref (#1068) * Fix PrivatePolicy streetcode reference * Change ref to https://streetcode.com.ua * Add some fix * Fixed the amount buttons and input in donates modal (#1060) * Fix news image on safari (#1058) * refactor newsImage styles * add max-height * Fix for fans category editing (#1037) * Fixed unavalaible categories on new streetcode * Fixed category editing of for fans categories * Made a mobile ornament with varying lengths for screens with a width … (#1030) * Made a mobile ornament with varying lengths for screens with a width of 480 pixels or less * adjust margins to correspond design --------- Co-authored-by: Oleh-Kril * Fixed Issue 870, 871 (#1025) * Add red * to Timeline date field and vanish an error * Fix logic when error message shoud vanish * fix data check in timelineAdminModal * set fixed position for arrows in connection(streetcode) (#1029) * set fixed position for arrows in connection(streetcode) * adjust position of arrows --------- Co-authored-by: Oleh-Kril * fix our partners title (#1022) now it takes only 1 row instead of 2 * Refactor teams modal & list (#1069) * Refactor teams modal & list * remove commented code * Jest config (#1028) * Configured Jest * Configured Jest * Adding/modifying code spliting for dev and prod setups (#1041) * modify_bundle_split_for_dev_setup * adding_bundle_split_to_prod_condig * adding_entry_to_gitignore_file * adding_empty_line * adjust admin page styles (#1066) * Refactor partner modal (#1073) * refactor code part 1 - reduce code amount * refactor image uploading logic to make it correct * Minor changes and improvements (#1042) * adding_check-node-version_lib_and engine_configs * update_package-lock_and_yarn-lock_files * edit_readme_file --------- Co-authored-by: Oleh-Kril * Issue 604 (Change padding in main text field) (#1077) * Change padding in the text field * adjust on phone --------- Co-authored-by: Oleh-Kril * fix related events modal (#1080) * deleted scroll up on mobile and tablet * update components * add loading all tags * update streetcode components * update tags modal * update tags slider * delete streetcodeid * update related figure * - refactor code (no business logic changes) (#1065) * run linter (#1081) * revert_resolve_path_for_dev_build * revert_resolve_path_for_prod_build --------- Co-authored-by: ValDekh Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Bohdan Bozhyk <53005363+Adeodonne@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Co-authored-by: mykola-krai <133663112+mykola-krai@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Co-authored-by: Rominos7 * Update master (#1101) * Change amount of pictures for different size of screen (#1096) * Change amount of pictures for different size of sreenview * - change breakpoint to standard 768 --------- Co-authored-by: Oleh-Kril * Gmail is opened in new tab (#1087) * - refactor to open in a new tab (#1093) * fix modals closing (#1085) * fix modals closing * separate arrow function from props --------- Co-authored-by: Oleh-Kril * New editor v2 (#1086) * Initial react-quill config (news/main streetcode text). Needs cleaning & refactoring * Added quill everywhere, needs refactoring * cleaned code * Fixed text updating in ForFans admin block * Added utility to convert content to quill delta * Added validation when empty text fields in modals * Fixed bug with max length quill * Added the impossibility of saving a record with improper length * Cleaned code * Refactoring of editor * Removed package-lock.json changes from PR * Dynamics meta tags (#1095) * modify index.html * add server and configure metadata for news * add dynamic metatags for streetcodes * moved news file to another folder * run linter * add update for news (not completed) * adjust put and delete * handle delete and update of streetcode and news * add part of tests * -add api error filter * - cover with tests & refactor * - refactor code to separate logic and reduce code complexity * - test get and update * - write tests for delete - refactor to use constants - add all urls-to-omit * fix comments * fix comments: - refactor to use destructuring assigment - remove comments - move some lines to constants * remove stageback url --------- Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> --------- Co-authored-by: ValDekh Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Bohdan Bozhyk <53005363+Adeodonne@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Co-authored-by: mykola-krai <133663112+mykola-krai@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Co-authored-by: Rominos7 * - temporary remove AgentFrontend (#1103) * Update develop (#1102) * Develop (#1084) * Hide a slide outline * fix news modal from closing when image is not created (#1061) * - getting news from cache - green notification on news modal success (#1063) * fix scrolling to the main text (#1075) * remove react helmet + add banner (#1072) * Fixed progress bar visibility and popups (#1070) * Fixed progress bar visibility and popups * add animation transition to make it smoother --------- Co-authored-by: Oleh-Kril * Fix issue 847 Fix Url Ref (#1068) * Fix PrivatePolicy streetcode reference * Change ref to https://streetcode.com.ua * Add some fix * Fixed the amount buttons and input in donates modal (#1060) * Fix news image on safari (#1058) * refactor newsImage styles * add max-height * Fix for fans category editing (#1037) * Fixed unavalaible categories on new streetcode * Fixed category editing of for fans categories * Made a mobile ornament with varying lengths for screens with a width … (#1030) * Made a mobile ornament with varying lengths for screens with a width of 480 pixels or less * adjust margins to correspond design --------- Co-authored-by: Oleh-Kril * Fixed Issue 870, 871 (#1025) * Add red * to Timeline date field and vanish an error * Fix logic when error message shoud vanish * fix data check in timelineAdminModal * set fixed position for arrows in connection(streetcode) (#1029) * set fixed position for arrows in connection(streetcode) * adjust position of arrows --------- Co-authored-by: Oleh-Kril * fix our partners title (#1022) now it takes only 1 row instead of 2 * Refactor teams modal & list (#1069) * Refactor teams modal & list * remove commented code * Jest config (#1028) * Configured Jest * Configured Jest * Adding/modifying code spliting for dev and prod setups (#1041) * modify_bundle_split_for_dev_setup * adding_bundle_split_to_prod_condig * adding_entry_to_gitignore_file * adding_empty_line * adjust admin page styles (#1066) * Refactor partner modal (#1073) * refactor code part 1 - reduce code amount * refactor image uploading logic to make it correct * Minor changes and improvements (#1042) * adding_check-node-version_lib_and engine_configs * update_package-lock_and_yarn-lock_files * edit_readme_file --------- Co-authored-by: Oleh-Kril * Issue 604 (Change padding in main text field) (#1077) * Change padding in the text field * adjust on phone --------- Co-authored-by: Oleh-Kril * fix related events modal (#1080) * deleted scroll up on mobile and tablet * update components * add loading all tags * update streetcode components * update tags modal * update tags slider * delete streetcodeid * update related figure * - refactor code (no business logic changes) (#1065) * run linter (#1081) * revert_resolve_path_for_dev_build * revert_resolve_path_for_prod_build --------- Co-authored-by: ValDekh Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Bohdan Bozhyk <53005363+Adeodonne@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Co-authored-by: mykola-krai <133663112+mykola-krai@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Co-authored-by: Rominos7 * Update master (#1101) * Change amount of pictures for different size of screen (#1096) * Change amount of pictures for different size of sreenview * - change breakpoint to standard 768 --------- Co-authored-by: Oleh-Kril * Gmail is opened in new tab (#1087) * - refactor to open in a new tab (#1093) * fix modals closing (#1085) * fix modals closing * separate arrow function from props --------- Co-authored-by: Oleh-Kril * New editor v2 (#1086) * Initial react-quill config (news/main streetcode text). Needs cleaning & refactoring * Added quill everywhere, needs refactoring * cleaned code * Fixed text updating in ForFans admin block * Added utility to convert content to quill delta * Added validation when empty text fields in modals * Fixed bug with max length quill * Added the impossibility of saving a record with improper length * Cleaned code * Refactoring of editor * Removed package-lock.json changes from PR * Dynamics meta tags (#1095) * modify index.html * add server and configure metadata for news * add dynamic metatags for streetcodes * moved news file to another folder * run linter * add update for news (not completed) * adjust put and delete * handle delete and update of streetcode and news * add part of tests * -add api error filter * - cover with tests & refactor * - refactor code to separate logic and reduce code complexity * - test get and update * - write tests for delete - refactor to use constants - add all urls-to-omit * fix comments * fix comments: - refactor to use destructuring assigment - remove comments - move some lines to constants * remove stageback url --------- Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> --------- Co-authored-by: ValDekh Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Bohdan Bozhyk <53005363+Adeodonne@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Co-authored-by: mykola-krai <133663112+mykola-krai@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Co-authored-by: Rominos7 * - temporary remove AgentFrontend (#1103) --------- Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Co-authored-by: ValDekh Co-authored-by: Bohdan Bozhyk <53005363+Adeodonne@users.noreply.github.com> Co-authored-by: mykola-krai <133663112+mykola-krai@users.noreply.github.com> Co-authored-by: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Co-authored-by: Rominos7 * try to fix donate button --------- Co-authored-by: Oleh-Kril <91199925+Oleh-Kril@users.noreply.github.com> Co-authored-by: Valerii Dekhtiyk <61435019+ValDekh@users.noreply.github.com> Co-authored-by: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Co-authored-by: BohdanBybliv <125794488+BohdanBybliv@users.noreply.github.com> Co-authored-by: ValDekh Co-authored-by: Bohdan Bozhyk <53005363+Adeodonne@users.noreply.github.com> Co-authored-by: mykola-krai <133663112+mykola-krai@users.noreply.github.com> Co-authored-by: Roman Serhiychuk <60231618+Rominos7@users.noreply.github.com> Co-authored-by: Rominos7 --- .../common/components/modals/Donates/DonatesModal.component.tsx | 2 +- .../SupportUsPage/components/DonationBlock.component.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/app/common/components/modals/Donates/DonatesModal.component.tsx b/src/app/common/components/modals/Donates/DonatesModal.component.tsx index 7831acf54..c3233291c 100644 --- a/src/app/common/components/modals/Donates/DonatesModal.component.tsx +++ b/src/app/common/components/modals/Donates/DonatesModal.component.tsx @@ -75,7 +75,7 @@ const DonatesModal = () => { Promise.all([DonationApi.create(donation)]) .then((response) => { - window.open(response[0].pageUrl); + window.location.assign(response[0].pageUrl); }) .catch(); } diff --git a/src/features/AdditionalPages/SupportUsPage/components/DonationBlock.component.tsx b/src/features/AdditionalPages/SupportUsPage/components/DonationBlock.component.tsx index 3eab500a6..1faca9f77 100644 --- a/src/features/AdditionalPages/SupportUsPage/components/DonationBlock.component.tsx +++ b/src/features/AdditionalPages/SupportUsPage/components/DonationBlock.component.tsx @@ -64,7 +64,7 @@ const DonationBlock = () => { try { const response = await DonationApi.create(donation); donateEvent('support_us_page_donation_block'); - window.open(response.pageUrl); + window.location.assign(response.pageUrl); } catch (err) {} } }; From d570075542dff552cccd61c7b5b83e963a8bfb85 Mon Sep 17 00:00:00 2001 From: Kateryna Yatsiuk <113370393+KateYatsiuk@users.noreply.github.com> Date: Wed, 17 Jan 2024 11:41:08 +0200 Subject: [PATCH 15/15] hotfix editor main/additional texts (#1113) * hotfix editor main/additional texts * Cleaned code --- .../components/Editor/QEditor.component.tsx | 6 +++--- src/app/common/utils/removeHtmlTags.utility.ts | 16 +++++++++++----- .../MainNewStreetcode.component.tsx | 2 +- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/app/common/components/Editor/QEditor.component.tsx b/src/app/common/components/Editor/QEditor.component.tsx index 7f025bb4a..1980ef911 100644 --- a/src/app/common/components/Editor/QEditor.component.tsx +++ b/src/app/common/components/Editor/QEditor.component.tsx @@ -23,7 +23,7 @@ interface EditorProps { const Editor: React.FC = ({ qRef, value, onChange, maxChars, initialVal, selectionChange, onCharacterCountChange = () => {}, }) => { - const indentedValue = refactorIndentsHtml(value); + const indentedValue = refactorIndentsHtml(value || ''); const [val, setVal] = useState(indentedValue); const [rawText, setRawText] = useState(removeHtmlTags(value) ?? ''); const [characterCount, setCharacterCount] = useState(rawText.length ?? 0); @@ -39,8 +39,8 @@ const Editor: React.FC = ({ }; useEffect(() => { - if (value.includes('\n')) { - const preservedIndents = refactorIndentsHtml(value); + if (value?.includes('\n')) { + const preservedIndents = refactorIndentsHtml(value || ''); setVal(preservedIndents); } const valueWithoutHtml = removeHtmlTags(value); diff --git a/src/app/common/utils/removeHtmlTags.utility.ts b/src/app/common/utils/removeHtmlTags.utility.ts index 08156e434..fe7284c03 100644 --- a/src/app/common/utils/removeHtmlTags.utility.ts +++ b/src/app/common/utils/removeHtmlTags.utility.ts @@ -1,6 +1,12 @@ -export const removeHtmlTags = (content: string) => content.replace(/<[^>]*>| /g, (match) => { - if (match === ' ') return ' '; - return ''; -}); +export const removeHtmlTags = (content: string | null) => { + if (!content) { + return ''; + } -export const refactorIndentsHtml = (content: string) => content.replace(/\n/g, '


'); + return content.replace(/<[^>]*>| /g, (match) => { + if (match === ' ') return ' '; + return ''; + }); +}; + +export const refactorIndentsHtml = (content: string | null) => content?.replace(/\n/g, '


') ?? ''; diff --git a/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx b/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx index f1be1a9e4..d8c55f680 100644 --- a/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx +++ b/src/features/AdminPage/NewStreetcode/MainNewStreetcode.component.tsx @@ -27,7 +27,7 @@ import StreetcodeArtApi from '@/app/api/media/streetcode-art.api'; import StreetcodesApi from '@/app/api/streetcode/streetcodes.api'; import TransactionLinksApi from '@/app/api/transactions/transactLinks.api'; import FRONTEND_ROUTES from '@/app/common/constants/frontend-routes.constants'; -import removeHtmlTags from '@/app/common/utils/removeHtmlTags.utility'; +import { removeHtmlTags } from '@/app/common/utils/removeHtmlTags.utility'; import QUILL_TEXTS_LENGTH from '@/features/AdminPage/NewStreetcode/TextBlock/TextLengthConstants/textMaxLength.constant'; import Subtitle, { SubtitleCreate } from '@/models/additional-content/subtitles.model'; import { StreetcodeTag, StreetcodeTagUpdate } from '@/models/additional-content/tag.model';