diff --git a/etv2/public/css/global.css b/ecole/public/css/global.css similarity index 83% rename from etv2/public/css/global.css rename to ecole/public/css/global.css index ae5e0839..5237957d 100644 --- a/etv2/public/css/global.css +++ b/ecole/public/css/global.css @@ -102,13 +102,6 @@ hr.form { font-size: smaller; } -.helper-text.error { - font-weight: bold; - text-align: center; - margin-top: 20px; - white-space: pre-line; -} - .mrg { padding: 0 5% !important; } @@ -451,64 +444,4 @@ a.grille-garanties:hover{ .brand-logo img { display: none; } -} - -/* Overlay loader */ -#loader-overlay { - position: fixed; - top: 0; left: 0; - width: 100%; height: 100%; - background: linear-gradient( - rgba(10, 20, 60, 0.2), - rgba(0, 0, 0, 0.4) - ); - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - z-index: 9999; - font-family: 'Roboto', sans-serif; - opacity: 0; - backdrop-filter: blur(0px); - pointer-events: none; - transition: opacity 0.5s ease, backdrop-filter 0.5s ease; -} - -#loader-overlay.active { - opacity: 1; - backdrop-filter: blur(3px); - pointer-events: all; -} - -#loader-overlay.hidden { - display: none; -} - -.loader-spin-wrap { - opacity: 0; - transform: translateY(10px); - transition: opacity 0.5s ease, transform 0.5s ease; - transition-delay: 0.5s; -} - -#loader-overlay.active .loader-spin-wrap { - opacity: 1; - transform: translateY(0); -} - -/* Spinner circulaire */ -.loader-spin { - width: 50px; - aspect-ratio: 1; - border-radius: 50%; - mask:1; - background: - radial-gradient(farthest-side,darkblue 94%,transparent) top/8px 8px no-repeat, - conic-gradient(transparent 30%,darkblue); - -webkit-mask: radial-gradient(farthest-side,transparent calc(100% - 8px),#000 0); - animation: l13 1s infinite linear; -} - -@keyframes l13 { - 100% { transform: rotate(1turn); } } \ No newline at end of file diff --git a/etv2/public/css/historiqueParcours.css b/ecole/public/css/historiqueParcours.css similarity index 97% rename from etv2/public/css/historiqueParcours.css rename to ecole/public/css/historiqueParcours.css index cab3900f..31317c9d 100644 --- a/etv2/public/css/historiqueParcours.css +++ b/ecole/public/css/historiqueParcours.css @@ -205,4 +205,7 @@ td.nc-value { #checkRegionAdmin label { display: inline-block; -} \ No newline at end of file +} + +#historiqueParcours tr.shown > td { background: #fffdf5; } + .parcours-details { font-size: 0.95rem; } \ No newline at end of file diff --git a/etv2/public/css/materialize-css/CHANGELOG.md b/ecole/public/css/materialize-css/CHANGELOG.md similarity index 100% rename from etv2/public/css/materialize-css/CHANGELOG.md rename to ecole/public/css/materialize-css/CHANGELOG.md diff --git a/etv2/public/css/materialize-css/Gruntfile.js b/ecole/public/css/materialize-css/Gruntfile.js similarity index 100% rename from etv2/public/css/materialize-css/Gruntfile.js rename to ecole/public/css/materialize-css/Gruntfile.js diff --git a/etv2/public/css/materialize-css/LICENSE b/ecole/public/css/materialize-css/LICENSE similarity index 100% rename from etv2/public/css/materialize-css/LICENSE rename to ecole/public/css/materialize-css/LICENSE diff --git a/etv2/public/css/materialize-css/README.md b/ecole/public/css/materialize-css/README.md similarity index 100% rename from etv2/public/css/materialize-css/README.md rename to ecole/public/css/materialize-css/README.md diff --git a/etv2/public/css/materialize-css/css/materialize.css b/ecole/public/css/materialize-css/css/materialize.css similarity index 100% rename from etv2/public/css/materialize-css/css/materialize.css rename to ecole/public/css/materialize-css/css/materialize.css diff --git a/etv2/public/css/materialize-css/css/materialize.min.css b/ecole/public/css/materialize-css/css/materialize.min.css similarity index 100% rename from etv2/public/css/materialize-css/css/materialize.min.css rename to ecole/public/css/materialize-css/css/materialize.min.css diff --git a/etv2/public/css/materialize-css/dist/.DS_Store b/ecole/public/css/materialize-css/dist/.DS_Store similarity index 100% rename from etv2/public/css/materialize-css/dist/.DS_Store rename to ecole/public/css/materialize-css/dist/.DS_Store diff --git a/etv2/public/css/materialize-css/dist/css/.DS_Store b/ecole/public/css/materialize-css/dist/css/.DS_Store similarity index 100% rename from etv2/public/css/materialize-css/dist/css/.DS_Store rename to ecole/public/css/materialize-css/dist/css/.DS_Store diff --git a/etv2/public/css/materialize-css/dist/css/materialize.css b/ecole/public/css/materialize-css/dist/css/materialize.css similarity index 100% rename from etv2/public/css/materialize-css/dist/css/materialize.css rename to ecole/public/css/materialize-css/dist/css/materialize.css diff --git a/etv2/public/css/materialize-css/dist/css/materialize.min.css b/ecole/public/css/materialize-css/dist/css/materialize.min.css similarity index 100% rename from etv2/public/css/materialize-css/dist/css/materialize.min.css rename to ecole/public/css/materialize-css/dist/css/materialize.min.css diff --git a/etv2/public/css/materialize-css/dist/fonts/.DS_Store b/ecole/public/css/materialize-css/dist/fonts/.DS_Store similarity index 100% rename from etv2/public/css/materialize-css/dist/fonts/.DS_Store rename to ecole/public/css/materialize-css/dist/fonts/.DS_Store diff --git a/etv2/public/css/materialize-css/dist/js/materialize.js b/ecole/public/css/materialize-css/dist/js/materialize.js similarity index 100% rename from etv2/public/css/materialize-css/dist/js/materialize.js rename to ecole/public/css/materialize-css/dist/js/materialize.js diff --git a/etv2/public/css/materialize-css/dist/js/materialize.min.js b/ecole/public/css/materialize-css/dist/js/materialize.min.js similarity index 100% rename from etv2/public/css/materialize-css/dist/js/materialize.min.js rename to ecole/public/css/materialize-css/dist/js/materialize.min.js diff --git a/etv2/public/css/materialize-css/extras/.DS_Store b/ecole/public/css/materialize-css/extras/.DS_Store similarity index 100% rename from etv2/public/css/materialize-css/extras/.DS_Store rename to ecole/public/css/materialize-css/extras/.DS_Store diff --git a/etv2/public/css/materialize-css/extras/noUiSlider/nouislider.css b/ecole/public/css/materialize-css/extras/noUiSlider/nouislider.css similarity index 100% rename from etv2/public/css/materialize-css/extras/noUiSlider/nouislider.css rename to ecole/public/css/materialize-css/extras/noUiSlider/nouislider.css diff --git a/etv2/public/css/materialize-css/extras/noUiSlider/nouislider.js b/ecole/public/css/materialize-css/extras/noUiSlider/nouislider.js similarity index 100% rename from etv2/public/css/materialize-css/extras/noUiSlider/nouislider.js rename to ecole/public/css/materialize-css/extras/noUiSlider/nouislider.js diff --git a/etv2/public/css/materialize-css/extras/noUiSlider/nouislider.min.js b/ecole/public/css/materialize-css/extras/noUiSlider/nouislider.min.js similarity index 100% rename from etv2/public/css/materialize-css/extras/noUiSlider/nouislider.min.js rename to ecole/public/css/materialize-css/extras/noUiSlider/nouislider.min.js diff --git a/etv2/public/css/materialize-css/js/anime.min.js b/ecole/public/css/materialize-css/js/anime.min.js similarity index 100% rename from etv2/public/css/materialize-css/js/anime.min.js rename to ecole/public/css/materialize-css/js/anime.min.js diff --git a/etv2/public/css/materialize-css/js/autocomplete.js b/ecole/public/css/materialize-css/js/autocomplete.js similarity index 100% rename from etv2/public/css/materialize-css/js/autocomplete.js rename to ecole/public/css/materialize-css/js/autocomplete.js diff --git a/etv2/public/css/materialize-css/js/buttons.js b/ecole/public/css/materialize-css/js/buttons.js similarity index 100% rename from etv2/public/css/materialize-css/js/buttons.js rename to ecole/public/css/materialize-css/js/buttons.js diff --git a/etv2/public/css/materialize-css/js/cards.js b/ecole/public/css/materialize-css/js/cards.js similarity index 100% rename from etv2/public/css/materialize-css/js/cards.js rename to ecole/public/css/materialize-css/js/cards.js diff --git a/etv2/public/css/materialize-css/js/carousel.js b/ecole/public/css/materialize-css/js/carousel.js similarity index 100% rename from etv2/public/css/materialize-css/js/carousel.js rename to ecole/public/css/materialize-css/js/carousel.js diff --git a/etv2/public/css/materialize-css/js/cash.js b/ecole/public/css/materialize-css/js/cash.js similarity index 100% rename from etv2/public/css/materialize-css/js/cash.js rename to ecole/public/css/materialize-css/js/cash.js diff --git a/etv2/public/css/materialize-css/js/characterCounter.js b/ecole/public/css/materialize-css/js/characterCounter.js similarity index 100% rename from etv2/public/css/materialize-css/js/characterCounter.js rename to ecole/public/css/materialize-css/js/characterCounter.js diff --git a/etv2/public/css/materialize-css/js/chips.js b/ecole/public/css/materialize-css/js/chips.js similarity index 100% rename from etv2/public/css/materialize-css/js/chips.js rename to ecole/public/css/materialize-css/js/chips.js diff --git a/etv2/public/css/materialize-css/js/collapsible.js b/ecole/public/css/materialize-css/js/collapsible.js similarity index 100% rename from etv2/public/css/materialize-css/js/collapsible.js rename to ecole/public/css/materialize-css/js/collapsible.js diff --git a/etv2/public/css/materialize-css/js/component.js b/ecole/public/css/materialize-css/js/component.js similarity index 100% rename from etv2/public/css/materialize-css/js/component.js rename to ecole/public/css/materialize-css/js/component.js diff --git a/etv2/public/css/materialize-css/js/datepicker.js b/ecole/public/css/materialize-css/js/datepicker.js similarity index 100% rename from etv2/public/css/materialize-css/js/datepicker.js rename to ecole/public/css/materialize-css/js/datepicker.js diff --git a/etv2/public/css/materialize-css/js/dropdown.js b/ecole/public/css/materialize-css/js/dropdown.js similarity index 100% rename from etv2/public/css/materialize-css/js/dropdown.js rename to ecole/public/css/materialize-css/js/dropdown.js diff --git a/etv2/public/css/materialize-css/js/forms.js b/ecole/public/css/materialize-css/js/forms.js similarity index 100% rename from etv2/public/css/materialize-css/js/forms.js rename to ecole/public/css/materialize-css/js/forms.js diff --git a/etv2/public/css/materialize-css/js/global.js b/ecole/public/css/materialize-css/js/global.js similarity index 100% rename from etv2/public/css/materialize-css/js/global.js rename to ecole/public/css/materialize-css/js/global.js diff --git a/etv2/public/css/materialize-css/js/materialbox.js b/ecole/public/css/materialize-css/js/materialbox.js similarity index 100% rename from etv2/public/css/materialize-css/js/materialbox.js rename to ecole/public/css/materialize-css/js/materialbox.js diff --git a/etv2/public/css/materialize-css/js/materialize.js b/ecole/public/css/materialize-css/js/materialize.js similarity index 100% rename from etv2/public/css/materialize-css/js/materialize.js rename to ecole/public/css/materialize-css/js/materialize.js diff --git a/etv2/public/css/materialize-css/js/materialize.min.js b/ecole/public/css/materialize-css/js/materialize.min.js similarity index 100% rename from etv2/public/css/materialize-css/js/materialize.min.js rename to ecole/public/css/materialize-css/js/materialize.min.js diff --git a/etv2/public/css/materialize-css/js/modal.js b/ecole/public/css/materialize-css/js/modal.js similarity index 100% rename from etv2/public/css/materialize-css/js/modal.js rename to ecole/public/css/materialize-css/js/modal.js diff --git a/etv2/public/css/materialize-css/js/parallax.js b/ecole/public/css/materialize-css/js/parallax.js similarity index 100% rename from etv2/public/css/materialize-css/js/parallax.js rename to ecole/public/css/materialize-css/js/parallax.js diff --git a/etv2/public/css/materialize-css/js/pushpin.js b/ecole/public/css/materialize-css/js/pushpin.js similarity index 100% rename from etv2/public/css/materialize-css/js/pushpin.js rename to ecole/public/css/materialize-css/js/pushpin.js diff --git a/etv2/public/css/materialize-css/js/range.js b/ecole/public/css/materialize-css/js/range.js similarity index 100% rename from etv2/public/css/materialize-css/js/range.js rename to ecole/public/css/materialize-css/js/range.js diff --git a/etv2/public/css/materialize-css/js/scrollspy.js b/ecole/public/css/materialize-css/js/scrollspy.js similarity index 100% rename from etv2/public/css/materialize-css/js/scrollspy.js rename to ecole/public/css/materialize-css/js/scrollspy.js diff --git a/etv2/public/css/materialize-css/js/select.js b/ecole/public/css/materialize-css/js/select.js similarity index 100% rename from etv2/public/css/materialize-css/js/select.js rename to ecole/public/css/materialize-css/js/select.js diff --git a/etv2/public/css/materialize-css/js/sidenav.js b/ecole/public/css/materialize-css/js/sidenav.js similarity index 100% rename from etv2/public/css/materialize-css/js/sidenav.js rename to ecole/public/css/materialize-css/js/sidenav.js diff --git a/etv2/public/css/materialize-css/js/slider.js b/ecole/public/css/materialize-css/js/slider.js similarity index 100% rename from etv2/public/css/materialize-css/js/slider.js rename to ecole/public/css/materialize-css/js/slider.js diff --git a/etv2/public/css/materialize-css/js/tabs.js b/ecole/public/css/materialize-css/js/tabs.js similarity index 100% rename from etv2/public/css/materialize-css/js/tabs.js rename to ecole/public/css/materialize-css/js/tabs.js diff --git a/etv2/public/css/materialize-css/js/tapTarget.js b/ecole/public/css/materialize-css/js/tapTarget.js similarity index 100% rename from etv2/public/css/materialize-css/js/tapTarget.js rename to ecole/public/css/materialize-css/js/tapTarget.js diff --git a/etv2/public/css/materialize-css/js/timepicker.js b/ecole/public/css/materialize-css/js/timepicker.js similarity index 100% rename from etv2/public/css/materialize-css/js/timepicker.js rename to ecole/public/css/materialize-css/js/timepicker.js diff --git a/etv2/public/css/materialize-css/js/toasts.js b/ecole/public/css/materialize-css/js/toasts.js similarity index 100% rename from etv2/public/css/materialize-css/js/toasts.js rename to ecole/public/css/materialize-css/js/toasts.js diff --git a/etv2/public/css/materialize-css/js/tooltip.js b/ecole/public/css/materialize-css/js/tooltip.js similarity index 100% rename from etv2/public/css/materialize-css/js/tooltip.js rename to ecole/public/css/materialize-css/js/tooltip.js diff --git a/etv2/public/css/materialize-css/js/waves.js b/ecole/public/css/materialize-css/js/waves.js similarity index 100% rename from etv2/public/css/materialize-css/js/waves.js rename to ecole/public/css/materialize-css/js/waves.js diff --git a/etv2/public/css/materialize-css/package.json b/ecole/public/css/materialize-css/package.json similarity index 100% rename from etv2/public/css/materialize-css/package.json rename to ecole/public/css/materialize-css/package.json diff --git a/etv2/public/css/materialize-css/sass/components/_badges.scss b/ecole/public/css/materialize-css/sass/components/_badges.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_badges.scss rename to ecole/public/css/materialize-css/sass/components/_badges.scss diff --git a/etv2/public/css/materialize-css/sass/components/_buttons.scss b/ecole/public/css/materialize-css/sass/components/_buttons.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_buttons.scss rename to ecole/public/css/materialize-css/sass/components/_buttons.scss diff --git a/etv2/public/css/materialize-css/sass/components/_cards.scss b/ecole/public/css/materialize-css/sass/components/_cards.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_cards.scss rename to ecole/public/css/materialize-css/sass/components/_cards.scss diff --git a/etv2/public/css/materialize-css/sass/components/_carousel.scss b/ecole/public/css/materialize-css/sass/components/_carousel.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_carousel.scss rename to ecole/public/css/materialize-css/sass/components/_carousel.scss diff --git a/etv2/public/css/materialize-css/sass/components/_chips.scss b/ecole/public/css/materialize-css/sass/components/_chips.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_chips.scss rename to ecole/public/css/materialize-css/sass/components/_chips.scss diff --git a/etv2/public/css/materialize-css/sass/components/_collapsible.scss b/ecole/public/css/materialize-css/sass/components/_collapsible.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_collapsible.scss rename to ecole/public/css/materialize-css/sass/components/_collapsible.scss diff --git a/etv2/public/css/materialize-css/sass/components/_color-classes.scss b/ecole/public/css/materialize-css/sass/components/_color-classes.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_color-classes.scss rename to ecole/public/css/materialize-css/sass/components/_color-classes.scss diff --git a/etv2/public/css/materialize-css/sass/components/_color-variables.scss b/ecole/public/css/materialize-css/sass/components/_color-variables.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_color-variables.scss rename to ecole/public/css/materialize-css/sass/components/_color-variables.scss diff --git a/etv2/public/css/materialize-css/sass/components/_datepicker.scss b/ecole/public/css/materialize-css/sass/components/_datepicker.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_datepicker.scss rename to ecole/public/css/materialize-css/sass/components/_datepicker.scss diff --git a/etv2/public/css/materialize-css/sass/components/_dropdown.scss b/ecole/public/css/materialize-css/sass/components/_dropdown.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_dropdown.scss rename to ecole/public/css/materialize-css/sass/components/_dropdown.scss diff --git a/etv2/public/css/materialize-css/sass/components/_global.scss b/ecole/public/css/materialize-css/sass/components/_global.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_global.scss rename to ecole/public/css/materialize-css/sass/components/_global.scss diff --git a/etv2/public/css/materialize-css/sass/components/_grid.scss b/ecole/public/css/materialize-css/sass/components/_grid.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_grid.scss rename to ecole/public/css/materialize-css/sass/components/_grid.scss diff --git a/etv2/public/css/materialize-css/sass/components/_icons-material-design.scss b/ecole/public/css/materialize-css/sass/components/_icons-material-design.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_icons-material-design.scss rename to ecole/public/css/materialize-css/sass/components/_icons-material-design.scss diff --git a/etv2/public/css/materialize-css/sass/components/_materialbox.scss b/ecole/public/css/materialize-css/sass/components/_materialbox.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_materialbox.scss rename to ecole/public/css/materialize-css/sass/components/_materialbox.scss diff --git a/etv2/public/css/materialize-css/sass/components/_modal.scss b/ecole/public/css/materialize-css/sass/components/_modal.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_modal.scss rename to ecole/public/css/materialize-css/sass/components/_modal.scss diff --git a/etv2/public/css/materialize-css/sass/components/_navbar.scss b/ecole/public/css/materialize-css/sass/components/_navbar.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_navbar.scss rename to ecole/public/css/materialize-css/sass/components/_navbar.scss diff --git a/etv2/public/css/materialize-css/sass/components/_normalize.scss b/ecole/public/css/materialize-css/sass/components/_normalize.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_normalize.scss rename to ecole/public/css/materialize-css/sass/components/_normalize.scss diff --git a/etv2/public/css/materialize-css/sass/components/_preloader.scss b/ecole/public/css/materialize-css/sass/components/_preloader.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_preloader.scss rename to ecole/public/css/materialize-css/sass/components/_preloader.scss diff --git a/etv2/public/css/materialize-css/sass/components/_pulse.scss b/ecole/public/css/materialize-css/sass/components/_pulse.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_pulse.scss rename to ecole/public/css/materialize-css/sass/components/_pulse.scss diff --git a/etv2/public/css/materialize-css/sass/components/_sidenav.scss b/ecole/public/css/materialize-css/sass/components/_sidenav.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_sidenav.scss rename to ecole/public/css/materialize-css/sass/components/_sidenav.scss diff --git a/etv2/public/css/materialize-css/sass/components/_slider.scss b/ecole/public/css/materialize-css/sass/components/_slider.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_slider.scss rename to ecole/public/css/materialize-css/sass/components/_slider.scss diff --git a/etv2/public/css/materialize-css/sass/components/_table_of_contents.scss b/ecole/public/css/materialize-css/sass/components/_table_of_contents.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_table_of_contents.scss rename to ecole/public/css/materialize-css/sass/components/_table_of_contents.scss diff --git a/etv2/public/css/materialize-css/sass/components/_tabs.scss b/ecole/public/css/materialize-css/sass/components/_tabs.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_tabs.scss rename to ecole/public/css/materialize-css/sass/components/_tabs.scss diff --git a/etv2/public/css/materialize-css/sass/components/_tapTarget.scss b/ecole/public/css/materialize-css/sass/components/_tapTarget.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_tapTarget.scss rename to ecole/public/css/materialize-css/sass/components/_tapTarget.scss diff --git a/etv2/public/css/materialize-css/sass/components/_timepicker.scss b/ecole/public/css/materialize-css/sass/components/_timepicker.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_timepicker.scss rename to ecole/public/css/materialize-css/sass/components/_timepicker.scss diff --git a/etv2/public/css/materialize-css/sass/components/_toast.scss b/ecole/public/css/materialize-css/sass/components/_toast.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_toast.scss rename to ecole/public/css/materialize-css/sass/components/_toast.scss diff --git a/etv2/public/css/materialize-css/sass/components/_tooltip.scss b/ecole/public/css/materialize-css/sass/components/_tooltip.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_tooltip.scss rename to ecole/public/css/materialize-css/sass/components/_tooltip.scss diff --git a/etv2/public/css/materialize-css/sass/components/_transitions.scss b/ecole/public/css/materialize-css/sass/components/_transitions.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_transitions.scss rename to ecole/public/css/materialize-css/sass/components/_transitions.scss diff --git a/etv2/public/css/materialize-css/sass/components/_typography.scss b/ecole/public/css/materialize-css/sass/components/_typography.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_typography.scss rename to ecole/public/css/materialize-css/sass/components/_typography.scss diff --git a/etv2/public/css/materialize-css/sass/components/_variables.scss b/ecole/public/css/materialize-css/sass/components/_variables.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_variables.scss rename to ecole/public/css/materialize-css/sass/components/_variables.scss diff --git a/etv2/public/css/materialize-css/sass/components/_waves.scss b/ecole/public/css/materialize-css/sass/components/_waves.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/_waves.scss rename to ecole/public/css/materialize-css/sass/components/_waves.scss diff --git a/etv2/public/css/materialize-css/sass/components/forms/_checkboxes.scss b/ecole/public/css/materialize-css/sass/components/forms/_checkboxes.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/forms/_checkboxes.scss rename to ecole/public/css/materialize-css/sass/components/forms/_checkboxes.scss diff --git a/etv2/public/css/materialize-css/sass/components/forms/_file-input.scss b/ecole/public/css/materialize-css/sass/components/forms/_file-input.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/forms/_file-input.scss rename to ecole/public/css/materialize-css/sass/components/forms/_file-input.scss diff --git a/etv2/public/css/materialize-css/sass/components/forms/_forms.scss b/ecole/public/css/materialize-css/sass/components/forms/_forms.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/forms/_forms.scss rename to ecole/public/css/materialize-css/sass/components/forms/_forms.scss diff --git a/etv2/public/css/materialize-css/sass/components/forms/_input-fields.scss b/ecole/public/css/materialize-css/sass/components/forms/_input-fields.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/forms/_input-fields.scss rename to ecole/public/css/materialize-css/sass/components/forms/_input-fields.scss diff --git a/etv2/public/css/materialize-css/sass/components/forms/_radio-buttons.scss b/ecole/public/css/materialize-css/sass/components/forms/_radio-buttons.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/forms/_radio-buttons.scss rename to ecole/public/css/materialize-css/sass/components/forms/_radio-buttons.scss diff --git a/etv2/public/css/materialize-css/sass/components/forms/_range.scss b/ecole/public/css/materialize-css/sass/components/forms/_range.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/forms/_range.scss rename to ecole/public/css/materialize-css/sass/components/forms/_range.scss diff --git a/etv2/public/css/materialize-css/sass/components/forms/_select.scss b/ecole/public/css/materialize-css/sass/components/forms/_select.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/forms/_select.scss rename to ecole/public/css/materialize-css/sass/components/forms/_select.scss diff --git a/etv2/public/css/materialize-css/sass/components/forms/_switches.scss b/ecole/public/css/materialize-css/sass/components/forms/_switches.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/components/forms/_switches.scss rename to ecole/public/css/materialize-css/sass/components/forms/_switches.scss diff --git a/etv2/public/css/materialize-css/sass/materialize.scss b/ecole/public/css/materialize-css/sass/materialize.scss similarity index 100% rename from etv2/public/css/materialize-css/sass/materialize.scss rename to ecole/public/css/materialize-css/sass/materialize.scss diff --git a/etv2/public/css/parcoursform.css b/ecole/public/css/parcoursform.css similarity index 100% rename from etv2/public/css/parcoursform.css rename to ecole/public/css/parcoursform.css diff --git a/etv2/public/documents/CLAUSES_PLATEFORME_RC_TRANSPORT_VALIDE_AU_26_02_2025.docx b/ecole/public/documents/CLAUSES_PLATEFORME_RC_TRANSPORT_VALIDE_AU_26_02_2025.docx similarity index 100% rename from etv2/public/documents/CLAUSES_PLATEFORME_RC_TRANSPORT_VALIDE_AU_26_02_2025.docx rename to ecole/public/documents/CLAUSES_PLATEFORME_RC_TRANSPORT_VALIDE_AU_26_02_2025.docx diff --git a/etv2/public/documents/CLAUSES_RECUEIL_FAC_VALIDE_AU_22_11_2022.docx b/ecole/public/documents/CLAUSES_RECUEIL_FAC_VALIDE_AU_22_11_2022.docx similarity index 100% rename from etv2/public/documents/CLAUSES_RECUEIL_FAC_VALIDE_AU_22_11_2022.docx rename to ecole/public/documents/CLAUSES_RECUEIL_FAC_VALIDE_AU_22_11_2022.docx diff --git a/etv2/public/documents/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_02_04_2025.docx b/ecole/public/documents/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_02_04_2025.docx similarity index 100% rename from etv2/public/documents/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_02_04_2025.docx rename to ecole/public/documents/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_02_04_2025.docx diff --git a/etv2/public/documents/CLAUSES_RECUEIL_TPPC_VALIDE_AU_01_2022.docx b/ecole/public/documents/CLAUSES_RECUEIL_TPPC_VALIDE_AU_01_2022.docx similarity index 100% rename from etv2/public/documents/CLAUSES_RECUEIL_TPPC_VALIDE_AU_01_2022.docx rename to ecole/public/documents/CLAUSES_RECUEIL_TPPC_VALIDE_AU_01_2022.docx diff --git a/etv2/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_16_12_2024.docx b/ecole/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_16_12_2024.docx similarity index 100% rename from etv2/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_16_12_2024.docx rename to ecole/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_16_12_2024.docx diff --git a/etv2/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_20_09_2024.docx b/ecole/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_20_09_2024.docx similarity index 100% rename from etv2/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_20_09_2024.docx rename to ecole/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_20_09_2024.docx diff --git a/etv2/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_21_10_2024.docx b/ecole/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_21_10_2024.docx similarity index 100% rename from etv2/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_21_10_2024.docx rename to ecole/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_21_10_2024.docx diff --git a/etv2/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_25_07_2024.docx b/ecole/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_25_07_2024.docx similarity index 100% rename from etv2/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_25_07_2024.docx rename to ecole/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_25_07_2024.docx diff --git a/etv2/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_26_02_2025.docx b/ecole/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_26_02_2025.docx similarity index 100% rename from etv2/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_26_02_2025.docx rename to ecole/public/documents/archives/CLAUSES_RECUEIL_RC_TRANSPORT_VALIDE_AU_26_02_2025.docx diff --git a/etv2/public/images/_ARCHIVES_/zone7.png b/ecole/public/images/_ARCHIVES_/zone7.png similarity index 100% rename from etv2/public/images/_ARCHIVES_/zone7.png rename to ecole/public/images/_ARCHIVES_/zone7.png diff --git a/etv2/public/images/creditsafe.png b/ecole/public/images/creditsafe.png similarity index 100% rename from etv2/public/images/creditsafe.png rename to ecole/public/images/creditsafe.png diff --git a/etv2/public/images/easy-qp.png b/ecole/public/images/easy-qp.png similarity index 100% rename from etv2/public/images/easy-qp.png rename to ecole/public/images/easy-qp.png diff --git a/etv2/public/images/en-cours-de-construction.jpg b/ecole/public/images/en-cours-de-construction.jpg similarity index 100% rename from etv2/public/images/en-cours-de-construction.jpg rename to ecole/public/images/en-cours-de-construction.jpg diff --git a/etv2/public/images/favicon-axa.ico b/ecole/public/images/favicon-axa.ico similarity index 100% rename from etv2/public/images/favicon-axa.ico rename to ecole/public/images/favicon-axa.ico diff --git a/etv2/public/images/fleche-droite.png b/ecole/public/images/fleche-droite.png similarity index 100% rename from etv2/public/images/fleche-droite.png rename to ecole/public/images/fleche-droite.png diff --git a/etv2/public/images/garContenantConfie.png b/ecole/public/images/garContenantConfie.png similarity index 100% rename from etv2/public/images/garContenantConfie.png rename to ecole/public/images/garContenantConfie.png diff --git a/etv2/public/images/logo-axa-blue.jpg b/ecole/public/images/logo-axa-blue.jpg similarity index 100% rename from etv2/public/images/logo-axa-blue.jpg rename to ecole/public/images/logo-axa-blue.jpg diff --git a/etv2/public/images/logo-axa-white.png b/ecole/public/images/logo-axa-white.png similarity index 100% rename from etv2/public/images/logo-axa-white.png rename to ecole/public/images/logo-axa-white.png diff --git a/etv2/public/images/mutualiste.png b/ecole/public/images/mutualiste.png similarity index 100% rename from etv2/public/images/mutualiste.png rename to ecole/public/images/mutualiste.png diff --git a/etv2/public/images/ref-note-fi.png b/ecole/public/images/ref-note-fi.png similarity index 100% rename from etv2/public/images/ref-note-fi.png rename to ecole/public/images/ref-note-fi.png diff --git a/etv2/public/images/zone1.png b/ecole/public/images/zone1.png similarity index 100% rename from etv2/public/images/zone1.png rename to ecole/public/images/zone1.png diff --git a/etv2/public/images/zone2.png b/ecole/public/images/zone2.png similarity index 100% rename from etv2/public/images/zone2.png rename to ecole/public/images/zone2.png diff --git a/etv2/public/images/zone3.png b/ecole/public/images/zone3.png similarity index 100% rename from etv2/public/images/zone3.png rename to ecole/public/images/zone3.png diff --git a/etv2/public/images/zone4.png b/ecole/public/images/zone4.png similarity index 100% rename from etv2/public/images/zone4.png rename to ecole/public/images/zone4.png diff --git a/etv2/public/images/zone5.png b/ecole/public/images/zone5.png similarity index 100% rename from etv2/public/images/zone5.png rename to ecole/public/images/zone5.png diff --git a/etv2/public/images/zone6.png b/ecole/public/images/zone6.png similarity index 100% rename from etv2/public/images/zone6.png rename to ecole/public/images/zone6.png diff --git a/etv2/public/images/zone7.png b/ecole/public/images/zone7.png similarity index 100% rename from etv2/public/images/zone7.png rename to ecole/public/images/zone7.png diff --git a/etv2/public/js/auth.js b/ecole/public/js/auth.js similarity index 97% rename from etv2/public/js/auth.js rename to ecole/public/js/auth.js index 3f1c1107..5c54075e 100644 --- a/etv2/public/js/auth.js +++ b/ecole/public/js/auth.js @@ -25,7 +25,6 @@ document.addEventListener('DOMContentLoaded', function () { // Récupération des informations du parcours (async () => { try { - // Le loader est déjà géré dans fetchWithJson const data = await fetchWithJson(`/auth/verifyMatricule/${matricule}`, 'GET'); if (data.valid) { diff --git a/ecole/public/js/client-form.js b/ecole/public/js/client-form.js new file mode 100644 index 00000000..4cc1e223 --- /dev/null +++ b/ecole/public/js/client-form.js @@ -0,0 +1,279 @@ +// Module IIFE pour éviter la pollution de l'espace global +(function () { + // Variables globales du module + let parcours, contrat, client, matricule; + + // Initialisation du formulaire et des données + function init() { + const token = localStorage.getItem('jwtToken'); + + if (token) { + const decoded = jwt_decode(token); + matricule = decoded.userMatricule; + } + + // Accéder aux informations stockées du parcours + parcours = JSON.parse(sessionStorage.getItem('parcours')); + contrat = JSON.parse(sessionStorage.getItem('contrat')); + client = contrat?.["@expand"]?.client || null; + + console.log("Matricule user actuel:", matricule); + console.log("Initialisation pour formulaire client :", contrat); + + // Materialize init Modal + var modals = document.querySelectorAll('.modal'); + M.Modal.init(modals); + + // Appel des différentes fonctions d'initialisation + setupEventListeners(); + populateFormData(); + updateSubmitButtonState('clientForm'); + } + + // Configuration des écouteurs d'événements + function setupEventListeners() { + document.getElementById('clientFormBtn').addEventListener('click', handleSubmitForm); + document.getElementById('creditsafe').addEventListener('click', (event) => handleOpenLink(event, 'creditsafeURL')); + document.getElementById('easyQP').addEventListener('click', (event) => handleOpenLink(event, 'easyQPURL')); + document.getElementById('refNoteFi').addEventListener('click', (event) => handleOpenLink(event, 'refNoteFiURL')); + document.getElementById('cl063-client').addEventListener('click', (event) => handleExtractClient(event)); + document.getElementById('modalExtraireClient').addEventListener('click', (event) => handleModalExtract(event)); + + // Controle de saisie et format sur les champs du formulaire + document.getElementById('noteFinanciereClient').addEventListener('input', function () { + validateField('noteFinanciereClient', true); + updateSubmitButtonState('clientForm'); + }); + + document.getElementById('numClient').addEventListener('input', function () { + validateField('numClient', true); + updateSubmitButtonState('clientForm'); + }); + + document.getElementById('nomClient').addEventListener('input', function () { + validateField('nomClient', true); + updateSubmitButtonState('clientForm'); + }); + + document.getElementById('emailClient').addEventListener('input', function () { + validateField('emailClient', true); + updateSubmitButtonState('clientForm'); + }); + + document.getElementById('adresseClient').addEventListener('input', function () { + validateField('adresseClient', true); + updateSubmitButtonState('clientForm'); + }); + + document.getElementById('codePostalClient').addEventListener('input', function () { + validateField('codePostalClient', true); + updateSubmitButtonState('clientForm'); + }); + + document.getElementById('villeClient').addEventListener('input', function () { + validateField('villeClient', true); + updateSubmitButtonState('clientForm'); + }); + + document.getElementById('modalNumClient').addEventListener('input', function () { + validateField('modalNumClient', true); + updateSubmitButtonState('modalExtraireClient'); + }); + } + + // Peupler le formulaire avec les données + function populateFormData() { + const clientStorage = JSON.parse(sessionStorage.getItem('tmp')); + + if (client) { + document.getElementById('nomClient').value = client.nom || ''; + document.getElementById('numClient').value = client.numClient || ''; + document.getElementById('adresseClient').value = client.adresse || ''; + document.getElementById('emailClient').value = client.mail || ''; + document.getElementById('codePostalClient').value = client.codePostal || ''; + document.getElementById('villeClient').value = client.ville || ''; + document.getElementById('noteFinanciereClient').value = client.noteFinanciere || ''; + } + + if (clientStorage) { + document.getElementById('nomClient').value = clientStorage.nomClient || ''; + document.getElementById('numClient').value = clientStorage.numClient || ''; + document.getElementById('adresseClient').value = clientStorage.adresseClient || ''; + document.getElementById('codePostalClient').value = clientStorage.postalClient || ''; + document.getElementById('villeClient').value = clientStorage.villeClient || ''; + } + } + + // Gérer l'ouverture de liens externes + function handleOpenLink(event, urlType) { + event.preventDefault(); + let url = ''; + + switch (urlType) { + case 'creditsafeURL': + url = 'https://www.creditsafe.fr/csfr?UserName=735265dorothee&Password=UH04EuLocXZMxIRqY19w6A%3d%3d&BackOfficeCountry=FR&origincountry=FR&linkages=Y'; + break; + case 'easyQPURL': + if (document.getElementById('numClient').value != "") { + url = `https://qualite-portefeuille-iard-ent.axa-fr.intraxa/client/${document.getElementById('numClient').value}`; + } else { + url = `https://qualite-portefeuille-iard-ent.axa-fr.intraxa/`; + } + break; + case 'refNoteFiURL': + url = 'https://app.powerbi.com/groups/me/apps/7b48f9a2-bd97-4178-bc1a-a5f7ef6e985f/reports/d29a9f83-cafe-4a0f-bc38-0929921e8cd3/ReportSection?ctid=396b38cc-aa65-492b-bb0e-3d94ed25a97b'; + break; + } + + window.open(url, '_blank'); + } + + // Gérer l'extraction axaPAC + async function handleExtractClient(event) { + event.preventDefault(); + + // Affiche le modal + const elem = document.getElementById('modalExtractAxAPAC'); + const instance = M.Modal.getInstance(elem); + instance.open(); + } + + async function handleModalExtract() { + document.getElementById('modalExtraireClient').disabled = true; + + const response = await fetch(`/client/extract`, { + method: 'POST', + body: JSON.stringify({ + "matricule": matricule, + "numClient": document.getElementById("modalNumClient").value + }), + headers: { + 'Content-Type': 'application/json', + }, + }); + const res = await response.json(); + + if (res.valid) { + document.getElementById("error-extract").style.display = "none"; + document.getElementById('modalExtraireClient').disabled = false; + console.log(res); + + // Save sessionStorage for Intermediaire + sessionStorage.setItem('tmp', JSON.stringify(res.data)); + + // Populate data + document.getElementById("numClient").value = (res.data.numClient) ? res.data.numClient : null; + document.getElementById("nomClient").value = (res.data.nomClient) ? res.data.nomClient : null; + document.getElementById("adresseClient").value = (res.data.adresseClient) ? res.data.adresseClient : null; + document.getElementById("codePostalClient").value = (res.data.postalClient) ? res.data.postalClient : null; + document.getElementById("villeClient").value = (res.data.villeClient) ? res.data.villeClient : null; + + validateField('numClient', true); + validateField('nomClient', true); + validateField('adresseClient', true); + validateField('codePostalClient', true); + validateField('villeClient', true); + updateSubmitButtonState('clientForm'); + + // close le modal + const elem = document.getElementById('modalExtractAxAPAC'); + const instance = M.Modal.getInstance(elem); + instance.close(); + } else { + document.getElementById("error-extract").style.display = "block"; + document.getElementById('modalExtraireClient').disabled = false; + console.log("Problème rencontré lors de l'extraction cl063 AxA PAC :", res.error); + } + } + + // Gérer la soumission du formulaire + async function handleSubmitForm(event) { + event.preventDefault(); + + let idClient = client?.id; + const numClient = document.getElementById('numClient').value; + + let responseClient; + + if (numClient) { + responseClient = await fetch(`/client/read/${numClient}`, { + method: 'GET', + headers: { 'Content-Type': 'application/json' }, + }); + } + const dataClient = await responseClient.json(); + + if (dataClient.valid) { + idClient = dataClient.idClient; + } else { + // Créez le client ici si non trouvé + const responseCreateClient = await fetch(`/client/create`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + }); + const dataCreateClient = await responseCreateClient.json(); + + if (dataCreateClient.valid) { + idClient = dataCreateClient.client.id; + } + } + + // Mettre à jour le contrat avec l'ID du client + if (idClient) { + const response = await fetch(`/client/update/${idClient}`, { + method: 'POST', + body: JSON.stringify({ + "nom": document.getElementById('nomClient').value.toUpperCase(), + "numClient": document.getElementById('numClient').value, + "adresse": document.getElementById('adresseClient').value.toUpperCase(), + "mail": document.getElementById('emailClient').value, + "codePostal": document.getElementById('codePostalClient').value, + "ville": document.getElementById('villeClient').value.toUpperCase(), + "noteFinanciere": document.getElementById('noteFinanciereClient').value + }), + headers: { + 'Content-Type': 'application/json', + }, + }); + const data = await response.json(); + + if (data.valid) { + const idContrat = contrat?.id; + + fetch(`/contrat/update/client/${idContrat}/${idClient}`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + }, + }) + .then(response => response.json()) + .then(data => { + if (data.valid) { + // Update Session storage + const clientStorage = JSON.parse(sessionStorage.getItem('tmp')); + + if (clientStorage) { + clientStorage.nomClient = document.getElementById('nomClient').value.toUpperCase(); + clientStorage.numClient = document.getElementById('numClient').value; + clientStorage.adresseClient = document.getElementById('adresseClient').value.toUpperCase(); + clientStorage.postalClient = document.getElementById('codePostalClient').value; + clientStorage.villeClient = document.getElementById('villeClient').value.toUpperCase(); + + sessionStorage.setItem('tmp', JSON.stringify(clientStorage)) + } + + // Redirect vers intermédiaire + window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=intermediaire`; + } else { + console.log('Echec lors de la mise à jour de la relation id contrat - id client :', data); + } + }); + } + } + } + + // Exposer init globalement pour y accéder depuis l'extérieur + window.initSubmenuForm = init; +})(); diff --git a/etv2/public/js/contrat.js b/ecole/public/js/contrat.js similarity index 100% rename from etv2/public/js/contrat.js rename to ecole/public/js/contrat.js diff --git a/etv2/public/js/global.js b/ecole/public/js/global.js similarity index 80% rename from etv2/public/js/global.js rename to ecole/public/js/global.js index 1be35528..0d3b119a 100644 --- a/etv2/public/js/global.js +++ b/ecole/public/js/global.js @@ -108,40 +108,16 @@ function isNullOrUndefined(value) { // Fonction pour éviter la duplication du code fetch async function fetchWithJson(url, method, body = null) { - // Activer le loader si disponible - if (typeof window.showLoader === 'function') { - window.showLoader(); - } + const options = { + method: method, + headers: { 'Content-Type': 'application/json' }, + }; + if (body) options.body = JSON.stringify(body); - try { - const options = { - method: method, - headers: { 'Content-Type': 'application/json' }, - }; - if (body) options.body = JSON.stringify(body); + const response = await fetch(url, options); + if (!response.ok) throw new Error('Réseau ou erreur serveur'); - const response = await fetch(url, options); - if (!response.ok) throw new Error('Réseau ou erreur serveur'); - - const result = await response.json(); - - // Désactiver le loader si disponible - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - - return result; - } catch (error) { - // Désactiver le loader en cas d'erreur - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - // Afficher l'erreur si disponible - if (typeof window.showError === 'function') { - window.showError('Erreur lors de la communication avec le serveur. Vérifiez votre connexion.'); - } - throw error; - } + return await response.json(); } // Fonction de load du parcours en session storage @@ -158,7 +134,6 @@ async function loadParcours(numParcours) { } } catch (error) { console.error("Erreur lors de la récupération des informations parcours :", error); - // Le loader est déjà géré dans fetchWithJson } } @@ -171,7 +146,7 @@ function toggler(btn, div) { } } -// Fonction de load du contrat en session storage +// Fonction de load du parcours en session storage async function loadContrat(idContrat) { try { const data = await fetchWithJson(`/contrat/read/id/${idContrat}`, 'GET'); @@ -184,6 +159,5 @@ async function loadContrat(idContrat) { } } catch (error) { console.error("Erreur lors de la récupération des informations contrat :", error); - // Le loader est déjà géré dans fetchWithJson } } \ No newline at end of file diff --git a/ecole/public/js/historiqueParcours.js b/ecole/public/js/historiqueParcours.js new file mode 100644 index 00000000..0d4a8e05 --- /dev/null +++ b/ecole/public/js/historiqueParcours.js @@ -0,0 +1,597 @@ +// public/js/historiqueParcours.js + +// --- debounce pour éviter de spam + erreur de la base --- +function debounce(fn, delay = 300) { + let t; + + function wrapped(...args) { + clearTimeout(t); + t = setTimeout(() => fn(...args), delay); + } + + wrapped.cancel = () => clearTimeout(t); + + return wrapped; +} + +document.addEventListener("DOMContentLoaded", async function () { + // Récupération du token + const token = localStorage.getItem("jwtToken"); + + if (!token) { + throw new Error("Aucun token trouvé dans le localStorage."); + } + + const userData = parseJwt(token); + + if (!userData) { + displayError("Erreur lors de l'extraction des données utilisateur à partir du token."); + + return; + } + + // Initialiser DataTables en mode server-side (obligé pour pagination) + const table = initServerSideDataTable; + + // Exports CSV/XLSX + $("#exportCSV").on("click", function () { + const dt = $("#historiqueParcours").DataTable(); + + const payload = { + mode: "full", // export total + search: { value: "" }, + columns: dt.settings()[0].aoColumns.map((c, i) => ({ + data: i, + search: { value: "" } + })), + // on garde l'ordre actuel pour la récuperation + order: dt.order().map(([col, dir]) => ({ column: col, dir })) + }; + + fetch("/historiqueParcours/export/csv", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }) + .then(resp => { + if (!resp.ok) throw new Error("Export CSV (complet) impossible"); + + return resp.blob(); + }) + .then(blob => { + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = "historique_parcours_complet.csv"; + document.body.appendChild(a); + a.click(); + URL.revokeObjectURL(url); + a.remove(); + }) + .catch(() => displayError("Export CSV (complet) impossible")); + }); + + + $("#exportCSVFilter").on("click", function () { + const dt = $("#historiqueParcours").DataTable(); + const payload = { + mode: "filtered", // export avec les filtres/colonnes/tri actuels + search: { value: dt.search() || "" }, // recherche globale + columns: dt.settings()[0].aoColumns.map((c, i) => ({ + data: i, + search: { value: dt.column(i).search() || "" } // filtres par colonne + })), + order: dt.order().map(([col, dir]) => ({ column: col, dir })) + }; + + fetch("/historiqueParcours/export/csv", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }) + .then(resp => { + if (!resp.ok) throw new Error("Export CSV (filtré) impossible"); + return resp.blob(); + }) + .then(blob => { + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = "historique_parcours_filtre.csv"; + document.body.appendChild(a); + a.click(); + URL.revokeObjectURL(url); + a.remove(); + }) + .catch(() => displayError("Export CSV (filtré) impossible")); + }); + + + $("#exportXlxs").on("click", function () { + const dt = $("#historiqueParcours").DataTable(); + const payload = { + mode: "full", + search: { value: "" }, + columns: dt.settings()[0].aoColumns.map((c, i) => ({ data: i, search: { value: "" } })), + order: dt.order().map(([col, dir]) => ({ column: col, dir })) + }; + + fetch("/historiqueParcours/export/xls", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }) + .then(resp => { if (!resp.ok) throw new Error(); return resp.blob(); }) + .then(blob => { + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; a.download = "historique_parcours_complet.xls"; + document.body.appendChild(a); a.click(); + URL.revokeObjectURL(url); a.remove(); + }) + .catch(() => displayError("Export XLS (complet) impossible")); + }); + + + $("#exportXlxsFilter").on("click", function () { + const dt = $("#historiqueParcours").DataTable(); + const payload = { + mode: "filtered", // export avec les filtres/colonnes/tri actuels + search: { value: dt.search() || "" }, // recherche globale + columns: dt.settings()[0].aoColumns.map((c, i) => ({ + data: i, + search: { value: dt.column(i).search() || "" } // filtres par colonne + })), + order: dt.order().map(([col, dir]) => ({ column: col, dir })) + }; + + fetch("/historiqueParcours/export/xls", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(payload), + }) + .then(resp => { + if (!resp.ok) throw new Error("Export XLS (filtré) impossible"); + return resp.blob(); + }) + .then(blob => { + const url = URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = "historique_parcours_filtre.xls"; + document.body.appendChild(a); + a.click(); + URL.revokeObjectURL(url); + a.remove(); + }) + .catch(() => displayError("Export XLS (filtré) impossible")); + }); + + + // Délégation pour la génération de projet + $("#historiqueParcours").on("click", "button#btnGenerate", function () { + const numParcours = $(this).data("num-parcours"); + const produit = $(this).data("produit"); + generateProject(numParcours, produit); + }); +}); + +/* ========================= + * Helpers spécifiques server-side + * ========================= */ + +// Initialisation DataTables en server-side (recherche globale + par colonnes + tri + pagination) +function initServerSideDataTable() { + let inflightController = null; + + const table = $("#historiqueParcours").DataTable({ + processing: true, + serverSide: true, + searching: true, + paging: true, + orderCellsTop: true, + fixedHeader: true, + responsive: { details: false }, + pageLength: 10, + retrieve: true, + order: [[0, "desc"]], + searchDelay: 350, + language: { + search: "Rechercher", + lengthMenu: "Afficher _MENU_ entrées par page", + info: "Affichage de _START_ à _END_ sur _TOTAL_ entrées", + infoEmpty: "Affichage de 0 à 0 sur 0 entrée", + infoFiltered: "(filtré de _MAX_ entrées au total)", + paginate: { first: "Début", previous: "Précédent", next: "Suivant", last: "Fin" }, + }, + + ajax: function (data, callback) { + const body = { + draw: data.draw || 1, + start: data.start || 0, + length: data.length || 10, + order: data.order || [], + columns: data.columns || [], + search: data.search || { value: "" }, + }; + + + if (inflightController) inflightController.abort(); // action en cours + inflightController = new AbortController(); + + fetch("/historiqueParcours/datatable", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(body), + signal: inflightController.signal, + }) + .then(res => res.json()) + .then(payload => { + callback({ + draw: payload.draw, + recordsTotal: payload.recordsTotal, + recordsFiltered: payload.recordsTotal, + data: payload.data + }); + }) + .catch(err => { + if (err && err.name === "AbortError") return; + displayError("Failed to fetch data. Please try again later."); + callback({ draw: 0, recordsTotal: 0, recordsFiltered: 0, data: [] }); + }); + }, + + initComplete: function () { + const api = this.api(); + + // Recherche globale : debounce y compris ENTER (plus de bypass immédiat) + const $globalInput = $('div.dataTables_filter input[type="search"]'); + $globalInput.off('.DT'); // nettoie handlers datatables + const debouncedGlobal = debounce((v) => { + api.search(v); + api.ajax.reload(); + }, 350); + $globalInput.on('input keyup keydown', function () { + debouncedGlobal(this.value); + }); + + // Recherche par colonne avec DEBOUNCE (ENTER inclus) + const debouncedColSearch = debounce((i, val) => { + api.column(i).search(val); + api.ajax.reload(); + }, 350); + + $("#historiqueParcours thead tr:eq(1) th").each(function (i) { + $("input", this).on("input keyup keydown change", function () { + debouncedColSearch(i, this.value); + }); + }); + + api.on("responsive-resize", function (e, datatable, columns) { + for (let i = 0; i < columns.length; i++) { + if (columns[i]) { + $(api.column(i).header()).show(); + $(api.column(i).footer()).show(); + $($("#historiqueParcours thead tr:eq(1) th")[i]).show(); + } + else { + $(api.column(i).header()).hide(); + $(api.column(i).footer()).hide(); + $($("#historiqueParcours thead tr:eq(1) th")[i]).hide(); + } + } + }); + + $("#divToggleSearch").on("click", function () { + const $row = $("#historiqueParcours thead tr:eq(1)"); + $row.toggle(); + const $btn = $("#toggleSearch"); + if ($row.is(":visible")) { + $btn.text("ENLEVER LA RECHERCHE PAR COLONNE"); + } else { + $btn.text("ACTIVER LA RECHERCHE PAR COLONNE"); + } + }); + + // Cacher la 2e ligne au départ + $("#historiqueParcours thead tr:eq(1)").hide(); + }, + + // --- Ajout bouton détails en 1re colonne + columnDefs: [ + { + targets: 0, + render: function (data, type, row) { + const np = String(data ?? ""); + const numPacours = np.replace(/&/g,"&").replace(//g,">"); + + return '' + + '' + + '' + numPacours + '' + + ''; + + } + }, + { type: "date-uk", targets: 10 }, + { type: "date-eu", targets: 4 }, + { responsivePriority: 1, targets: -1 }, + { responsivePriority: 2, targets: -2 } + ], + }); + + // --- Toggle des détails + $('#historiqueParcours tbody').on('click', '.btn-row-details', function (e) { + e.preventDefault(); + e.stopPropagation(); + + const api = $('#historiqueParcours').DataTable(); + const $tr = $(this).closest('tr'); + + // si c'est une ligne enfant (responsive), remonter à la parent + const row = api.row($tr.hasClass('child') ? $tr.prev() : $tr); + + if (row.child.isShown()) { + row.child.hide(); + // change icône + this.textContent = "+"; + this.style.background = "#2ecc71"; + return; + } + + // récupérer le numParcours depuis la 1re cellule + const raw = row.data()?.[0] ?? ""; + const tmp = document.createElement('div'); + tmp.innerHTML = String(raw); + const numParcours = tmp.textContent.replace("+", "").trim(); + if (!numParcours) return; + + row.child('
Chargement des détails…
').show(); + this.textContent = "–"; + this.style.background = "#27ae60"; + + fetch(`/historiqueParcours/details/${encodeURIComponent(numParcours)}`) + .then(r => r.json()) + .then(payload => { + if (!payload?.valid) { + row.child('
Impossible de charger les détails.
'); + this.textContent = "+"; + this.style.background = "#2ecc71"; + return; + } + row.child(formatDetailsPanel(payload)); + }) + .catch(() => { + row.child('
Erreur de chargement.
'); + this.textContent = "+"; + this.style.background = "#2ecc71"; + }); + }); + + return table; +} + +/* ========================= + * Fonctions annexes importantes + * ========================= */ + +async function fetchUserDetails(matriculeUser) { + try { + const response = await fetch(`/user/read/matricule/${matriculeUser}`); + const data = await response.json(); + + return data.valid ? data : null; + } catch (error) { + displayError(`Erreur lors de la récupération du contrat avec le matricule ${matriculeUser} :`, error); + return null; + } +} + +async function generateProject(numParcours, produit) { + try { + const response = await fetch(`/generate/${produit}/projet/${numParcours}`, { + method: "POST", + headers: { "Content-Type": "application/json" }, + }); + + if (!response.ok) throw new Error("Erreur réseau ou serveur"); + + const disposition = response.headers.get("content-disposition"); + const filename = disposition.split(";")[1].trim().split("=")[1]; + + const blob = await response.blob(); + const url = window.URL.createObjectURL(blob); + const a = document.createElement("a"); + a.href = url; + a.download = filename; + document.body.appendChild(a); + a.click(); + window.URL.revokeObjectURL(url); + a.remove(); + } catch (error) { + console.error("Erreur lors de la génération du projet:", error); + } +} + +// Décoder le JWT +function parseJwt(token) { + try { + const base64Url = token.split(".")[1]; + const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); + const jsonPayload = decodeURIComponent( + atob(base64) + .split("") + .map(function (c) { + return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2); + }) + .join("") + ); + return JSON.parse(jsonPayload); + } catch (error) { + console.error("Erreur lors du décodage du token:", error); + return null; + } +} + +function displayError(message) { + const errorElement = document.getElementById("error"); + errorElement.textContent = message; + errorElement.style.display = "block"; +} + +// ---------- Helpers rendu ---------- + +// kv : rend l'HTML pour l'affichage des données détails +function kv(label, value) { + const v = (value === true) ? "Oui" : (value === false) ? "Non" : (value ?? "NC"); + return `
+
${label} :
+
${v}
+
`; +} + +//formatDetailsPanel : rend l'HTML pour la récuperation des données par parcours +function formatDetailsPanel(payload) { + const prodKey = (payload.produit || "").toUpperCase(); + const prod = payload.produitRecord || null; + + let body = ""; + if (prodKey === "TPPC") body = sectionTPPC(prod); + else if (prodKey === "RC") body = sectionRC(prod); + else if (prodKey === "FAC") body = sectionFAC(prod); + else body = `Produit non renseigné.`; + + return ` +
+
Détails ${prodKey || ""}
+ ${body} +
+ `; +} + +//fmtDate : formatage des Dates (sections détails) +function fmtDate(iso, withTime=true) { + if (!iso) return "NC"; + const d = new Date(iso); + const dd = String(d.getDate()).padStart(2,"0"); + const mm = String(d.getMonth()+1).padStart(2,"0"); + const yyyy = d.getFullYear(); + if (!withTime) return `${dd}/${mm}/${yyyy}`; + const hh = String(d.getHours()).padStart(2,"0"); + const mi = String(d.getMinutes()).padStart(2,"0"); + return `${dd}/${mm}/${yyyy} ${hh}:${mi}`; +} + +//gridWrap2cols : rend les détails sur 2 colonnes +function gridWrap2cols(innerLeft, innerRight) { + return `
${innerLeft}${innerRight}
`; +} + +// ---------- Sections produit ---------- + +//sectionTTPC : récupere les détails d'un parcours TPPC pour le mettre en forme (2 colonnes) +function sectionTPPC(produit) { + if (!produit) return `Fiche TPPC introuvable.`; + + const tarif = produit?.["@expand"]?.tarif || null; // tppctarif + const projet = produit?.["@expand"]?.projet || null; // tppcprojet + + const garant = Array.isArray(produit.garanties) ? produit.garanties.join(", ") : (produit.garanties || "NC"); + + // 6 infos, affichées en 2 colonnes (3 / colonne) + const gauche = [ + kv("Activité assurée", produit.actAssuree), + kv("Nombre de véhicules", produit.nbVehic), + kv("Garanties", garant), + ].join(""); + + const droite = [ + kv("Prime HT", produit.primeHT), + kv("Tarif - Référence", tarif?.tarifRef), + kv("Projet - Dates", `Effet: ${projet?.dateEffet || "NC"} / Échéance: ${projet?.dateEcheance || "NC"} / Fin: ${projet?.dateFin || "NC"}`), + ].join(""); + + return gridWrap2cols(gauche, droite); +} + + +//sectionRC : récupere les détails d'un parcours RC pour le mettre en forme (2 colonnes) +function sectionRC(produit) { + if (!produit) return `Fiche RC introuvable.`; + + //nombre d'éléments incorrect, il faut revoir quand parcours RC fait + const gauche = [ + kv("Dates", `Effet: ${produit.dateEffet || "NC"} / Échéance: ${produit.dateEcheance || "NC"} / Fin: ${produit.dateFin || "NC"}`), + kv("Tempo", produit.tempo), + kv("Type cotisation", produit.typeCot), + kv("Chiffre d'affaires", produit.ca), + + kv("Taux RCC HT / TTC", `${produit.tauxRCCHT ?? "NC"} / ${produit.tauxRCCTTC ?? "NC"}`), + kv("Taux RCE HT / TTC", `${produit.tauxRCEHT ?? "NC"} / ${produit.tauxRCETTC ?? "NC"}`), + kv("Taux total HT / TTC", `${produit.tauxTotalHT ?? "NC"} / ${produit.tauxTotalTTC ?? "NC"}`), + + kv("Cotisations RCC HT / TTC", `${produit.cotRCCHT ?? "NC"} / ${produit.cotRCCTTC ?? "NC"}`), + kv("Cotisations RCE HT / TTC", `${produit.cotRCEHT ?? "NC"} / ${produit.cotRCETTC ?? "NC"}`), + kv("PJ", produit.pj), + kv("Programme international", produit.programmeInternationale), + kv("Participation résultat", produit.participationResultat), + + kv("Cot. totale HT / TTC", `${produit.cotTotalHT ?? "NC"} / ${produit.cotTotalTTC ?? "NC"}`), + kv("Cot. frais HT / TTC", `${produit.cotFraisHT ?? "NC"} / ${produit.cotFraisTTC ?? "NC"}`), + kv("Cot. irréductible", produit.cotIrreductible), + ].join(""); + + const droite = [ + kv("Act. Voiturier", produit.actVoiturier), + kv("Act. Loueur", produit.actLoueur), + kv("Act. Multimodal", produit.actMultimodal), + kv("Act. Douane", produit.actDouane), + kv("Act. Levageur", produit.actLevageur), + kv("Act. Transitaire", produit.actTransitaire), + kv("March. Roulant", produit.marRoulant), + kv("March. Engins", produit.marEngins), + kv("March. Perissable", produit.marPerissable), + kv("Zone 1..6", `1:${produit.zone1?"Oui":"Non"} 2:${produit.zone2?"Oui":"Non"} 3:${produit.zone3?"Oui":"Non"} 4:${produit.zone4?"Oui":"Non"} 5:${produit.zone5?"Oui":"Non"} 6:${produit.zone6?"Oui":"Non"}`), + ].join(""); + + return gridWrap2cols(gauche, droite); +} + +//sectionFAC : récupere les détails d'un parcours FAC pour le mettre en forme (1 colonnes) +function sectionFAC(produit) { + if (!produit) return `Fiche FAC introuvable.`; + + //nombre d'éléments incorrect, il faut revoir quand parcours RC fait + const gauche = [ + kv("Zones 1..6", `1:${produit.zone1?"Oui":"Non"} 2:${produit.zone2?"Oui":"Non"} 3:${produit.zone3?"Oui":"Non"} 4:${produit.zone4?"Oui":"Non"} 5:${produit.zone5?"Oui":"Non"} 6:${produit.zone6?"Oui":"Non"}`), + kv("Terrestre", produit.terrestre), + kv("Maritime", produit.maritime), + kv("Aérien", produit.aerien), + kv("Postal", produit.postal), + kv("Fluvial", produit.fluvial), + kv("Type TPPC", produit.typeTPPC), + + kv("Capital max / expo / expédition / colis / TPPC", + `${produit.capitalMax ?? "NC"} / ${produit.capitalExpo ?? "NC"} / ${produit.capitalExped ?? "NC"} / ${produit.capitalColis ?? "NC"} / ${produit.capitalTPPC ?? "NC"}`), + + kv("Franchise Transport / Expo / TPPC", + `${produit.franchiseTransport ?? "NC"} / ${produit.franchiseExpo ?? "NC"} / ${produit.franchiseTPPC ?? "NC"}`), + ].join(""); + + const droite = [ + kv("Taux RO / RG", `${produit.tauxCotRO ?? "NC"} / ${produit.tauxCotRG ?? "NC"}`), + kv("CA", produit.ca), + kv("Cot. annuelle HT / TTC", `${produit.cotAnnuelleHT ?? "NC"} / ${produit.cotAnnuelleTTC ?? "NC"}`), + kv("Cot. provisoire RO / RG", `${produit.cotProvRO ?? "NC"} / ${produit.cotProvRG ?? "NC"}`), + kv("Cot. irréductible", produit.cotIrred), + kv("Cot. RO / RG / Comptant", `${produit.cotRO ?? "NC"} / ${produit.cotRG ?? "NC"} / ${produit.cotComptant ?? "NC"}`), + + kv("Dates", `Effet: ${produit.dateEffet || "NC"} / Échéance: ${produit.dateEcheance || "NC"} / Fin: ${produit.dateFin || "NC"}`), + kv("Act. assurée", produit.actAssure), + kv("Type marchandises", produit.typeMar), + ].join(""); + + return gridWrap2cols(gauche, droite); +} \ No newline at end of file diff --git a/etv2/public/js/index.js b/ecole/public/js/index.js similarity index 84% rename from etv2/public/js/index.js rename to ecole/public/js/index.js index bf5e5c9a..db26fc5d 100644 --- a/etv2/public/js/index.js +++ b/ecole/public/js/index.js @@ -4,30 +4,14 @@ document.addEventListener('DOMContentLoaded', function () { const token = localStorage.getItem('jwtToken'); if (token) { - try { - const decoded = jwt_decode(token); - const userFirstName = decoded?.userFirstName || ''; - const userLastName = decoded?.userLastName || ''; - const userMatricule = decoded?.userMatricule || ''; + const decoded = jwt_decode(token); + const userFirstName = decoded.userFirstName; + const userLastName = decoded.userLastName; + const userMatricule = decoded.userMatricule; - // Vérifier que les éléments HTML existent avant de les modifier - const firstNameItem = document.getElementById("firstNameItem"); - const lastNameItem = document.getElementById("lastNameItem"); - const userMatriculeItem = document.getElementById("userMatricule"); - - if (firstNameItem) { - firstNameItem.innerHTML = userFirstName; - } - if (lastNameItem) { - lastNameItem.innerHTML = userLastName; - } - if (userMatriculeItem) { - userMatriculeItem.innerHTML = userMatricule; - } - } catch (error) { - console.error("Erreur lors du décodage du token:", error); - // En cas d'erreur, ne pas afficher les informations utilisateur - } + document.getElementById("firstNameItem").innerHTML = userFirstName; + document.getElementById("lastNameItem").innerHTML = userLastName; + document.getElementById("userMatricule").innerHTML = userMatricule; } /* ---------- EVENNEMENT ------------ */ @@ -46,14 +30,10 @@ document.addEventListener('DOMContentLoaded', function () { if (data.valid) { window.location.href = `/parcours?numParcours=${data.numParcours}`; } else { - console.log("Erreur dans la création d'un nouveau parcours"); - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la création du parcours. Veuillez réessayer."); - } + console.log("Erreur dans la création d'un nouveau parcours") } } catch (error) { console.error("Erreur serveur lors de la création d'un nouveau parcours :", error); - // L'erreur est déjà gérée par fetchWithJson avec le loader } })(); }); @@ -70,11 +50,6 @@ document.addEventListener('DOMContentLoaded', function () { const produit = document.getElementById('produit').innerHTML.replace(/\s/g, ''); let filename; - // Activer le loader - if (typeof window.showLoader === 'function') { - window.showLoader(); - } - // Envoi de la requête POST au serveur pour générer le projet fetch(`/generate/${produit}/projet/${numParcours}`, { method: 'POST', @@ -103,22 +78,8 @@ document.addEventListener('DOMContentLoaded', function () { a.click(); // Simule un clic sur l'élément pour déclencher le téléchargement window.URL.revokeObjectURL(url); // Nettoie l'URL objet a.remove(); // Supprime l'élément a du document - - // Désactiver le loader - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } }) - .catch(error => { - console.error('Erreur lors de la génération du projet:', error); - // Désactiver le loader et afficher l'erreur - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError('Erreur lors de la génération du projet. Vérifiez votre connexion.'); - } - }); + .catch(error => console.error('Erreur lors de la génération du projet:', error)); }); // Écoute de l'événement de soumission du formulaire @@ -134,7 +95,6 @@ document.addEventListener('DOMContentLoaded', function () { // Envoi de la requête pour avoir le parcours (async () => { try { - // Le loader est déjà géré dans loadParcours via fetchWithJson await loadParcours(numParcours); // Accéder aux informations stockées du parcours diff --git a/etv2/public/js/intermediaire-form.js b/ecole/public/js/intermediaire-form.js similarity index 75% rename from etv2/public/js/intermediaire-form.js rename to ecole/public/js/intermediaire-form.js index ae1d3301..74a8ec7b 100644 --- a/etv2/public/js/intermediaire-form.js +++ b/ecole/public/js/intermediaire-form.js @@ -176,24 +176,18 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio async function handleModalExtract() { document.getElementById('modalExtraireIntermediaire').disabled = true; - - if (typeof window.showLoader === 'function') { - window.showLoader(); - } - - try { - const response = await fetch(`/client/extract`, { - method: 'POST', - body: JSON.stringify({ - "matricule": matricule, - "numClient": document.getElementById("modalNumClient").value - }), - headers: { - 'Content-Type': 'application/json', - }, - }); - const res = await response.json(); - if (res.valid) { + const response = await fetch(`/client/extract`, { + method: 'POST', + body: JSON.stringify({ + "matricule": matricule, + "numClient": document.getElementById("modalNumClient").value + }), + headers: { + 'Content-Type': 'application/json', + }, + }); + const res = await response.json(); + if (res.valid) { document.getElementById("error-extract").style.display = "none"; document.getElementById('modalExtraireIntermediaire').disabled = false; console.log(res); @@ -213,28 +207,14 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio validateField('codePostalIntermediaire', true); validateField('villeIntermediaire', true); updateSubmitButtonState('intermediaireForm'); - // close le modal - const elem = document.getElementById('modalExtractAxAPAC'); - const instance = M.Modal.getInstance(elem); - instance.close(); - } else { - document.getElementById("error-extract").style.display = "block"; - document.getElementById('modalExtraireIntermediaire').disabled = false; - console.log("Problème rencontré lors de l'extraction cl063 AxA PAC :", res.error); - if (typeof window.showError === 'function') { - window.showError("Erreur lors de l'extraction des données intermédiaire."); - } - } - } catch (error) { - console.error("Erreur lors de l'extraction intermédiaire:", error); - if (typeof window.showError === 'function') { - window.showError("Erreur lors de l'extraction. Vérifiez votre connexion."); - } - } finally { + // close le modal + const elem = document.getElementById('modalExtractAxAPAC'); + const instance = M.Modal.getInstance(elem); + instance.close(); + } else { + document.getElementById("error-extract").style.display = "block"; document.getElementById('modalExtraireIntermediaire').disabled = false; - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } + console.log("Problème rencontré lors de l'extraction cl063 AxA PAC :", res.error); } } @@ -242,44 +222,39 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio async function handleSubmitForm(event, redirection) { event.preventDefault(); - if (typeof window.showLoader === 'function') { - window.showLoader(); + let idIntermediaire = intermediaire?.id; + const numPortefeuille = document.getElementById('numPortefeuille').value; + let responseIntermediaire; + + if (numPortefeuille) { + responseIntermediaire = await fetch(`/intermediaire/read/${numPortefeuille}`, { + method: 'GET', + headers: {'Content-Type': 'application/json'}, + }); + } + const dataIntermediaire = await responseIntermediaire.json(); + + if (dataIntermediaire.valid) { + idIntermediaire = dataIntermediaire.idIntermediaire; + } else { + // Créez l'intermediaire ici si non trouvé + const responseCreateIntermediaire = await fetch(`/intermediaire/create`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + }, + }); + const dataCreateIntermediaire = await responseCreateIntermediaire.json(); + + if (dataCreateIntermediaire.valid) { + idIntermediaire = dataCreateIntermediaire.intermediaire.id; + } } - try { - let idIntermediaire = intermediaire?.id; - const numPortefeuille = document.getElementById('numPortefeuille').value; - let responseIntermediaire; + console.log(idIntermediaire); - if (numPortefeuille) { - responseIntermediaire = await fetch(`/intermediaire/read/${numPortefeuille}`, { - method: 'GET', - headers: {'Content-Type': 'application/json'}, - }); - } - const dataIntermediaire = await responseIntermediaire.json(); - - if (dataIntermediaire.valid) { - idIntermediaire = dataIntermediaire.idIntermediaire; - } else { - // Créez l'intermediaire ici si non trouvé - const responseCreateIntermediaire = await fetch(`/intermediaire/create`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - }); - const dataCreateIntermediaire = await responseCreateIntermediaire.json(); - - if (dataCreateIntermediaire.valid) { - idIntermediaire = dataCreateIntermediaire.intermediaire.id; - } - } - - console.log(idIntermediaire); - - // // Mettre à jour le contrat avec l'ID du intermediaire - if (idIntermediaire) { + // // Mettre à jour le contrat avec l'ID du intermediaire + if (idIntermediaire) { let type if (document.getElementById('courtier').checked == true) { @@ -345,35 +320,8 @@ window.initSubmenuForm = initSubmenuForm;// Module IIFE pour éviter la pollutio } else { console.log('Echec lors de la mise à jour de la relation id contrat - id client :', data); - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la mise à jour du contrat."); - } - } - }) - .catch(error => { - console.error("Erreur lors de la mise à jour du contrat:", error); - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la mise à jour. Vérifiez votre connexion."); } }); - } else { - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - } - } catch (error) { - console.error("Erreur lors de la soumission du formulaire intermédiaire:", error); - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la soumission. Vérifiez votre connexion."); } } } diff --git a/etv2/public/js/json/json-verif-form.js b/ecole/public/js/json/json-verif-form.js similarity index 100% rename from etv2/public/js/json/json-verif-form.js rename to ecole/public/js/json/json-verif-form.js diff --git a/etv2/public/js/jwt-decode.js b/ecole/public/js/jwt-decode.js similarity index 100% rename from etv2/public/js/jwt-decode.js rename to ecole/public/js/jwt-decode.js diff --git a/etv2/public/js/nav-parcours.js b/ecole/public/js/nav-parcours.js similarity index 91% rename from etv2/public/js/nav-parcours.js rename to ecole/public/js/nav-parcours.js index 32b5159c..adf83f24 100644 --- a/etv2/public/js/nav-parcours.js +++ b/ecole/public/js/nav-parcours.js @@ -79,7 +79,6 @@ document.addEventListener('DOMContentLoaded', function() { document.getElementById('step-' + key).classList.add('line') } } - showLoader(); // Charger le formulaire associé fetch(fetchUrl) @@ -120,15 +119,8 @@ document.addEventListener('DOMContentLoaded', function() { inputChanged = true }) }) - hideLoader(); }) - .catch(error => { - console.error('Error:', error); - hideLoader(); - if (typeof window.showError === 'function') { - window.showError("Erreur lors du chargement du formulaire. Vérifiez votre connexion."); - } - }); + .catch(error => console.error('Error:', error)); //A MODIFIER UNE FOIS QUE RC SERA ADAPTé AU PARCOURS if (produit == "RC") { @@ -163,9 +155,6 @@ document.addEventListener('DOMContentLoaded', function() { const parcours = JSON.parse(sessionStorage.getItem('parcours')); var produit = parcours["@expand"].contrat.produit - const btn = this // bouton "générer projet" - btn.disabled = true; // le desactiver le temps du téléchargement - var fileName switch (produit.toLowerCase()) { case 'fac': @@ -189,9 +178,6 @@ document.addEventListener('DOMContentLoaded', function() { link.download = fileName; link.click(); }) - .finally(() => { - btn.disabled = false; // réactiver le bouton a la fin du téléchargement - }) .catch(error => console.error('Error downloading file:', error)); }); @@ -202,9 +188,6 @@ document.addEventListener('DOMContentLoaded', function() { const parcours = JSON.parse(sessionStorage.getItem('parcours')); let produit = parcours["@expand"].contrat.produit - const btn = this // bouton "générer projet" - btn.disabled = true; // le desactiver le temps du téléchargement - // Envoi de la requête POST au serveur pour générer le projet fetch(`/generate/${produit}/projet/${numParcours}`, { method: 'POST', @@ -234,9 +217,6 @@ document.addEventListener('DOMContentLoaded', function() { window.URL.revokeObjectURL(url); // Nettoie l'URL objet a.remove(); // Supprime l'élément a du document }) - .finally(() => { - btn.disabled = false; // réactiver le bouton a la fin du téléchargement - }) .catch(error => console.error('Erreur lors de la génération du projet:', error)); }); @@ -247,9 +227,6 @@ document.addEventListener('DOMContentLoaded', function() { const parcours = JSON.parse(sessionStorage.getItem('parcours')); let produit = parcours["@expand"].contrat.produit - const btn = this // bouton "générer déclinaison tarifaire" - btn.disabled = true; // le desactiver le temps du téléchargement - // Envoi de la requête POST au serveur pour générer le projet fetch(`/generate/${produit}/tarif/${numParcours}`, { method: 'POST', @@ -280,9 +257,6 @@ document.addEventListener('DOMContentLoaded', function() { window.URL.revokeObjectURL(url); // Nettoie l'URL objet a.remove(); // Supprime l'élément a du document }) - .finally(() => { - btn.disabled = false; // réactiver le bouton a la fin du téléchargement - }) .catch(error => console.error('Erreur lors de la génération du projet:', error)); }); diff --git a/etv2/public/js/parcours.js b/ecole/public/js/parcours.js similarity index 100% rename from etv2/public/js/parcours.js rename to ecole/public/js/parcours.js diff --git a/etv2/public/js/projet-form-fac.js b/ecole/public/js/projet-form-fac.js similarity index 100% rename from etv2/public/js/projet-form-fac.js rename to ecole/public/js/projet-form-fac.js diff --git a/etv2/public/js/projet-form-rc.js b/ecole/public/js/projet-form-rc.js similarity index 100% rename from etv2/public/js/projet-form-rc.js rename to ecole/public/js/projet-form-rc.js diff --git a/etv2/public/js/projet-form-tppc.js b/ecole/public/js/projet-form-tppc.js similarity index 100% rename from etv2/public/js/projet-form-tppc.js rename to ecole/public/js/projet-form-tppc.js diff --git a/etv2/public/js/tarif-form-tppc.js b/ecole/public/js/tarif-form-tppc.js similarity index 100% rename from etv2/public/js/tarif-form-tppc.js rename to ecole/public/js/tarif-form-tppc.js diff --git a/etv2/public/js/verif-form.js b/ecole/public/js/verif-form.js similarity index 100% rename from etv2/public/js/verif-form.js rename to ecole/public/js/verif-form.js diff --git a/etv2/src/app.js b/ecole/src/app.js similarity index 100% rename from etv2/src/app.js rename to ecole/src/app.js diff --git a/etv2/src/constantes/json-modulateur-tppc.js b/ecole/src/constantes/json-modulateur-tppc.js similarity index 100% rename from etv2/src/constantes/json-modulateur-tppc.js rename to ecole/src/constantes/json-modulateur-tppc.js diff --git a/etv2/src/controllers/authController.js b/ecole/src/controllers/authController.js similarity index 100% rename from etv2/src/controllers/authController.js rename to ecole/src/controllers/authController.js diff --git a/etv2/src/controllers/clientController.js b/ecole/src/controllers/clientController.js similarity index 100% rename from etv2/src/controllers/clientController.js rename to ecole/src/controllers/clientController.js diff --git a/etv2/src/controllers/contratController.js b/ecole/src/controllers/contratController.js similarity index 100% rename from etv2/src/controllers/contratController.js rename to ecole/src/controllers/contratController.js diff --git a/etv2/src/controllers/facController.js b/ecole/src/controllers/facController.js similarity index 100% rename from etv2/src/controllers/facController.js rename to ecole/src/controllers/facController.js diff --git a/etv2/src/controllers/generateFacController.js b/ecole/src/controllers/generateFacController.js similarity index 100% rename from etv2/src/controllers/generateFacController.js rename to ecole/src/controllers/generateFacController.js diff --git a/etv2/src/controllers/generateRcController.js b/ecole/src/controllers/generateRcController.js similarity index 99% rename from etv2/src/controllers/generateRcController.js rename to ecole/src/controllers/generateRcController.js index 5e69134f..47a4a468 100644 --- a/etv2/src/controllers/generateRcController.js +++ b/ecole/src/controllers/generateRcController.js @@ -84,7 +84,7 @@ router.post("/rc/projet/:numParcours", async (req, res) => { dateNow = moment().format("DD MMMM YYYY"); // Cas une ou plusieurs zone(s) spécifique(s) + cas zone456 - if (hasMondeEntier == false && (rc.actVoiturier || rc.actLoueur || rc.actDouane || rc.actDemPar || rc.actDemParDom || rc.actDemParAct || rc.actDemEntr || rc.actDemInterne || rc.actGardeMeuble || rc.actEntDep || rc.actPrestaLog || rc.actLevageur)) { + if (hasMondeEntier == false && (rc.actVoiturier || rc.actLoueur || rc.actDouane || rc.actDemPar || rc.actDemParDom || rc.actDemParAct || rc.actDemEntr || rc.actDemInterne || rc.actGardeMeuble || rc.actEntDep || rc.actPrestaLog || rc.actLevageur || rc.actDemParAdv)) { if (rc.zone1) { hasZone1 = true; } diff --git a/etv2/src/controllers/generateTppcController.js b/ecole/src/controllers/generateTppcController.js similarity index 100% rename from etv2/src/controllers/generateTppcController.js rename to ecole/src/controllers/generateTppcController.js diff --git a/ecole/src/controllers/historiqueParcoursController.js b/ecole/src/controllers/historiqueParcoursController.js new file mode 100644 index 00000000..6f34bc0f --- /dev/null +++ b/ecole/src/controllers/historiqueParcoursController.js @@ -0,0 +1,489 @@ +// controllers/historiqueParcoursController.js +const express = require("express"); +const router = express.Router(); +const renderPage = require("../utils/renderHelper"); +const logger = require("../utils/logger"); +const parcoursService = require("../services/parcoursService"); + +// --- helper interne (permet le filtre et le trie de PB)--- +function buildPocketBaseFilterAndSort({ regions = [], search = { value: "" }, columns = [], order = [] }) { + const parts = []; + + // recherche globale + const q = (search?.value || "").trim(); + if (q) { + const esc = q.replace(/"/g, '\\"'); + parts.push(`( + numParcours ~ "${esc}" + || contrat.numSaisine ~ "${esc}" + || contrat.numContrat ~ "${esc}" + || contrat.produit ~ "${esc}" + || contrat.type ~ "${esc}" + || contrat.intermediaire.nom ~ "${esc}" + || contrat.intermediaire.numPortefeuille ~ "${esc}" + || dernierUtilisateur.prenom ~ "${esc}" + || dernierUtilisateur.nom ~ "${esc}" + )`); + } + + // recherche par colonne + const colFilter = (idx, fieldPaths) => { + const v = (columns[idx]?.search?.value || "").trim(); + if (!v) return null; + const esc = v.replace(/"/g, '\\"'); + return `(${fieldPaths.map(fp => `${fp} ~ "${esc}"`).join(" || ")})`; + }; + const pushIf = (v) => { if (v) parts.push(v); }; + + pushIf(colFilter(0, ["numParcours"])); + pushIf(colFilter(1, ["created"])); + pushIf(colFilter(2, ["dernierUtilisateur.matricule"])); + pushIf(colFilter(3, ["dernierUtilisateur.prenom", "dernierUtilisateur.nom"])); + pushIf(colFilter(4, ["dernierUtilisateur.region.nom"])); + pushIf(colFilter(5, ["contrat.numSaisine"])); + pushIf(colFilter(6, ["contrat.numContrat"])); + pushIf(colFilter(7, ["contrat.produit"])); + pushIf(colFilter(8, ["contrat.type"])); + pushIf(colFilter(9, ["contrat.intermediaire.numPortefeuille"])); + pushIf(colFilter(10, ["contrat.intermediaire.nom"])); + pushIf(colFilter(11, ["contrat.client.numClient"])); + pushIf(colFilter(12, ["contrat.client.nom"])); + + const filter = parts.length ? parts.join(" && ") : ""; + + // tri + const sortMap = { + 0: "numParcours", + 1: "created", + 2: "dernierUtilisateur.matricule", + 4: "dernierUtilisateur.region.nom", + 6: "contrat.numContrat", + 7: "contrat.produit", + 10: "contrat.intermediaire.nom", + 12: "contrat.client.nom" + }; + let sort = "-created"; + if (order && order.length > 0) { + const { column, dir } = order[0]; + const field = sortMap[column]; + if (field) sort = (dir === "desc" ? "-" : "") + field; + } + + return { filter, sort }; +} + +// Page +router.get("/", (req, res) => { + renderPage("historiqueParcours.ejs", res);}); + +/** + * /regionUser : requête sur la region de l'user actuel + */ +router.get("/:regionUser", async (req, res) => { + try { + const { regionUser } = req.params; + const data = await parcoursService.getParcoursByRegionsPage([regionUser], 1, 10, { filter: "", sort: "-created" }); + if (data) { + res.json({ valid: true, data }); + } else { + res.json({ valid: false }); + } + } catch (error) { + logger.log("error", error); + res.status(500).json({ + valid: false, + error: "Erreur lors de la récupération des parcours.", + }); + } +}); + +/** + * /datatable : DataTables server-side (gestion de pagination) + */ +router.post("/datatable", async (req, res) => { + try { + const { + draw = 1, + start = 0, + length = 10, + regions = [], + search = { value: "" }, + columns = [], + order = [] + } = req.body || {}; + + const page = Math.floor(start / length) + 1; // nb de page + const perPage = Number(length) || 10; //nb d'éléments par page + + const { filter, sort } = buildPocketBaseFilterAndSort({ search, columns, order }); // construction du filtrage côté Back + + const result = await parcoursService.getParcoursByRegionsPage([], page, perPage, { filter, sort }); // recherche effective + + //formatage de date + const fmtFR = (iso) => { + const d = new Date(iso); + const dd = String(d.getDate()).padStart(2, "0"); + const mm = String(d.getMonth() + 1).padStart(2, "0"); + const yyyy = d.getFullYear(); + return `${dd}/${mm}/${yyyy}`; + }; + + const rows = result.items.map((parcours) => { // retour de la data + const contrat = parcours["@expand"]?.contrat || null; + const client = contrat ? (contrat["@expand"]?.client || null) : null; + const lastUser = parcours["@expand"]?.dernierUtilisateur; + const region = lastUser?.["@expand"]?.region; + const produit = contrat ? (contrat.produit ? contrat.produit : "NC") : "NC"; + + return [ + parcours.numParcours, + fmtFR(parcours.created), + lastUser?.matricule || "NC", + lastUser ? `${lastUser.prenom} ${lastUser.nom}` : "NC", + region ? region.nom : "NC", + contrat ? (contrat.numSaisine || "NC") : "NC", + contrat ? (contrat.numContrat || "NC") : "NC", + contrat ? (contrat.produit || "NC") : "NC", + contrat ? (contrat.type || "NC") : "NC", + contrat ? (contrat["@expand"]?.intermediaire?.numPortefeuille || "NC") : "NC", + contrat ? (contrat["@expand"]?.intermediaire?.nom || "NC") : "NC", + client ? (client.numClient || "NC") : "NC", + client ? (client.nom || "NC") : "NC", + ``, + `` + ]; + }); + + res.json({ + draw: Number(draw), + recordsTotal: result.totalItems, + recordsFiltered: result.totalItems, + data: rows + }); + } catch (error) { + logger.log("error", error); + res.status(500).json({ draw: 0, recordsTotal: 0, recordsFiltered: 0, data: [] }); + } +}); + +/** + * EXPORT CSV + */ + +router.post("/export/csv", async (req, res) => { + let aborted = false; + req.on("aborted", () => { + aborted = true; + logger.log("warn", "Client a interrompu la connexion pendant l'export CSV"); + }); + res.on("finish", () => { + logger.log("info", "Export CSV terminé"); + }); + + try { + const { + regions = [], + search = { value: "" }, + columns = [], + order = [], + mode = "filtered", + } = req.body || {}; + + const effective = (mode === "full") + ? { regions: [], search: { value: "" }, columns: [], order } + : { regions, search, columns, order }; + + const { filter, sort } = buildPocketBaseFilterAndSort(effective); + + res.setHeader("Content-Type", "text/csv; charset=utf-8"); + res.setHeader("Content-Disposition", `attachment; filename="historique_parcours.csv"`); + + // BOM UTF-8 pour Excel + res.write("\uFEFF"); + + const headers = [ + "Numéro du Parcours","Date de Création","Matricule","Dernier Utilisateur","Region", + "Numéro Saisine","Numéro Contrat","Produit","Type","Numéro de Portefeuille", + "Nom Intermediaire","Numéro de Client","Nom Client" + ]; + res.write(headers.join(";") + "\n"); + + const fmtFR = (iso) => { + const d = new Date(iso); + const dd = String(d.getDate()).padStart(2, "0"); + const mm = String(d.getMonth() + 1).padStart(2, "0"); + const yyyy = d.getFullYear(); + return `${dd}/${mm}/${yyyy}`; + }; + + const perPage = 1000; + let page = 1; + + while (true) { + if (aborted) { + break; + } + + let result; + try { + result = await parcoursService.getParcoursByRegionsPage( + effective.regions, + page, + perPage, + { filter, sort } + ); + } catch (err) { + logger.log("error", err); + break; + } + + for (const parcours of result.items) { + if (aborted) break; + + const contrat = parcours["@expand"]?.contrat || null; + const client = contrat ? (contrat["@expand"]?.client || null) : null; + const lastUser = parcours["@expand"]?.dernierUtilisateur; + const region = lastUser?.["@expand"]?.region; + + const row = [ + parcours.numParcours, + fmtFR(parcours.created), + lastUser?.matricule || "NC", + lastUser ? `${lastUser.prenom} ${lastUser.nom}` : "NC", + region ? region.nom : "NC", + contrat ? (contrat.numSaisine || "NC") : "NC", + contrat ? (contrat.numContrat || "NC") : "NC", + contrat ? (contrat.produit || "NC") : "NC", + contrat ? (contrat.type || "NC") : "NC", + contrat ? (contrat["@expand"]?.intermediaire?.numPortefeuille || "NC") : "NC", + contrat ? (contrat["@expand"]?.intermediaire?.nom || "NC") : "NC", + client ? (client.numClient || "NC") : "NC", + client ? (client.nom || "NC") : "NC", + ]; + + const safe = row.map(v => String(v).replaceAll(";", ",").replace(/\r?\n/g, " ")); + try { + res.write(safe.join(";") + "\n"); + } catch (werr) { + logger.log("error", werr); + aborted = true; + break; + } + } + + if (aborted || page >= result.totalPages) break; + page++; + } + + if (!aborted) { + res.end(); + } + } catch (error) { + logger.log("error", error); + if (!res.headersSent) { + return res.status(500).send("Erreur export CSV"); + } + try { res.end(); } catch {} + } +}); + + +// ====== UTILITAIRES XML/XLS ====== + +function xmlEsc(s) { + return String(s ?? "") + .replace(/&/g, "&") + .replace(//g, ">") + .replace(/"/g, """) + .replace(/'/g, "'"); +} + +function cellXml(v) { + return `${xmlEsc(v)}`; +} + +function rowXml(cells) { + return `${cells.map(cellXml).join("")}`; +} + +/** + * EXPORT XLS (SpreadsheetML 2003) !!XLXS impossible car trop complexe pour être fait a la main, XLS toujours supporté sur Excel et aucune perte de data + */ +router.post("/export/xls", async (req, res) => { + let aborted = false; + req.on("aborted", () => { + aborted = true; + logger.log("warn", "Client a interrompu la connexion pendant l'export XLS"); + }); + res.on("finish", () => { + logger.log("info", "Export XLS terminé"); + }); + + try { + const { + regions = [], + search = { value: "" }, + columns = [], + order = [], + mode = "filtered" + } = req.body || {}; + + const effective = (mode === "full") + ? { regions: [], search: { value: "" }, columns, order } + : { regions, search, columns, order }; + + const { filter, sort } = buildPocketBaseFilterAndSort(effective); + + const headers = [ + "Numéro du Parcours","Date de Création","Matricule","Dernier Utilisateur","Region", + "Numéro Saisine","Numéro Contrat","Produit","Type","Numéro de Portefeuille", + "Nom Intermediaire","Numéro de Client","Nom Client" + ]; + + const fmtFR = (iso) => { + const d = new Date(iso); + const dd = String(d.getDate()).padStart(2, "0"); + const mm = String(d.getMonth() + 1).padStart(2, "0"); + const yyyy = d.getFullYear(); + return `${dd}/${mm}/${yyyy}`; + }; + + const perPage = 1000; // meme limite de chunk que CSV + let page = 1; + + const first = await parcoursService.getParcoursByRegionsPage( + effective.regions, page, perPage, { filter, sort } + ); + + const fileName = (mode === "full") + ? "historique_parcours_complet.xls" + : "historique_parcours_filtre.xls"; + + res.setHeader("Content-Type", "application/vnd.ms-excel; charset=utf-8"); + res.setHeader("Content-Disposition", `attachment; filename="${fileName}"`); + + // HEADER SpreadsheetML 2003 !! necessaire pour être lu comme XLS via Excel + res.write( +` + + + + + + + + +` + ); + + res.write( + `` + + headers.map(h => `${xmlEsc(h)}`).join("") + + `\n` + ); + + const writePage = (result) => { // création des données sur xls + for (const parcours of result.items) { + const contrat = parcours["@expand"]?.contrat || null; + const client = contrat ? (contrat["@expand"]?.client || null) : null; + const lastUser = parcours["@expand"]?.dernierUtilisateur; + const region = lastUser?.["@expand"]?.region; + + const row = [ + parcours.numParcours, + fmtFR(parcours.created), + lastUser?.matricule || "NC", + lastUser ? `${lastUser.prenom} ${lastUser.nom}` : "NC", + region ? region.nom : "NC", + contrat ? (contrat.numSaisine || "NC") : "NC", + contrat ? (contrat.numContrat || "NC") : "NC", + contrat ? (contrat.produit || "NC") : "NC", + contrat ? (contrat.type || "NC") : "NC", + contrat ? (contrat["@expand"]?.intermediaire?.numPortefeuille || "NC") : "NC", + contrat ? (contrat["@expand"]?.intermediaire?.nom || "NC") : "NC", + client ? (client.numClient || "NC") : "NC", + client ? (client.nom || "NC") : "NC", + ].map(v => String(v).replace(/\r?\n/g, " ")); + + res.write(rowXml(row) + "\n"); + } + }; + + writePage(first); + + // itérations sur les pages suivantes + const totalPages = first.totalPages || 1; + while (page < totalPages) { + page++; + try { + const next = await parcoursService.getParcoursByRegionsPage( + effective.regions, page, perPage, { filter, sort } + ); + writePage(next); + } catch (e) { + logger.log("error", e); + break; + } + } + + // FOOTER SpreadsheetML + res.write( +`
+
+
` + ); + res.end(); + + } catch (error) { + logger.log("error", error); + if (!res.headersSent) return res.status(500).send("Erreur export XLS"); + try { res.end(); } catch {} + } +}); + +// Détails complets d'une ligne (parcours + contrat + produit) +router.get("/details/:numParcours", async (req, res) => { + try { + const { numParcours } = req.params; + const parcours = await parcoursService.getDeepDetailsByNumParcours(numParcours); + if (!parcours) return res.json({ valid: false, error: "Parcours introuvable" }); + + // pour lisibilité côté front + const contrat = parcours?.["@expand"]?.contrat || null; + const produit = (contrat?.produit || "").toUpperCase(); + + let produitRecord = null; + if (produit === "TPPC") produitRecord = contrat?.["@expand"]?.tppc || null; + if (produit === "RC") produitRecord = contrat?.["@expand"]?.rc || null; + if (produit === "FAC") produitRecord = contrat?.["@expand"]?.fac || null; + + return res.json({ + valid: true, + produit, + parcours, + contrat, + produitRecord, + }); + } catch (e) { + logger.log("error", e); + return res.status(500).json({ valid: false, error: "Erreur recherche détails" }); + } +}); + + +module.exports = router; \ No newline at end of file diff --git a/etv2/src/controllers/intermediaireController.js b/ecole/src/controllers/intermediaireController.js similarity index 100% rename from etv2/src/controllers/intermediaireController.js rename to ecole/src/controllers/intermediaireController.js diff --git a/etv2/src/controllers/navParcoursController.js b/ecole/src/controllers/navParcoursController.js similarity index 100% rename from etv2/src/controllers/navParcoursController.js rename to ecole/src/controllers/navParcoursController.js diff --git a/etv2/src/controllers/parcoursController.js b/ecole/src/controllers/parcoursController.js similarity index 100% rename from etv2/src/controllers/parcoursController.js rename to ecole/src/controllers/parcoursController.js diff --git a/etv2/src/controllers/rcController.js b/ecole/src/controllers/rcController.js similarity index 100% rename from etv2/src/controllers/rcController.js rename to ecole/src/controllers/rcController.js diff --git a/etv2/src/controllers/regionController.js b/ecole/src/controllers/regionController.js similarity index 100% rename from etv2/src/controllers/regionController.js rename to ecole/src/controllers/regionController.js diff --git a/etv2/src/controllers/rootController.js b/ecole/src/controllers/rootController.js similarity index 100% rename from etv2/src/controllers/rootController.js rename to ecole/src/controllers/rootController.js diff --git a/etv2/src/controllers/tppcController.js b/ecole/src/controllers/tppcController.js similarity index 100% rename from etv2/src/controllers/tppcController.js rename to ecole/src/controllers/tppcController.js diff --git a/etv2/src/controllers/userController.js b/ecole/src/controllers/userController.js similarity index 100% rename from etv2/src/controllers/userController.js rename to ecole/src/controllers/userController.js diff --git a/etv2/src/controllers/utilsController.js b/ecole/src/controllers/utilsController.js similarity index 100% rename from etv2/src/controllers/utilsController.js rename to ecole/src/controllers/utilsController.js diff --git a/ecole/src/db/Lancement_Pocketbase 1.cmd b/ecole/src/db/Lancement_Pocketbase 1.cmd new file mode 100644 index 00000000..9e0de785 --- /dev/null +++ b/ecole/src/db/Lancement_Pocketbase 1.cmd @@ -0,0 +1,2 @@ +Pocketbase_0.7.5.exe serve --http="127.0.0.1:8091" +pause \ No newline at end of file diff --git a/ecole/src/db/Pocketbase_0.7.5.exe b/ecole/src/db/Pocketbase_0.7.5.exe new file mode 100644 index 00000000..d44458ba Binary files /dev/null and b/ecole/src/db/Pocketbase_0.7.5.exe differ diff --git a/etv2/src/db/db-connect.js b/ecole/src/db/db-connect.js similarity index 100% rename from etv2/src/db/db-connect.js rename to ecole/src/db/db-connect.js diff --git a/etv2/src/db/db.cjs b/ecole/src/db/db.cjs similarity index 100% rename from etv2/src/db/db.cjs rename to ecole/src/db/db.cjs diff --git a/etv2/src/db/pb_data/data.db b/ecole/src/db/pb_data/data.db similarity index 81% rename from etv2/src/db/pb_data/data.db rename to ecole/src/db/pb_data/data.db index 1eb05ad2..d7998fd6 100644 Binary files a/etv2/src/db/pb_data/data.db and b/ecole/src/db/pb_data/data.db differ diff --git a/ecole/src/db/pb_data/data.db-shm b/ecole/src/db/pb_data/data.db-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/ecole/src/db/pb_data/data.db-shm differ diff --git a/ecole/src/db/pb_data/data.db-wal b/ecole/src/db/pb_data/data.db-wal new file mode 100644 index 00000000..e69de29b diff --git a/etv2/src/db/pb_data/logs.db b/ecole/src/db/pb_data/logs.db similarity index 98% rename from etv2/src/db/pb_data/logs.db rename to ecole/src/db/pb_data/logs.db index d962aa27..b84bdabd 100644 Binary files a/etv2/src/db/pb_data/logs.db and b/ecole/src/db/pb_data/logs.db differ diff --git a/ecole/src/db/pb_data/logs.db-shm b/ecole/src/db/pb_data/logs.db-shm new file mode 100644 index 00000000..fe9ac284 Binary files /dev/null and b/ecole/src/db/pb_data/logs.db-shm differ diff --git a/ecole/src/db/pb_data/logs.db-wal b/ecole/src/db/pb_data/logs.db-wal new file mode 100644 index 00000000..e69de29b diff --git a/etv2/src/db/script/launch.asp b/ecole/src/db/script/launch.asp similarity index 100% rename from etv2/src/db/script/launch.asp rename to ecole/src/db/script/launch.asp diff --git a/etv2/src/db/script/launch.aspx b/ecole/src/db/script/launch.aspx similarity index 100% rename from etv2/src/db/script/launch.aspx rename to ecole/src/db/script/launch.aspx diff --git a/etv2/src/db/script/web.config b/ecole/src/db/script/web.config similarity index 100% rename from etv2/src/db/script/web.config rename to ecole/src/db/script/web.config diff --git a/etv2/src/middlewares/jwtMiddleware.js b/ecole/src/middlewares/jwtMiddleware.js similarity index 100% rename from etv2/src/middlewares/jwtMiddleware.js rename to ecole/src/middlewares/jwtMiddleware.js diff --git a/etv2/src/routes.js b/ecole/src/routes.js similarity index 100% rename from etv2/src/routes.js rename to ecole/src/routes.js diff --git a/etv2/src/server.js b/ecole/src/server.js similarity index 100% rename from etv2/src/server.js rename to ecole/src/server.js diff --git a/etv2/src/services/clientService.js b/ecole/src/services/clientService.js similarity index 100% rename from etv2/src/services/clientService.js rename to ecole/src/services/clientService.js diff --git a/etv2/src/services/contratService.js b/ecole/src/services/contratService.js similarity index 100% rename from etv2/src/services/contratService.js rename to ecole/src/services/contratService.js diff --git a/etv2/src/services/facService.js b/ecole/src/services/facService.js similarity index 100% rename from etv2/src/services/facService.js rename to ecole/src/services/facService.js diff --git a/etv2/src/services/globalService.js b/ecole/src/services/globalService.js similarity index 100% rename from etv2/src/services/globalService.js rename to ecole/src/services/globalService.js diff --git a/etv2/src/services/intermediaireService.js b/ecole/src/services/intermediaireService.js similarity index 100% rename from etv2/src/services/intermediaireService.js rename to ecole/src/services/intermediaireService.js diff --git a/ecole/src/services/parcoursService.js b/ecole/src/services/parcoursService.js new file mode 100644 index 00000000..7899a55c --- /dev/null +++ b/ecole/src/services/parcoursService.js @@ -0,0 +1,238 @@ +// services/parcoursService.js +const { db } = require("../db/db-connect"); +const logger = require("../utils/logger"); +const globalService = require("../services/globalService"); + +/** + * Récupère un parcours par son numéro (avec expand utiles) + */ +async function getParcoursByNumParcours(numParcours) { + const criteria = { + filter: `numParcours='${numParcours}'`, + expand: `dernierUtilisateur.region, contrat, contrat.client, contrat.intermediaire` + }; + return globalService.fetchInfoByCriteria("parcours", criteria); +} + +/** + * Full list (batch côté PocketBase). | Fetch l'ensemble de la BD via chunk "batch" + */ +async function getParcoursFullList({ filter, sort, expand, fields, batch = 500, skipTotal = true }) { + return db.records.getFullList("parcours", { + filter: filter || "", + sort: sort || "-created", + expand, + fields, + batch, // taille interne des sous-requêtes + skipTotal, // évite le COUNT total (évite calcul inutile + gain de temps) + }); +} +/** + * Pagination multi-régions + filtres/tri optionnels (server-side DataTables) + * – Parcours une seule fois db par requête + * @param {string[]} regions + * @param {number} page + * @param {number} perPage + * @param {{filter?: string, sort?: string}} opts + */ +async function getParcoursByRegionsPage(regions = [], page = 1, perPage = 10, opts = {}) { + try { + let regFilter = ""; + if (Array.isArray(regions) && regions.length > 0) { + const ors = regions.map(r => `dernierUtilisateur.region.nom = "${r}"`); + regFilter = `(${ors.join(" || ")})`; + } + + const filter = [regFilter, opts.filter].filter(Boolean).join(" && "); + + const list = await db.records.getList("parcours", page, perPage, { + sort: opts.sort || "-created", + filter: filter || "", + //nécessaire pour l'export et la table + expand: "contrat, contrat.client, contrat.intermediaire, dernierUtilisateur.region", + }); + + return { + page: list.page, + perPage: list.perPage, + totalItems: list.totalItems, + totalPages: list.totalPages, + items: list.items, + }; + } catch (error) { + logger.log('error', error); + throw error; + } +} + +/** + * Création d'un parcours vide + */ +async function createNewEmptyParcours(numParcours) { + try { + const data = { ["numParcours"]: numParcours }; + const record = await db.records.create("parcours", data); + if (record) { + return record.id; + } else { + return null; + } + } catch (error) { + logger.log("error", error); + return null; + } +} + +/** + * MAJ d'un champ d'un parcours + */ +async function updateFieldValueParcours(id, field, value) { + try { + const data = { [field]: value }; + const record = await db.records.update("parcours", id, data); + if (record) { + return record.id; + } else { + return null; + } + } catch (error) { + logger.log("error", error); + return null; + } +} + +/** + * Génère le prochain numéro de parcours + */ +async function getNewParcoursNumber() { + try { + const list = await db.records.getList("parcours", 1, 1, { sort: "-numParcours" }); + const last = list?.items?.[0]; + if (!last?.numParcours) return null; + + const numericValue = parseInt(String(last.numParcours).substring(1), 10); + if (Number.isNaN(numericValue)) return null; + + const next = numericValue + 1; + return "P" + next.toString().padStart(9, "0"); + } catch (error) { + logger.log("error", error); + return null; + } +} + +// --- Section détails profonds (contrat + fiche produit) --- // + +/** + * Récupère un parcours (via numParcours) avec les expands utiles pour détails. + */ +async function getParcoursForDetails(numParcours) { + try { + const list = await db.records.getList("parcours", 1, 1, { + filter: `numParcours='${numParcours}'`, + expand: "contrat, contrat.client, contrat.intermediaire, dernierUtilisateur.region", + }); + return list?.items?.[0] || null; + } catch (e) { + logger.log("error", e); + return null; + } +} + +/** + * Mappe un libellé produit vers la collection PocketBase (à ajuster si changement de parcours). + */ +function mapProduitToCollection(produitRaw = "") { + const p = String(produitRaw || "").trim().toUpperCase(); + const map = { + "TPPC": "tppc", + "RC": "rc", + "FAC": "fac", + }; + return map[p] || null; +} + +/** + * Récupère la fiche produit pour un contrat donné. + * On tente d'abord par relation "contrat = contratId" si elle existe, + * sinon fallback par "numContrat = x" si jamais la fiche stocke le numéro. + */ +async function getProduitRecordForContrat(contrat, opts = {}) { + try { + if (!contrat) return null; + const collection = mapProduitToCollection(contrat.produit); + if (!collection) return null; + + // Tente via une relation directe "contrat" (champ le plus propre) + try { + const record = await db.records.getFirstListItem(collection, `contrat='${contrat.id}'`, { + }); + if (record) return record; + } catch (_) { /* ignore, on tente le fallback */ } + + // Fallback + if (contrat.numContrat) { + try { + const record = await db.records.getFirstListItem(collection, `numContrat='${contrat.numContrat}'`, {}); + if (record) return record; + } catch (_) { /* ignore */ } + } + + return null; + } catch (e) { + logger.log("error", e); + return null; + } +} + +/** + * reformatage texte - a virer + */ +function escPB(s = "") { + return String(s).replace(/"/g, '\\"'); +} + + +/** + * Détails complets: parcours + contrat + fiche produit + */ +async function getDeepDetailsByNumParcours(numParcours) { + try { + const filter = `numParcours = "${escPB(numParcours)}"`; + + const list = await db.records.getList("parcours", 1, 1, { + filter, + expand: [ + "contrat", + "contrat.client", + "contrat.intermediaire", + "dernierUtilisateur.region", + // produit lié + "contrat.tppc", + "contrat.rc", + "contrat.fac", + // sous-relations TPPC + "contrat.tppc.tarif", + "contrat.tppc.projet", + ].join(","), + }); + + return list?.items?.[0] || null; + } catch (e) { + logger.log("error", e); + return null; + } +} + +module.exports = { + getNewParcoursNumber, + getParcoursByNumParcours, + createNewEmptyParcours, + updateFieldValueParcours, + getParcoursByRegionsPage, + getParcoursFullList, + getParcoursForDetails, + getProduitRecordForContrat, + getDeepDetailsByNumParcours, + mapProduitToCollection, +}; \ No newline at end of file diff --git a/etv2/src/services/rcService.js b/ecole/src/services/rcService.js similarity index 100% rename from etv2/src/services/rcService.js rename to ecole/src/services/rcService.js diff --git a/etv2/src/services/regionService.js b/ecole/src/services/regionService.js similarity index 100% rename from etv2/src/services/regionService.js rename to ecole/src/services/regionService.js diff --git a/etv2/src/services/tppcService.js b/ecole/src/services/tppcService.js similarity index 100% rename from etv2/src/services/tppcService.js rename to ecole/src/services/tppcService.js diff --git a/etv2/src/services/userService.js b/ecole/src/services/userService.js similarity index 100% rename from etv2/src/services/userService.js rename to ecole/src/services/userService.js diff --git a/etv2/src/templates/template-declinaison-tarifaire-tppc.docx b/ecole/src/templates/template-declinaison-tarifaire-tppc.docx similarity index 100% rename from etv2/src/templates/template-declinaison-tarifaire-tppc.docx rename to ecole/src/templates/template-declinaison-tarifaire-tppc.docx diff --git a/etv2/src/templates/template-projet-fac.docx b/ecole/src/templates/template-projet-fac.docx similarity index 100% rename from etv2/src/templates/template-projet-fac.docx rename to ecole/src/templates/template-projet-fac.docx diff --git a/etv2/src/templates/template-projet-rc.docx b/ecole/src/templates/template-projet-rc.docx similarity index 100% rename from etv2/src/templates/template-projet-rc.docx rename to ecole/src/templates/template-projet-rc.docx diff --git a/etv2/src/templates/template-projet-tppc.docx b/ecole/src/templates/template-projet-tppc.docx similarity index 100% rename from etv2/src/templates/template-projet-tppc.docx rename to ecole/src/templates/template-projet-tppc.docx diff --git a/etv2/src/templates/template-projet.docx b/ecole/src/templates/template-projet.docx similarity index 100% rename from etv2/src/templates/template-projet.docx rename to ecole/src/templates/template-projet.docx diff --git a/etv2/src/utils/logger.js b/ecole/src/utils/logger.js similarity index 100% rename from etv2/src/utils/logger.js rename to ecole/src/utils/logger.js diff --git a/etv2/src/utils/renderHelper.js b/ecole/src/utils/renderHelper.js similarity index 100% rename from etv2/src/utils/renderHelper.js rename to ecole/src/utils/renderHelper.js diff --git a/etv2/views/auth.ejs b/ecole/views/auth.ejs similarity index 100% rename from etv2/views/auth.ejs rename to ecole/views/auth.ejs diff --git a/etv2/views/clientform.ejs b/ecole/views/clientform.ejs similarity index 100% rename from etv2/views/clientform.ejs rename to ecole/views/clientform.ejs diff --git a/etv2/views/contrat.ejs b/ecole/views/contrat.ejs similarity index 100% rename from etv2/views/contrat.ejs rename to ecole/views/contrat.ejs diff --git a/etv2/views/dev.ejs b/ecole/views/dev.ejs similarity index 100% rename from etv2/views/dev.ejs rename to ecole/views/dev.ejs diff --git a/etv2/views/historiqueParcours.ejs b/ecole/views/historiqueParcours.ejs similarity index 76% rename from etv2/views/historiqueParcours.ejs rename to ecole/views/historiqueParcours.ejs index 06f42766..3db8f398 100644 --- a/etv2/views/historiqueParcours.ejs +++ b/ecole/views/historiqueParcours.ejs @@ -31,38 +31,6 @@
-
-
- -
-
- -
-
- -
-
- -
-
- -
-
diff --git a/etv2/views/index.ejs b/ecole/views/index.ejs similarity index 100% rename from etv2/views/index.ejs rename to ecole/views/index.ejs diff --git a/etv2/views/intermediaireform.ejs b/ecole/views/intermediaireform.ejs similarity index 100% rename from etv2/views/intermediaireform.ejs rename to ecole/views/intermediaireform.ejs diff --git a/ecole/views/layout.ejs b/ecole/views/layout.ejs new file mode 100644 index 00000000..270d4d75 --- /dev/null +++ b/ecole/views/layout.ejs @@ -0,0 +1,53 @@ + + + + + + + + EasyTransport + + + <%- typeof extraHeadContent !=='undefined' ? extraHeadContent : '' %> + + + + + + + + + + + + + + + + + + + +
+ + <%- include('partials/navbar') %> + +
+ <%- typeof body !=='undefined' ? body : '' %> +
+ + + + + + + + + + + + +
+ + + \ No newline at end of file diff --git a/etv2/views/parcours.ejs b/ecole/views/parcours.ejs similarity index 100% rename from etv2/views/parcours.ejs rename to ecole/views/parcours.ejs diff --git a/etv2/views/partials/navbar.ejs b/ecole/views/partials/navbar.ejs similarity index 100% rename from etv2/views/partials/navbar.ejs rename to ecole/views/partials/navbar.ejs diff --git a/etv2/views/partials/navparcours.ejs b/ecole/views/partials/navparcours.ejs similarity index 100% rename from etv2/views/partials/navparcours.ejs rename to ecole/views/partials/navparcours.ejs diff --git a/etv2/views/projetformfac.ejs b/ecole/views/projetformfac.ejs similarity index 100% rename from etv2/views/projetformfac.ejs rename to ecole/views/projetformfac.ejs diff --git a/etv2/views/projetformrc.ejs b/ecole/views/projetformrc.ejs similarity index 100% rename from etv2/views/projetformrc.ejs rename to ecole/views/projetformrc.ejs diff --git a/etv2/views/projetformtppc.ejs b/ecole/views/projetformtppc.ejs similarity index 100% rename from etv2/views/projetformtppc.ejs rename to ecole/views/projetformtppc.ejs diff --git a/etv2/views/tarifformtppc.ejs b/ecole/views/tarifformtppc.ejs similarity index 100% rename from etv2/views/tarifformtppc.ejs rename to ecole/views/tarifformtppc.ejs diff --git a/etv2/.gitignore b/etv2/.gitignore deleted file mode 100644 index 275e677e..00000000 --- a/etv2/.gitignore +++ /dev/null @@ -1,13 +0,0 @@ -# Ignore files type -*.log -*.env -*.exe -*.wbk -*.cmd -*~* - -# Ignore directory -**/vbs/ -**/node_modules/ -**/logs/ -**/.vscode/ \ No newline at end of file diff --git a/etv2/README.md b/etv2/README.md deleted file mode 100644 index a67aaad8..00000000 --- a/etv2/README.md +++ /dev/null @@ -1,2 +0,0 @@ -Description -EasyTransport est une application en cours de transition technologique, destinée à la plateforme AxA IARD Transport. Le backend est écrit en Node.js avec une base de données embarquée PocketBase, et le frontend utilise EJS et Materialize CSS. L'application propose divers modules tels que la tarification, la génération de contrats à partir de formulaires, l'authentification via JWT, et la génération d'attestations. diff --git a/etv2/package-lock.json b/etv2/package-lock.json deleted file mode 100644 index fe6fae15..00000000 --- a/etv2/package-lock.json +++ /dev/null @@ -1,6117 +0,0 @@ -{ - "name": "easytransport", - "version": "2.0.1", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "easytransport", - "version": "2.0.1", - "license": "ISC", - "dependencies": { - "axios": "^1.7.2", - "cjs": "^0.0.11", - "docxtemplater": "^3.46.1", - "dotenv": "^16.3.1", - "ejs": "^3.1.9", - "express": "^4.19.2", - "fs": "^0.0.1-security", - "jsonwebtoken": "^9.0.1", - "materialize-css": "^1.0.0", - "moment": "^2.30.1", - "node-cron": "^3.0.3", - "numeral": "^2.0.6", - "pizzip": "^3.1.6", - "pocketbase": "^0.15.3", - "winston": "^3.13.0", - "winston-daily-rotate-file": "^4.7.1" - }, - "devDependencies": { - "jest": "^29.6.0", - "nodemon": "^2.0.22", - "pkg": "^5.8.1", - "supertest": "^6.3.3" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", - "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.6.tgz", - "integrity": "sha512-29tfsWTq2Ftu7MXmimyC0C5FDZv5DYxOZkh3XD3+QW4V/BYuv/LyEsjj3c0hqedEaDt6DBfDvexMKU8YevdqFg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.6.tgz", - "integrity": "sha512-HPIyDa6n+HKw5dEuway3vVAhBboYCtREBMp+IWeseZy6TFtzn6MHkCH2KKYUOC/vKKwgSMHQW4htBOrmuRPXfw==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-compilation-targets": "^7.22.6", - "@babel/helper-module-transforms": "^7.22.5", - "@babel/helpers": "^7.22.6", - "@babel/parser": "^7.22.6", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/generator": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", - "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.6.tgz", - "integrity": "sha512-534sYEqWD9VfUm3IPn2SLcH4Q3P86XL+QvqdC7ZsFrzyyPF3T4XGiVghF6PTYNdWg6pXuoqXxNQAhbYeEInTzA==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.22.6", - "@babel/helper-validator-option": "^7.22.5", - "@nicolo-ribaudo/semver-v6": "^6.3.3", - "browserslist": "^4.21.9", - "lru-cache": "^5.1.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", - "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", - "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", - "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", - "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", - "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", - "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", - "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", - "dev": true, - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", - "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", - "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", - "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.6.tgz", - "integrity": "sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.6", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", - "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.6.tgz", - "integrity": "sha512-EIQu22vNkceq3LbjAq7knDf/UmtI2qbcNI8GRBlijez6TpQLvSodJPYfydQmNA5buwkxxxa/PVI44jjYZ+/cLw==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.22.5.tgz", - "integrity": "sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.22.5.tgz", - "integrity": "sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", - "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/parser": "^7.22.5", - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.22.6", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.6.tgz", - "integrity": "sha512-53CijMvKlLIDlOTrdWiHileRddlIiwUIyCKqYa7lYnnPldXCG5dUSN38uT0cA6i7rHWNKJLH0VU/Kxdr1GzB3w==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/generator": "^7.22.5", - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-function-name": "^7.22.5", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.22.6", - "@babel/types": "^7.22.5", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/@babel/types": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", - "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.5", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", - "dev": true - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", - "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", - "dependencies": { - "colorspace": "1.1.x", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", - "dev": true, - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", - "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.6.0.tgz", - "integrity": "sha512-anb6L1yg7uPQpytNVA5skRaXy3BmrsU8icRhTVNbWdjYWDDfy8M1Kq5HIVRpYoABdbpqsc5Dr+jtu4+qWRQBiQ==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/core": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.6.0.tgz", - "integrity": "sha512-5dbMHfY/5R9m8NbgmB3JlxQqooZ/ooPSOiwEQZZ+HODwJTbIu37seVcZNBK29aMdXtjvTRB3f6LCvkKq+r8uQA==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.0", - "@jest/reporters": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@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.5.0", - "jest-config": "^29.6.0", - "jest-haste-map": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.0", - "jest-resolve-dependencies": "^29.6.0", - "jest-runner": "^29.6.0", - "jest-runtime": "^29.6.0", - "jest-snapshot": "^29.6.0", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "jest-watcher": "^29.6.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/environment": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.6.0.tgz", - "integrity": "sha512-bUZLYUxYlUIsslBbxII0fq0kr1+friI3Gty+cRLmocGB1jdcAHs7FS8QdCDqedE8q4DZE1g/AJHH6OJZBLGGsg==", - "dev": true, - "dependencies": { - "@jest/fake-timers": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-mock": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.6.0.tgz", - "integrity": "sha512-a7pISPW28Q3c0/pLwz4mQ6tbAI+hc8/0CJp9ix6e9U4dQ6TiHQX82CT5DV5BMWaw8bFH4E6zsfZxXdn6Ka23Bw==", - "dev": true, - "dependencies": { - "expect": "^29.6.0", - "jest-snapshot": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.6.0.tgz", - "integrity": "sha512-LLSQQN7oypMSETKoPWpsWYVKJd9LQWmSDDAc4hUQ4JocVC7LAMy9R3ZMhlnLwbcFvQORZnZR7HM893Px6cJhvA==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.6.0.tgz", - "integrity": "sha512-nuCU46AsZoskthWSDS2Aj6LARgyNcp5Fjx2qxsO/fPl1Wp1CJ+dBDqs0OkEcJK8FBeV/MbjH5efe79M2sHcV+A==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.6.0", - "jest-mock": "^29.6.0", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.6.0.tgz", - "integrity": "sha512-IQQ3hZ2D/hwEwXSMv5GbfhzdH0nTQR3KPYxnuW6gYWbd6+7/zgMz7Okn6EgBbNtJNONq03k5EKA6HqGyzRbpeg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/expect": "^29.6.0", - "@jest/types": "^29.6.0", - "jest-mock": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/reporters": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.6.0.tgz", - "integrity": "sha512-dWEq4HI0VvHcAD6XTtyBKKARLytyyWPIy1SvGOcU91106MfvHPdxZgupFwVHd8TFpZPpA3SebYjtwS5BUS76Rw==", - "dev": true, - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@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": "^5.1.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0", - "jest-worker": "^29.6.0", - "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.0.tgz", - "integrity": "sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==", - "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.0.tgz", - "integrity": "sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.6.0.tgz", - "integrity": "sha512-9qLb7xITeyWhM4yatn2muqfomuoCTOhv0QV9i7XiIyYi3QLfnvPv5NeJp5u0PZeutAOROMLKakOkmoAisOr3YQ==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.6.0.tgz", - "integrity": "sha512-HYCS3LKRQotKWj2mnA3AN13PPevYZu8MJKm12lzYojpJNnn6kI/3PWmr1At/e3tUu+FHQDiOyaDVuR4EV3ezBw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.6.0.tgz", - "integrity": "sha512-bhP/KxPo3e322FJ0nKAcb6WVK76ZYyQd1lWygJzoSqP8SYMSLdxHqP4wnPTI4WvbB8PKPDV30y5y7Tya4RHOBA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.0", - "@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.6.0", - "jest-regex-util": "^29.4.3", - "jest-util": "^29.6.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jest/types": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.0.tgz", - "integrity": "sha512-8XCgL9JhqbJTFnMRjEAO+TuW251+MoMd5BSzLiE3vvzpQ8RlBxy8NoyNkDhs3K3OL3HeVinlOl9or5p7GTeOLg==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.18", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", - "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@nicolo-ribaudo/semver-v6": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/@nicolo-ribaudo/semver-v6/-/semver-v6-6.3.3.tgz", - "integrity": "sha512-3Yc1fUTs69MG/uZbJlLSI3JISMn2UV2rg+1D/vROUqZyh3l6iYHCs7GMp+M40ZD7yOdDbYjJcU1oTJhrc+dGKg==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", - "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true - }, - "node_modules/@sinonjs/commons": { - "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" - } - }, - "node_modules/@sinonjs/fake-timers": { - "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" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.1.tgz", - "integrity": "sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.4.tgz", - "integrity": "sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.1", - "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", - "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", - "dev": true, - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.20.1", - "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.1.tgz", - "integrity": "sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.7" - } - }, - "node_modules/@types/graceful-fs": { - "version": "4.1.6", - "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.6.tgz", - "integrity": "sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz", - "integrity": "sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==", - "dev": true - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz", - "integrity": "sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==", - "dev": true, - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/node": { - "version": "20.3.3", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.3.3.tgz", - "integrity": "sha512-wheIYdr4NYML61AjC8MKj/2jrR/kDQri/CIpVoZwldwhnIrD/j9jIU5bJ8yBKuB2VhpFV7Ab6G2XkBjv9r9Zzw==", - "dev": true - }, - "node_modules/@types/prettier": { - "version": "2.7.3", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.3.tgz", - "integrity": "sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==", - "dev": true - }, - "node_modules/@types/stack-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz", - "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", - "dev": true - }, - "node_modules/@types/triple-beam": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.2.tgz", - "integrity": "sha512-txGIh+0eDFzKGC25zORnswy+br1Ha7hj5cMVwKIU7+s0U2AxxJru/jZSMU6OC9MJWP6+pc/hc6ZjyZShpsyY2g==" - }, - "node_modules/@types/yargs": { - "version": "17.0.24", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.24.tgz", - "integrity": "sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==", - "dev": true, - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.0", - "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz", - "integrity": "sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==", - "dev": true - }, - "node_modules/@xmldom/xmldom": { - "version": "0.8.10", - "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", - "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/agent-base/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "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/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", - "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", - "dev": true - }, - "node_modules/async": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.4.tgz", - "integrity": "sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", - "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" - } - }, - "node_modules/babel-jest": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.6.0.tgz", - "integrity": "sha512-Jj8Bq2yKsk11XLk06Nm8SdvYkAcecH+GuhxB8DnK5SncjHnJ88TQjSnGgE7jpajpnSvz9DZ6X8hXrDkD/6/TPQ==", - "dev": true, - "dependencies": { - "@jest/transform": "^29.6.0", - "@types/babel__core": "^7.1.14", - "babel-plugin-istanbul": "^6.1.1", - "babel-preset-jest": "^29.5.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.8.0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", - "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-instrument": "^5.0.4", - "test-exclude": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.5.0.tgz", - "integrity": "sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==", - "dev": true, - "dependencies": { - "@babel/template": "^7.3.3", - "@babel/types": "^7.3.3", - "@types/babel__core": "^7.1.14", - "@types/babel__traverse": "^7.0.6" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", - "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", - "dev": true, - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/babel-preset-jest": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.5.0.tgz", - "integrity": "sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==", - "dev": true, - "dependencies": { - "babel-plugin-jest-hoist": "^29.5.0", - "babel-preset-current-node-syntax": "^1.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.21.9", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", - "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001503", - "electron-to-chromium": "^1.4.431", - "node-releases": "^2.0.12", - "update-browserslist-db": "^1.0.11" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", - "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", - "dev": true, - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001512", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", - "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ] - }, - "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/chalk/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/chalk/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/char-regex": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true - }, - "node_modules/ci-info": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.8.0.tgz", - "integrity": "sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs": { - "version": "0.0.11", - "resolved": "https://registry.npmjs.org/cjs/-/cjs-0.0.11.tgz", - "integrity": "sha512-aLndk8BnpIOy/ZxmLGCNTSFoLm0+OyZDtxNCV6jUBHBkLICanUAlkIGtnaQrCBMYTebOmWHNg8+vxtaYZ8LSfA==", - "dependencies": { - "sync-channel": "*" - } - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", - "dev": true - }, - "node_modules/cliui": { - "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", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", - "dev": true, - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.1.tgz", - "integrity": "sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==", - "dev": true - }, - "node_modules/color": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", - "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dependencies": { - "color-convert": "^1.9.3", - "color-string": "^1.6.0" - } - }, - "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/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/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" - }, - "node_modules/colorspace": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", - "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", - "dependencies": { - "color": "^3.1.3", - "text-hex": "1.0.x" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "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==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", - "dev": true - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", - "dev": true - }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", - "dev": true, - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", - "dev": true, - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/diff-sequences": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.4.3.tgz", - "integrity": "sha512-ofrBgwpPhCD85kMKtE9RYFFq6OC1A89oW2vvgWZNCwxrUpRUILopY7lsYyMDSjc8g6U6aiO0Qubg6r4Wgt5ZnA==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/docxtemplater": { - "version": "3.46.1", - "resolved": "https://registry.npmjs.org/docxtemplater/-/docxtemplater-3.46.1.tgz", - "integrity": "sha512-n4nlNXb9GfUYe7REJD30qrKzWqpHFYZbnT43AzIwVZODA+M5InJhH7iI3rRNkintufZxwch04eTTyoSfR51b0Q==", - "dependencies": { - "@xmldom/xmldom": "^0.8.10" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/dotenv": { - "version": "16.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz", - "integrity": "sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" - } - }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/ejs": { - "version": "3.1.9", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.9.tgz", - "integrity": "sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.450", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.450.tgz", - "integrity": "sha512-BLG5HxSELlrMx7dJ2s+8SFlsCtJp37Zpk2VAxyC6CZtbc+9AJeZHfYHbrlSgdXp6saQ8StMqOTEDaBKgA7u1sw==", - "dev": true - }, - "node_modules/emittery": { - "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" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/enabled": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", - "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true, - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "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", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", - "dev": true, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/expect": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/expect/-/expect-29.6.0.tgz", - "integrity": "sha512-AV+HaBtnDJ2YEUhPPo25HyUHBLaetM+y/Dq6pEC8VPQyt1dK+k8MfGkMy46djy2bddcqESc1kl4/K1uLWSfk9g==", - "dev": true, - "dependencies": { - "@jest/expect-utils": "^29.6.0", - "@types/node": "*", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.6.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "dev": true - }, - "node_modules/fastq": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", - "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", - "dev": true, - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", - "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" - }, - "node_modules/file-stream-rotator": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/file-stream-rotator/-/file-stream-rotator-0.6.1.tgz", - "integrity": "sha512-u+dBid4PvZw17PmDeRcNOtCP9CCK/9lRN2w+r1xIS7yOL9JFrIBKTvrYsxT4P0pGtThYTn++QS5ChHaUov3+zQ==", - "dependencies": { - "moment": "^2.29.1" - } - }, - "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/fn.name": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", - "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==" - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", - "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", - "dev": true, - "dependencies": { - "dezalgo": "^1.0.4", - "hexoid": "^1.0.0", - "once": "^1.4.0", - "qs": "^6.11.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/from2": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" - } - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/fs": { - "version": "0.0.1-security", - "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", - "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", - "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", - "dev": true, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hexoid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", - "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/https-proxy-agent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/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==", - "dev": true, - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", - "dev": true, - "engines": { - "node": ">= 4" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true - }, - "node_modules/import-local": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", - "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", - "dev": true, - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/into-stream": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", - "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", - "dev": true, - "dependencies": { - "from2": "^2.3.0", - "p-is-promise": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-core-module": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", - "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "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" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", - "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", - "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", - "dev": true, - "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", - "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", - "dev": true, - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^3.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-report/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" - } - }, - "node_modules/istanbul-lib-report/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==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", - "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", - "dev": true, - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/istanbul-reports": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", - "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", - "dev": true, - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jake": { - "version": "10.8.7", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.7.tgz", - "integrity": "sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest/-/jest-29.6.0.tgz", - "integrity": "sha512-do1J9gGrQ68E4UfMz/4OM71p9qCqQxu32N/9ZfeYFSSlx0uUOuxeyZxtJZNaUTW12ZA11ERhmBjBhy1Ho96R4g==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.0", - "@jest/types": "^29.6.0", - "import-local": "^3.0.2", - "jest-cli": "^29.6.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "29.5.0", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.5.0.tgz", - "integrity": "sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==", - "dev": true, - "dependencies": { - "execa": "^5.0.0", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-circus": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.6.0.tgz", - "integrity": "sha512-LtG45qEKhse2Ws5zNR4DnZATReLGQXzBZGZnJ0DU37p6d4wDhu41vvczCQ3Ou+llR6CRYDBshsubV7H4jZvIkw==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/expect": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "co": "^4.6.0", - "dedent": "^0.7.0", - "is-generator-fn": "^2.0.0", - "jest-each": "^29.6.0", - "jest-matcher-utils": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-runtime": "^29.6.0", - "jest-snapshot": "^29.6.0", - "jest-util": "^29.6.0", - "p-limit": "^3.1.0", - "pretty-format": "^29.6.0", - "pure-rand": "^6.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-cli": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.6.0.tgz", - "integrity": "sha512-WvZIaanK/abkw6s01924DQ2QLwM5Q4Y4iPbSDb9Zg6smyXGqqcPQ7ft9X8D7B0jICz312eSzM6UlQNxuZJBrMw==", - "dev": true, - "dependencies": { - "@jest/core": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/types": "^29.6.0", - "chalk": "^4.0.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "import-local": "^3.0.2", - "jest-config": "^29.6.0", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "prompts": "^2.0.1", - "yargs": "^17.3.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.6.0.tgz", - "integrity": "sha512-fKA4jM91PDqWVkMpb1FVKxIuhg3hC6hgaen57cr1rRZkR96dCatvJZsk3ik7/GNu9ERj9wgAspOmyvkFoGsZhA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/test-sequencer": "^29.6.0", - "@jest/types": "^29.6.0", - "babel-jest": "^29.6.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.6.0", - "jest-environment-node": "^29.6.0", - "jest-get-type": "^29.4.3", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.0", - "jest-runner": "^29.6.0", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "micromatch": "^4.0.4", - "parse-json": "^5.2.0", - "pretty-format": "^29.6.0", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.6.0.tgz", - "integrity": "sha512-ZRm7cd2m9YyZ0N3iMyuo1iUiprxQ/MFpYWXzEEj7hjzL3WnDffKW8192XBDcrAI8j7hnrM1wed3bL/oEnYF/8w==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.4.3", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.4.3.tgz", - "integrity": "sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==", - "dev": true, - "dependencies": { - "detect-newline": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-each": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.6.0.tgz", - "integrity": "sha512-d0Jem4RBAlFUyV6JSXPSHVUpNo5RleSj+iJEy1G3+ZCrzHDjWs/1jUfrbnJKHdJdAx5BCEce/Ju379WqHhQk4w==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "jest-util": "^29.6.0", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.6.0.tgz", - "integrity": "sha512-BOf5Q2/nFCdBOnyBM5c5/6DbdQYgc+0gyUQ8l8qhUAB8O7pM+4QJXIXJsRZJaxd5SHV6y5VArTVhOfogoqcP8Q==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/fake-timers": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-mock": "^29.6.0", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-get-type": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.4.3.tgz", - "integrity": "sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.6.0.tgz", - "integrity": "sha512-dY1DKufptj7hcJSuhpqlYPGcnN3XjlOy/g0jinpRTMsbb40ivZHiuIPzeminOZkrek8C+oDxC54ILGO3vMLojg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@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.4.3", - "jest-util": "^29.6.0", - "jest-worker": "^29.6.0", - "micromatch": "^4.0.4", - "walker": "^1.0.8" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "optionalDependencies": { - "fsevents": "^2.3.2" - } - }, - "node_modules/jest-leak-detector": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.6.0.tgz", - "integrity": "sha512-JdV6EZOPxHR1gd6ccxjNowuROkT2jtGU5G/g58RcJX1xe5mrtLj0g6/ZkyMoXF4cs+tTkHMFX6pcIrB1QPQwCw==", - "dev": true, - "dependencies": { - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.6.0.tgz", - "integrity": "sha512-oSlqfGN+sbkB2Q5um/zL7z80w84FEAcLKzXBZIPyRk2F2Srg1ubhrHVKW68JCvb2+xKzAeGw35b+6gciS24PHw==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "jest-diff": "^29.6.0", - "jest-get-type": "^29.4.3", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.6.0.tgz", - "integrity": "sha512-mkCp56cETbpoNtsaeWVy6SKzk228mMi9FPHSObaRIhbR2Ujw9PqjW/yqVHD2tN1bHbC8ol6h3UEo7dOPmIYwIA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.12.13", - "@jest/types": "^29.6.0", - "@types/stack-utils": "^2.0.0", - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.4", - "pretty-format": "^29.6.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-mock": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.6.0.tgz", - "integrity": "sha512-2Pb7R2w24Q0aUVn+2/vdRDL6CqGqpheDZy7zrXav8FotOpSGw/4bS2hyVoKHMEx4xzOn6EyCAGwc5czWxXeN7w==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "jest-util": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-pnp-resolver": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", - "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", - "dev": true, - "engines": { - "node": ">=6" - }, - "peerDependencies": { - "jest-resolve": "*" - }, - "peerDependenciesMeta": { - "jest-resolve": { - "optional": true - } - } - }, - "node_modules/jest-regex-util": { - "version": "29.4.3", - "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.4.3.tgz", - "integrity": "sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==", - "dev": true, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.6.0.tgz", - "integrity": "sha512-+hrpY4LzAONoZA/rvB6rnZLkOSA6UgJLpdCWrOZNSgGxWMumzRLu7dLUSCabAHzoHIDQ9qXfr3th1zYNJ0E8sQ==", - "dev": true, - "dependencies": { - "chalk": "^4.0.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.6.0", - "jest-pnp-resolver": "^1.2.2", - "jest-util": "^29.6.0", - "jest-validate": "^29.6.0", - "resolve": "^1.20.0", - "resolve.exports": "^2.0.0", - "slash": "^3.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.6.0.tgz", - "integrity": "sha512-eOfPog9K3hJdJk/3i6O6bQhXS+3uXhMDkLJGX+xmMPp7T1d/zdcFofbDnHgNoEkhD/mSimC5IagLEP7lpLLu/A==", - "dev": true, - "dependencies": { - "jest-regex-util": "^29.4.3", - "jest-snapshot": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runner": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.6.0.tgz", - "integrity": "sha512-4fZuGV2lOxS2BiqEG9/AI8E6O+jo+QZjMVcgi1x5E6aDql0Gd/EFIbUQ0pSS09y8cya1vJB/qC2xsE468jqtSg==", - "dev": true, - "dependencies": { - "@jest/console": "^29.6.0", - "@jest/environment": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "graceful-fs": "^4.2.9", - "jest-docblock": "^29.4.3", - "jest-environment-node": "^29.6.0", - "jest-haste-map": "^29.6.0", - "jest-leak-detector": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-resolve": "^29.6.0", - "jest-runtime": "^29.6.0", - "jest-util": "^29.6.0", - "jest-watcher": "^29.6.0", - "jest-worker": "^29.6.0", - "p-limit": "^3.1.0", - "source-map-support": "0.5.13" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.6.0.tgz", - "integrity": "sha512-5FavYo3EeXLHIvnJf+r7Cj0buePAbe4mzRB9oeVxDS0uVmouSBjWeGgyRjZkw7ArxOoZI8gO6f8SGMJ2HFlwwg==", - "dev": true, - "dependencies": { - "@jest/environment": "^29.6.0", - "@jest/fake-timers": "^29.6.0", - "@jest/globals": "^29.6.0", - "@jest/source-map": "^29.6.0", - "@jest/test-result": "^29.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@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.6.0", - "jest-message-util": "^29.6.0", - "jest-mock": "^29.6.0", - "jest-regex-util": "^29.4.3", - "jest-resolve": "^29.6.0", - "jest-snapshot": "^29.6.0", - "jest-util": "^29.6.0", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.6.0.tgz", - "integrity": "sha512-H3kUE9NwWDEDoutcOSS921IqdlkdjgnMdj1oMyxAHNflscdLc9dB8OudZHV6kj4OHJxbMxL8CdI5DlwYrs4wQg==", - "dev": true, - "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.6.0", - "@jest/transform": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/prettier": "^2.1.5", - "babel-preset-current-node-syntax": "^1.0.0", - "chalk": "^4.0.0", - "expect": "^29.6.0", - "graceful-fs": "^4.2.9", - "jest-diff": "^29.6.0", - "jest-get-type": "^29.4.3", - "jest-matcher-utils": "^29.6.0", - "jest-message-util": "^29.6.0", - "jest-util": "^29.6.0", - "natural-compare": "^1.4.0", - "pretty-format": "^29.6.0", - "semver": "^7.5.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/lru-cache": { - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "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==", - "dev": true - }, - "node_modules/jest-util": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.6.0.tgz", - "integrity": "sha512-S0USx9YwcvEm4pQ5suisVm/RVxBmi0GFR7ocJhIeaCuW5AXnAnffXbaVKvIFodyZNOc9ygzVtTxmBf40HsHXaA==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "@types/node": "*", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "graceful-fs": "^4.2.9", - "picomatch": "^2.2.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.6.0.tgz", - "integrity": "sha512-MLTrAJsb1+W7svbeZ+A7pAnyXMaQrjvPDKCy7OlfsfB6TMVc69v7WjUWfiR6r3snULFWZASiKgvNVDuATta1dg==", - "dev": true, - "dependencies": { - "@jest/types": "^29.6.0", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^29.4.3", - "leven": "^3.1.0", - "pretty-format": "^29.6.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.6.0.tgz", - "integrity": "sha512-LdsQqFNX60mRdRRe+zsELnYRH1yX6KL+ukbh+u6WSQeTheZZe1TlLJNKRQiZ7e0VbvMkywmMWL/KV35noOJCcw==", - "dev": true, - "dependencies": { - "@jest/test-result": "^29.6.0", - "@jest/types": "^29.6.0", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "emittery": "^0.13.1", - "jest-util": "^29.6.0", - "string-length": "^4.0.1" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.6.0.tgz", - "integrity": "sha512-oiQHH1SnKmZIwwPnpOrXTq4kHBk3lKGY/07DpnH0sAu+x7J8rXlbLDROZsU6vy9GwB0hPiZeZpu6YlJ48QoKcA==", - "dev": true, - "dependencies": { - "@types/node": "*", - "jest-util": "^29.6.0", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/jest-worker/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" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", - "dev": true, - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsonwebtoken": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", - "integrity": "sha512-K8wx7eJ5TPvEjuiVSkv167EVboBDv9PZdDoF7BgeQnBLVvZWW9clr2PsQHVJDTKaEIH5JBIwHujGcHp7GgI2eg==", - "dependencies": { - "jws": "^3.2.2", - "lodash": "^4.17.21", - "ms": "^2.1.1", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=12", - "npm": ">=6" - } - }, - "node_modules/jsonwebtoken/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonwebtoken/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jsonwebtoken/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/kleur": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", - "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", - "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==" - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", - "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/logform": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.5.1.tgz", - "integrity": "sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==", - "dependencies": { - "@colors/colors": "1.5.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - } - }, - "node_modules/logform/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/makeerror": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", - "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", - "dev": true, - "dependencies": { - "tmpl": "1.0.5" - } - }, - "node_modules/materialize-css": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/materialize-css/-/materialize-css-1.0.0.tgz", - "integrity": "sha512-4/oecXl8y/1i8RDZvyvwAICyqwNoKU4or5uf8uoAd74k76KzZ0Llym4zhJ5lLNUskcqjO0AuMcvNyDkpz8Z6zw==" - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "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" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/moment": { - "version": "2.30.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", - "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", - "engines": { - "node": "*" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/multistream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/multistream/-/multistream-4.1.0.tgz", - "integrity": "sha512-J1XDiAmmNpRCBfIWJv+n0ymC4ABcf/Pl+5YvC5B/D2f/2+8PtHvCNxMPKiQcZyi922Hq69J2YOpb1pTywfifyw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "once": "^1.4.0", - "readable-stream": "^3.6.0" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/node-abi": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", - "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/lru-cache": { - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-abi/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/node-cron": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/node-cron/-/node-cron-3.0.3.tgz", - "integrity": "sha512-dOal67//nohNgYWb+nWmg5dkFdIwDm8EpeGYMekPMrngV3637lqnX0lbUcCtgibHTz6SEz7DAIjKvKDFYCnO1A==", - "dependencies": { - "uuid": "8.3.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/node-fetch": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", - "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", - "dev": true - }, - "node_modules/node-releases": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", - "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", - "dev": true - }, - "node_modules/nodemon": { - "version": "2.0.22", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", - "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", - "dev": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "simple-update-notifier": "^1.0.7", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/numeral": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/numeral/-/numeral-2.0.6.tgz", - "integrity": "sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==", - "engines": { - "node": "*" - } - }, - "node_modules/object-hash": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", - "integrity": "sha512-gScRMn0bS5fH+IuwyIFgnh9zBdo4DV+6GhygmWM9HyNJSgS0hScp1f5vjtm7oIIOiT9trXrShAkLFSc2IqKNgw==", - "engines": { - "node": ">= 6" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", - "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "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" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", - "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", - "dev": true, - "engines": { - "node": ">= 6" - } - }, - "node_modules/pizzip": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/pizzip/-/pizzip-3.1.6.tgz", - "integrity": "sha512-FCG2lSMVlrt2jB1iokujjXexanfszV/Y04t4mu1icdSEC/vb/2qDISr2kgENzdkThd1jkRNjvipWitU4gpbM/g==", - "dependencies": { - "pako": "^2.1.0" - } - }, - "node_modules/pkg": { - "version": "5.8.1", - "resolved": "https://registry.npmjs.org/pkg/-/pkg-5.8.1.tgz", - "integrity": "sha512-CjBWtFStCfIiT4Bde9QpJy0KeH19jCfwZRJqHFDFXfhUklCx8JoFmMj3wgnEYIwGmZVNkhsStPHEOnrtrQhEXA==", - "dev": true, - "dependencies": { - "@babel/generator": "7.18.2", - "@babel/parser": "7.18.4", - "@babel/types": "7.19.0", - "chalk": "^4.1.2", - "fs-extra": "^9.1.0", - "globby": "^11.1.0", - "into-stream": "^6.0.0", - "is-core-module": "2.9.0", - "minimist": "^1.2.6", - "multistream": "^4.1.0", - "pkg-fetch": "3.4.2", - "prebuild-install": "7.1.1", - "resolve": "^1.22.0", - "stream-meter": "^1.0.4" - }, - "bin": { - "pkg": "lib-es5/bin.js" - }, - "peerDependencies": { - "node-notifier": ">=9.0.1" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", - "dev": true, - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-fetch": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/pkg-fetch/-/pkg-fetch-3.4.2.tgz", - "integrity": "sha512-0+uijmzYcnhC0hStDjm/cl2VYdrmVVBpe7Q8k9YBojxmR5tG8mvR9/nooQq3QSXiQqORDVOTY3XqMEqJVIzkHA==", - "dev": true, - "dependencies": { - "chalk": "^4.1.2", - "fs-extra": "^9.1.0", - "https-proxy-agent": "^5.0.0", - "node-fetch": "^2.6.6", - "progress": "^2.0.3", - "semver": "^7.3.5", - "tar-fs": "^2.1.1", - "yargs": "^16.2.0" - }, - "bin": { - "pkg-fetch": "lib-es5/bin.js" - } - }, - "node_modules/pkg-fetch/node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/pkg-fetch/node_modules/lru-cache": { - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pkg-fetch/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pkg-fetch/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/pkg-fetch/node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pkg-fetch/node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/pkg/node_modules/@babel/generator": { - "version": "7.18.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.2.tgz", - "integrity": "sha512-W1lG5vUwFvfMd8HVXqdfbuG7RuaSrTCCD8cl8fP8wOivdbtbIg2Db3IWUcgvfxKbbn6ZBGYRW/Zk1MIwK49mgw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.2", - "@jridgewell/gen-mapping": "^0.3.0", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/pkg/node_modules/@babel/parser": { - "version": "7.18.4", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.4.tgz", - "integrity": "sha512-FDge0dFazETFcxGw/EXzOkN8uJp0PC7Qbm+Pe9T+av2zlBpOgunFHkQPPn+eRuClU73JF+98D531UgayY89tow==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/pkg/node_modules/@babel/types": { - "version": "7.19.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", - "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.18.10", - "@babel/helper-validator-identifier": "^7.18.6", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/pkg/node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/pocketbase": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/pocketbase/-/pocketbase-0.15.3.tgz", - "integrity": "sha512-sjM0XO4wHUlVZs94VhRJi4FeYtbLqvxFbRDJlfjFb/4FkxypbGwxLM4HDAEr8q6jdreuxAM1/n/b5HB1GjQ1Vg==" - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dev": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/pretty-format": { - "version": "29.6.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.6.0.tgz", - "integrity": "sha512-XH+D4n7Ey0iSR6PdAnBs99cWMZdGsdKrR33iUHQNr79w1szKTCIZDVdXuccAsHVwDBp0XeWPfNEoaxP9EZgRmQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.0", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/pretty-format/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==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", - "dev": true - }, - "node_modules/progress": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/prompts": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", - "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", - "dev": true, - "dependencies": { - "kleur": "^3.0.3", - "sisteransi": "^1.0.5" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pure-rand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.2.tgz", - "integrity": "sha512-6Yg0ekpKICSjPswYOuC5sku/TSWaRYlA0qsXqJgM/d/4pLPHPuTxK7Nbf7jFKzAeedUhR8C7K9Uv63FBsSo8xQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ] - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.2", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", - "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", - "dev": true, - "dependencies": { - "is-core-module": "^2.11.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", - "dev": true, - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve.exports": { - "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" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", - "dev": true, - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" - }, - "node_modules/simple-update-notifier": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", - "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", - "dev": true, - "dependencies": { - "semver": "~7.0.0" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", - "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/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, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", - "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", - "engines": { - "node": "*" - } - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/stream-meter": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/stream-meter/-/stream-meter-1.0.4.tgz", - "integrity": "sha512-4sOEtrbgFotXwnEuzzsQBYEV1elAeFSO8rSGeTwabuX1RRn/kEq9JVH7I0MRBhKVRR0sJkr0M0QCH7yOLf9fhQ==", - "dev": true, - "dependencies": { - "readable-stream": "^2.1.4" - } - }, - "node_modules/stream-meter/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/stream-meter/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true - }, - "node_modules/stream-meter/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", - "dev": true, - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/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, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/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==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/superagent": { - "version": "8.0.9", - "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.9.tgz", - "integrity": "sha512-4C7Bh5pyHTvU33KpZgwrNKh/VQnvgtCSqPRfJAUdmrtSYePVzVg4E4OzsrbkhJj9O7SO6Bnv75K/F8XVZT8YHA==", - "dev": true, - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.4", - "debug": "^4.3.4", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.0", - "formidable": "^2.1.2", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/superagent/node_modules/lru-cache": { - "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" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/superagent/node_modules/semver": { - "version": "7.5.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", - "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/superagent/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, - "node_modules/supertest": { - "version": "6.3.3", - "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", - "integrity": "sha512-EMCG6G8gDu5qEqRQ3JjjPs6+FYT1a7Hv5ApHvtSghmOFJYtsU5S+pSb6Y2EUeCEY3CmEL3mmQ8YWlPOzQomabA==", - "dev": true, - "dependencies": { - "methods": "^1.1.2", - "superagent": "^8.0.5" - }, - "engines": { - "node": ">=6.4.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sync-channel": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/sync-channel/-/sync-channel-0.0.6.tgz", - "integrity": "sha512-rjHHukZeQW3hGgwMuOkrITv1e87nxuAKRGgwPNtCmS3Az+YdO826hBy1IDjRsTXKGc2WDWUaDU5Zx8uodXWwgg==" - }, - "node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", - "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", - "dev": true, - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/text-hex": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", - "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==" - }, - "node_modules/tmpl": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", - "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", - "dev": true - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/triple-beam": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.3.0.tgz", - "integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==" - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", - "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.1.0.tgz", - "integrity": "sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^1.6.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/v8-to-istanbul/node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/walker": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", - "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", - "dev": true, - "dependencies": { - "makeerror": "1.0.12" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "dev": true, - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/winston": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz", - "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==", - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.2", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.4.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.7.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-daily-rotate-file": { - "version": "4.7.1", - "resolved": "https://registry.npmjs.org/winston-daily-rotate-file/-/winston-daily-rotate-file-4.7.1.tgz", - "integrity": "sha512-7LGPiYGBPNyGHLn9z33i96zx/bd71pjBn9tqQzO3I4Tayv94WPmBNwKC7CO1wPHdP9uvu+Md/1nr6VSH9h0iaA==", - "dependencies": { - "file-stream-rotator": "^0.6.1", - "object-hash": "^2.0.1", - "triple-beam": "^1.3.0", - "winston-transport": "^4.4.0" - }, - "engines": { - "node": ">=8" - }, - "peerDependencies": { - "winston": "^3" - } - }, - "node_modules/winston-transport": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", - "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", - "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston/node_modules/@colors/colors": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", - "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/write-file-atomic": { - "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" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "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", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/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==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/etv2/package.json b/etv2/package.json deleted file mode 100644 index bf2c2b11..00000000 --- a/etv2/package.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "name": "easytransport", - "version": "2.0.1", - "description": "Plateforme AxA IARD Transport", - "main": "./src/server.js", - "scripts": { - "start": "nodemon ./src/server.js", - "build": "pkg ./src/server.js -o EasyTransport", - "test": "jest" - }, - "pkg": { - "assets": [ - "public/**" - ] - }, - "keywords": [], - "author": "cyril.ducaffy@axa.fr", - "license": "ISC", - "dependencies": { - "axios": "^1.7.2", - "cjs": "^0.0.11", - "docxtemplater": "^3.46.1", - "dotenv": "^16.3.1", - "ejs": "^3.1.9", - "express": "^4.19.2", - "fs": "^0.0.1-security", - "jsonwebtoken": "^9.0.1", - "materialize-css": "^1.0.0", - "moment": "^2.30.1", - "node-cron": "^3.0.3", - "numeral": "^2.0.6", - "pizzip": "^3.1.6", - "pocketbase": "^0.15.3", - "winston": "^3.13.0", - "winston-daily-rotate-file": "^4.7.1" - }, - "devDependencies": { - "jest": "^29.6.0", - "nodemon": "^2.0.22", - "pkg": "^5.8.1", - "supertest": "^6.3.3" - } -} diff --git a/etv2/public/css/loader.css b/etv2/public/css/loader.css deleted file mode 100644 index d303b759..00000000 --- a/etv2/public/css/loader.css +++ /dev/null @@ -1,66 +0,0 @@ -/* Overlay loader (css pris du site https://css-loaders.com/)*/ -#loader-overlay { - position: fixed; - top: 0; left: 0; - width: 100%; height: 100%; - background: linear-gradient( - rgba(10, 20, 60, 0.2), - rgba(0, 0, 0, 0.4) - ); - display: flex; - flex-direction: column; - align-items: center; - justify-content: center; - z-index: 9999; - font-family: 'Roboto', sans-serif; - opacity: 0; - backdrop-filter: blur(0px); - pointer-events: none; - transition: opacity 0.5s ease, backdrop-filter 0.5s ease; -} -#loader-overlay.active { - opacity: 1; - backdrop-filter: blur(3px); - pointer-events: all; -} -#loader-overlay.hidden { - display: none; -} - -/* Spinner wrapper (fade/slide) */ -.loader-spin-wrap { - opacity: 0; - transform: translateY(10px); - transition: opacity 0.5s ease, transform 0.5s ease; - transition-delay: 0.5s; /* apparaît après 0.5s */ -} -#loader-overlay.active .loader-spin-wrap { - opacity: 1; - transform: translateY(0); -} - -/* Spinner circulaire */ -.loader-spin { - width: 50px; - aspect-ratio: 1; - border-radius: 50%; - mask:1; - background: - radial-gradient(farthest-side,darkblue 94%,transparent) top/8px 8px no-repeat, - conic-gradient(transparent 30%,darkblue); - -webkit-mask: radial-gradient(farthest-side,transparent calc(100% - 8px),#000 0); - animation: l13 1s infinite linear; -} -@keyframes l13 { - 100% { transform: rotate(1turn); } -} - -/* Erreur */ -#error-message { - display: none; - color: red; - font-weight: bold; - text-align: center; - margin-top: 20px; - white-space: pre-line; -} diff --git a/etv2/public/js/client-form.js b/etv2/public/js/client-form.js deleted file mode 100644 index 0dcaf12f..00000000 --- a/etv2/public/js/client-form.js +++ /dev/null @@ -1,335 +0,0 @@ -// Module IIFE pour éviter la pollution de l'espace global -(function () { - // Variables globales du module - let parcours, contrat, client, matricule; - - // Initialisation du formulaire et des données - function init() { - const token = localStorage.getItem('jwtToken'); - - if (token) { - const decoded = jwt_decode(token); - matricule = decoded.userMatricule; - } - - // Accéder aux informations stockées du parcours - parcours = JSON.parse(sessionStorage.getItem('parcours')); - contrat = JSON.parse(sessionStorage.getItem('contrat')); - client = contrat?.["@expand"]?.client || null; - - console.log("Matricule user actuel:", matricule); - console.log("Initialisation pour formulaire client :", contrat); - - // Materialize init Modal - var modals = document.querySelectorAll('.modal'); - M.Modal.init(modals); - - // Appel des différentes fonctions d'initialisation - setupEventListeners(); - populateFormData(); - updateSubmitButtonState('clientForm'); - } - - // Configuration des écouteurs d'événements - function setupEventListeners() { - document.getElementById('clientFormBtn').addEventListener('click', handleSubmitForm); - document.getElementById('creditsafe').addEventListener('click', (event) => handleOpenLink(event, 'creditsafeURL')); - document.getElementById('easyQP').addEventListener('click', (event) => handleOpenLink(event, 'easyQPURL')); - document.getElementById('refNoteFi').addEventListener('click', (event) => handleOpenLink(event, 'refNoteFiURL')); - document.getElementById('cl063-client').addEventListener('click', (event) => handleExtractClient(event)); - document.getElementById('modalExtraireClient').addEventListener('click', (event) => handleModalExtract(event)); - - // Controle de saisie et format sur les champs du formulaire - document.getElementById('noteFinanciereClient').addEventListener('input', function () { - validateField('noteFinanciereClient', true); - updateSubmitButtonState('clientForm'); - }); - - document.getElementById('numClient').addEventListener('input', function () { - validateField('numClient', true); - updateSubmitButtonState('clientForm'); - }); - - document.getElementById('nomClient').addEventListener('input', function () { - validateField('nomClient', true); - updateSubmitButtonState('clientForm'); - }); - - document.getElementById('emailClient').addEventListener('input', function () { - validateField('emailClient', true); - updateSubmitButtonState('clientForm'); - }); - - document.getElementById('adresseClient').addEventListener('input', function () { - validateField('adresseClient', true); - updateSubmitButtonState('clientForm'); - }); - - document.getElementById('codePostalClient').addEventListener('input', function () { - validateField('codePostalClient', true); - updateSubmitButtonState('clientForm'); - }); - - document.getElementById('villeClient').addEventListener('input', function () { - validateField('villeClient', true); - updateSubmitButtonState('clientForm'); - }); - - document.getElementById('modalNumClient').addEventListener('input', function () { - validateField('modalNumClient', true); - updateSubmitButtonState('modalExtraireClient'); - }); - } - - // Peupler le formulaire avec les données - function populateFormData() { - const clientStorage = JSON.parse(sessionStorage.getItem('tmp')); - - if (client) { - document.getElementById('nomClient').value = client.nom || ''; - document.getElementById('numClient').value = client.numClient || ''; - document.getElementById('adresseClient').value = client.adresse || ''; - document.getElementById('emailClient').value = client.mail || ''; - document.getElementById('codePostalClient').value = client.codePostal || ''; - document.getElementById('villeClient').value = client.ville || ''; - document.getElementById('noteFinanciereClient').value = client.noteFinanciere || ''; - } - - if (clientStorage) { - document.getElementById('nomClient').value = clientStorage.nomClient || ''; - document.getElementById('numClient').value = clientStorage.numClient || ''; - document.getElementById('adresseClient').value = clientStorage.adresseClient || ''; - document.getElementById('codePostalClient').value = clientStorage.postalClient || ''; - document.getElementById('villeClient').value = clientStorage.villeClient || ''; - } - } - - // Gérer l'ouverture de liens externes - function handleOpenLink(event, urlType) { - event.preventDefault(); - let url = ''; - - switch (urlType) { - case 'creditsafeURL': - url = 'https://www.creditsafe.fr/csfr?UserName=735265dorothee&Password=UH04EuLocXZMxIRqY19w6A%3d%3d&BackOfficeCountry=FR&origincountry=FR&linkages=Y'; - break; - case 'easyQPURL': - if (document.getElementById('numClient').value != "") { - url = `https://qualite-portefeuille-iard-ent.axa-fr.intraxa/client/${document.getElementById('numClient').value}`; - } else { - url = `https://qualite-portefeuille-iard-ent.axa-fr.intraxa/`; - } - break; - case 'refNoteFiURL': - url = 'https://app.powerbi.com/groups/me/apps/7b48f9a2-bd97-4178-bc1a-a5f7ef6e985f/reports/d29a9f83-cafe-4a0f-bc38-0929921e8cd3/ReportSection?ctid=396b38cc-aa65-492b-bb0e-3d94ed25a97b'; - break; - } - - window.open(url, '_blank'); - } - - // Gérer l'extraction axaPAC - async function handleExtractClient(event) { - event.preventDefault(); - - // Affiche le modal - const elem = document.getElementById('modalExtractAxAPAC'); - const instance = M.Modal.getInstance(elem); - instance.open(); - } - - async function handleModalExtract() { - document.getElementById('modalExtraireClient').disabled = true; - - if (typeof window.showLoader === 'function') { - window.showLoader(); - } - - try { - const response = await fetch(`/client/extract`, { - method: 'POST', - body: JSON.stringify({ - "matricule": matricule, - "numClient": document.getElementById("modalNumClient").value - }), - headers: { - 'Content-Type': 'application/json', - }, - }); - const res = await response.json(); - - if (res.valid) { - document.getElementById("error-extract").style.display = "none"; - document.getElementById('modalExtraireClient').disabled = false; - console.log(res); - - // Save sessionStorage for Intermediaire - sessionStorage.setItem('tmp', JSON.stringify(res.data)); - - // Populate data - document.getElementById("numClient").value = (res.data.numClient) ? res.data.numClient : null; - document.getElementById("nomClient").value = (res.data.nomClient) ? res.data.nomClient : null; - document.getElementById("adresseClient").value = (res.data.adresseClient) ? res.data.adresseClient : null; - document.getElementById("codePostalClient").value = (res.data.postalClient) ? res.data.postalClient : null; - document.getElementById("villeClient").value = (res.data.villeClient) ? res.data.villeClient : null; - - validateField('numClient', true); - validateField('nomClient', true); - validateField('adresseClient', true); - validateField('codePostalClient', true); - validateField('villeClient', true); - updateSubmitButtonState('clientForm'); - - // close le modal - const elem = document.getElementById('modalExtractAxAPAC'); - const instance = M.Modal.getInstance(elem); - instance.close(); - } else { - document.getElementById("error-extract").style.display = "block"; - document.getElementById('modalExtraireClient').disabled = false; - console.log("Problème rencontré lors de l'extraction cl063 AxA PAC :", res.error); - if (typeof window.showError === 'function') { - window.showError("Erreur lors de l'extraction des données client."); - } - } - } catch (error) { - console.error("Erreur lors de l'extraction client:", error); - if (typeof window.showError === 'function') { - window.showError("Erreur lors de l'extraction. Vérifiez votre connexion."); - } - } finally { - document.getElementById('modalExtraireClient').disabled = false; - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - } - } - - // Gérer la soumission du formulaire - async function handleSubmitForm(event) { - event.preventDefault(); - - if (typeof window.showLoader === 'function') { - window.showLoader(); - } - - try { - let idClient = client?.id; - const numClient = document.getElementById('numClient').value; - - let responseClient; - - if (numClient) { - responseClient = await fetch(`/client/read/${numClient}`, { - method: 'GET', - headers: { 'Content-Type': 'application/json' }, - }); - } - const dataClient = await responseClient.json(); - - if (dataClient.valid) { - idClient = dataClient.idClient; - } else { - // Créez le client ici si non trouvé - const responseCreateClient = await fetch(`/client/create`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json' - }, - }); - const dataCreateClient = await responseCreateClient.json(); - - if (dataCreateClient.valid) { - idClient = dataCreateClient.client.id; - } - } - - // Mettre à jour le contrat avec l'ID du client - if (idClient) { - const response = await fetch(`/client/update/${idClient}`, { - method: 'POST', - body: JSON.stringify({ - "nom": document.getElementById('nomClient').value.toUpperCase(), - "numClient": document.getElementById('numClient').value, - "adresse": document.getElementById('adresseClient').value.toUpperCase(), - "mail": document.getElementById('emailClient').value, - "codePostal": document.getElementById('codePostalClient').value, - "ville": document.getElementById('villeClient').value.toUpperCase(), - "noteFinanciere": document.getElementById('noteFinanciereClient').value - }), - headers: { - 'Content-Type': 'application/json', - }, - }); - const data = await response.json(); - - if (data.valid) { - const idContrat = contrat?.id; - - fetch(`/contrat/update/client/${idContrat}/${idClient}`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - }) - .then(response => response.json()) - .then(data => { - if (data.valid) { - // Update Session storage - const clientStorage = JSON.parse(sessionStorage.getItem('tmp')); - - if (clientStorage) { - clientStorage.nomClient = document.getElementById('nomClient').value.toUpperCase(); - clientStorage.numClient = document.getElementById('numClient').value; - clientStorage.adresseClient = document.getElementById('adresseClient').value.toUpperCase(); - clientStorage.postalClient = document.getElementById('codePostalClient').value; - clientStorage.villeClient = document.getElementById('villeClient').value.toUpperCase(); - - sessionStorage.setItem('tmp', JSON.stringify(clientStorage)) - } - - // Le loader sera masqué lors de la redirection - // Redirect vers intermédiaire - window.location.href = `/navParcours?numParcours=${getNumParcoursFromURL()}&submenu=intermediaire`; - } else { - console.log('Echec lors de la mise à jour de la relation id contrat - id client :', data); - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la mise à jour du contrat."); - } - } - }) - .catch(error => { - console.error("Erreur lors de la mise à jour du contrat:", error); - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la mise à jour. Vérifiez votre connexion."); - } - }); - } else { - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la mise à jour du client."); - } - } - } - } catch (error) { - console.error("Erreur lors de la soumission du formulaire client:", error); - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la soumission. Vérifiez votre connexion."); - } - } - } - - // Exposer init globalement pour y accéder depuis l'extérieur - window.initSubmenuForm = init; -})(); diff --git a/etv2/public/js/historiqueParcours.js b/etv2/public/js/historiqueParcours.js deleted file mode 100644 index dd1a4c7f..00000000 --- a/etv2/public/js/historiqueParcours.js +++ /dev/null @@ -1,439 +0,0 @@ -document.addEventListener("DOMContentLoaded", async function () { - // Fetch data from the server - //// parse TOken - const token = localStorage.getItem("jwtToken"); - - if (!token) { - throw new Error("Aucun token trouvé dans le localStorage."); - } - - const userData = parseJwt(token); - - if (!userData) { - displayError("Erreur lors de l'extraction des données utilisateur à partir du token."); - - return; - } - - const { userAuthGroupe, userMatricule } = userData; - const isAdmin = userAuthGroupe === "ADMIN"; - const matriculeUser = userMatricule; - - let regionUser; - let tableData = []; - - const checkAdmin = document.querySelector('#checkRegionAdmin'); - - if (isAdmin) { - checkAdmin.style.display = "flex"; - } - - try { - if (typeof window.showLoader === 'function') { - window.showLoader(); - } - const userResponse = await fetchUserDetails(matriculeUser); - regionUser = userResponse?.user["@expand"].region?.nom || null; - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - } catch (error) { - displayError("Erreur lors de la récupération des données utilisateur."); - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la récupération des données utilisateur."); - } - return; - } - - const checkboxWrappers = Array.from(document.querySelectorAll('[class^="checkbox-wrapper-"]')); - const checkboxes = checkboxWrappers.map(wrapper => wrapper.querySelector('input[type="checkbox"]')); - const regions = checkboxWrappers.map(wrapper => wrapper.querySelector('.checkboxRegion').textContent); - - // Initialize checkboxes - checkboxes.forEach((checkbox, index) => { - if (regions[index] === regionUser) { - checkbox.checked = true; - } - }); - - // Fetch initial data - try { - if (typeof window.showLoader === 'function') { - window.showLoader(); - } - const response = await fetch(`/historiqueParcours/${regionUser}`); - const dataResponse = await response.json(); - - if (dataResponse.valid) { - tableData = dataResponse.data; - populateParcoursTable(tableData); - } else { - displayError("Erreur lors de la récupération des parcours"); - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la récupération des parcours"); - } - } - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - } catch (error) { - displayError("Failed to fetch data. Please try again later."); - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError("Erreur lors du chargement des données. Vérifiez votre connexion."); - } - } - - // Add event listeners to checkboxes - checkboxes.forEach((checkbox, index) => { - checkbox.addEventListener('change', async (e) => { - const region = regions[index]; - - if (checkbox.checked) { - try { - if (typeof window.showLoader === 'function') { - window.showLoader(); - } - const response = await fetch(`/historiqueParcours/${region}`); - const dataResponse = await response.json(); - - if (dataResponse.valid) { - tableData.push(...dataResponse.data); - populateParcoursTable(tableData); - } else { - displayError("Erreur lors de la récupération des parcours"); - if (typeof window.showError === 'function') { - window.showError("Erreur lors de la récupération des parcours"); - } - } - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - } catch (error) { - displayError("Failed to fetch data. Please try again later."); - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError("Erreur lors du chargement des données. Vérifiez votre connexion."); - } - } - } else { - removeRegionFromTableData(region); - populateParcoursTable(tableData); - } - }); - }); - - const removeRegionFromTableData = (region) => { - tableData = tableData.filter(item => item["@expand"]?.dernierUtilisateur?.["@expand"]?.region?.nom !== (region === regionUser ? regionUser : region)); - }; -}); - -const removeRegionFromTableData = (region) => { - if (region === regionUser) { - tableData = tableData.filter(item => item["@expand"]?.dernierUtilisateur?.["@expand"]?.region?.nom !== regionUser); - } else { - tableData = tableData.filter(item => item["@expand"]?.dernierUtilisateur?.["@expand"]?.region?.nom !== region); - } -}; - -async function fetchUserDetails(matriculeUser) { - try { - // Le loader doit être géré par l'appelant si nécessaire - const response = await fetch(`/user/read/matricule/${matriculeUser}`); - const data = await response.json(); - - return data.valid ? data : null; - } catch (error) { - displayError(`Erreur lors de la récupération du contrat avec le matricule ${matriculeUser} :`, error); - - return null; - } -} - -function populateParcoursTable(parcoursData) { - //initialise - const table = $("#historiqueParcours").DataTable({ - searching: true, - paging: true, - orderCellsTop: true, - fixedHeader: true, - responsive: true, - pageLength: 5, - retrieve: true, - columnDefs: [ - { - type: "date-uk", - targets: 10 - }, - { - type: "date-eu", - targets: 4 - }, - ], - order: [[0, "desc"]], - language: { - search: "Rechercher", - lengthMenu: "Afficher _MENU_ entrées par page", - info: "Affichage de _START_ à _END_ sur _TOTAL_ entrées", - infoEmpty: "Affichage de 0 à 0 sur 0 entrée", - infoFiltered: "(filtré de _MAX_ entrées au total)", - paginate: { - first: "Début", - previous: "Précédent", - next: "Suivant", - last: "Fin", - }, - }, - initComplete: function () { - const table = this.api(); - $("#historiqueParcours thead tr:eq(1) th").each(function (i) { - $("input", this).on("keyup change", function () { - if (table.column(i).search() !== this.value) { - table.column(i).search(this.value).draw(); - } - }); - }); - table.on("responsive-resize", function (e, datatable, columns) { - // Loop over each column to see if it's visible - for (let i = 0; i < columns.length; i++) { - if (columns[i]) { - $(table.column(i).header()).show(); - $(table.column(i).footer()).show(); - $($("#historiqueParcours thead tr:eq(1) th")[i]).show(); - } else { - $(table.column(i).header()).hide(); - $(table.column(i).footer()).hide(); - $($("#historiqueParcours thead tr:eq(1) th")[i]).hide(); - } - } - }); - $("#divToggleSearch").on("click", function () { - $("#historiqueParcours thead tr:eq(1)").toggle(); - }); - - $("#historiqueParcours thead tr:eq(1)").hide(); - }, - }); - - //clear existing data - table.clear(); - let row = null; - let tableRow = null; - - //generate Project - //loop on parcours - parcoursData.forEach((parcours) => { - const contratId = parcours["@expand"]?.contrat?.id; - const contrat = contratId ? parcours["@expand"].contrat : null; - const client = contrat ? contrat.client : null; - const lastUser = parcours["@expand"]?.dernierUtilisateur; - const region = lastUser["@expand"]?.region; - const produit = contrat ? (contrat.produit ? contrat.produit : "NC") : "NC" - - row = [ - parcours.numParcours, - new Date(parcours.created).toLocaleDateString("fr-FR", { - day: "numeric", - month: "numeric", - year: "numeric" - }), - parcours["@expand"].dernierUtilisateur?.matricule || "NC", - parcours["@expand"].dernierUtilisateur ? `${parcours["@expand"].dernierUtilisateur.prenom} ${parcours["@expand"].dernierUtilisateur.nom}` : "NC", - region ? region.nom : "NC", - contrat ? (contrat.numSaisine ? contrat.numSaisine : "NC") : "NC", - contrat ? (contrat.numContrat ? contrat.numContrat : "NC") : "NC", - contrat ? (contrat.produit ? contrat.produit : "NC") : "NC", - contrat ? (contrat.type ? contrat.type : "NC") : "NC", - contrat ? contrat["@expand"]?.intermediaire?.numPortefeuille || "NC" : "NC", - contrat ? contrat["@expand"]?.intermediaire?.nom || "NC" : "NC", - client ? client.numClient || "NC" : "NC", - client ? client.nom || "NC" : "NC", - ``, - ``, - ]; - tableRow = table.row.add(row).node(); - - // add class NC to style "Non communiqué" - $(tableRow) - .find("td") - .each(function (colIndex) { - if ($(this).text() === "NC") { - $(this).addClass("nc-value"); - } - }); - }); - - table.draw(); - - // for "afficher" entrées par page - $("#historiqueParcours_length select").val("10").trigger("change"); -} - -function downloadExcel(applyFilters) { - const table = $("#historiqueParcours").DataTable(); // Get the DataTable instance - const headers = $("#historiqueParcours th").filter(function () { - return !$(this).hasClass("no-export");}).map(function () { - return $(this).text().trim(); - }).get(); - - const data = []; - const rowsData = applyFilters ? table.rows({ filter: "applied" }).data() : table.rows().data(); - rowsData.each(function (row) { - const filteredRow = $(row).filter(function (index) { - return !$("#historiqueParcours th").eq(index).hasClass("no-export"); - }); - - data.push(filteredRow.get()); - }); - - const ws = XLSX.utils.aoa_to_sheet([headers, ...data]); - const wb = XLSX.utils.book_new(); - XLSX.utils.book_append_sheet(wb, ws, "Historique Parcours"); - - const wbout = XLSX.write(wb, { bookType: "xlsx", type: "binary" }); - - function s2ab(s) { - const buf = new ArrayBuffer(s.length); - const view = new Uint8Array(buf); - for (let i = 0; i < s.length; i++) view[i] = s.charCodeAt(i) & 0xff; - - return buf; - } - - const now = new Date(); - const pad = (num) => String(num).padStart(2, "0"); - const formattedDate = `${pad(now.getDate())}${pad(now.getMonth() + 1)}${now.getFullYear()}${pad(now.getHours())}${pad(now.getMinutes())}`; - - const blob = new Blob([s2ab(wbout)], { type: "application/octet-stream" }); - const link = document.createElement("a"); - link.href = URL.createObjectURL(blob); - link.download = `historique_parcours_${formattedDate}.xlsx`; - - document.body.appendChild(link); - link.click(); - document.body.removeChild(link); -} - -function downloadCSV(applyFilters) { - const table = $("#historiqueParcours").DataTable(); - const headers = $("#historiqueParcours th").filter(function () { - return !$(this).hasClass("no-export");}).map(function () { - return $(this).text().trim(); - }).get(); - - let csvContent = "data:text/csv;charset=utf-8," + headers.join(";") + "\n"; - const rowsData = applyFilters ? table.rows({ filter: "applied" }).data() : table.rows().data(); - - rowsData.each(function (row) { - let filteredRow = row.filter((cell, index) => { - return !$(`#historiqueParcours th`).eq(index).hasClass("no-export"); - }); - csvContent += filteredRow.join(";") + "\n"; - }); - - const encodedUri = encodeURI(csvContent); - const link = document.createElement("a"); - link.setAttribute("href", encodedUri); - link.setAttribute("download", "historique_parcours.csv"); - document.body.appendChild(link); - link.click(); -} - -async function generateProject(numParcours, produit) { - try { - if (typeof window.showLoader === 'function') { - window.showLoader(); - } - const response = await fetch(`/generate/${produit}/projet/${numParcours}`, { - method: "POST", - headers: { "Content-Type": "application/json"}, - }); - - - if (!response.ok) throw new Error("Erreur réseau ou serveur"); - - const disposition = response.headers.get("content-disposition"); - const filename = disposition.split(";")[1].trim().split("=")[1]; - - const blob = await response.blob(); - const url = window.URL.createObjectURL(blob); - const a = document.createElement("a"); - a.href = url; - a.download = filename; - document.body.appendChild(a); - a.click(); - window.URL.revokeObjectURL(url); - a.remove(); - - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - } catch (error) { - console.error("Erreur lors de la génération du projet:", error); - if (typeof window.hideLoader === 'function') { - window.hideLoader(); - } - if (typeof window.showError === 'function') { - window.showError('Erreur lors de la génération du projet. Vérifiez votre connexion.'); - } - } -} - -// Fonction pour décoder le JWT -function parseJwt(token) { - try { - const base64Url = token.split(".")[1]; - const base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); - const jsonPayload = decodeURIComponent(atob(base64).split("").map(function (c) { return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2);}).join("")); - return JSON.parse(jsonPayload); - } catch (error) { - console.error("Erreur lors du décodage du token:", error); - - return null; - } -} - -//generagte Project -$("#historiqueParcours").on("click", "button#btnGenerate", function() { - const numParcours = $(this).data("num-parcours"); - const produit = $(this).data("produit"); - - generateProject(numParcours, produit); -}); - -//export CSV -$("#exportCSV").on("click", function () { - downloadCSV(false); -}); - -//export CSV with filter -$("#exportCSVFilter").on("click", function () { - downloadCSV(true); -}); - -//export to excel -$("#exportXlxs").on("click", function () { - downloadExcel(false); -}); - -// export to excel using Filter -$("#exportXlxsFilter").on("click", function () { - downloadExcel(true); -}); - - -function displayError(message) { - const errorElement = document.getElementById("error"); - - errorElement.textContent = message; - errorElement.style.display = "block"; -} diff --git a/etv2/public/js/loader.js b/etv2/public/js/loader.js deleted file mode 100644 index 742ead39..00000000 --- a/etv2/public/js/loader.js +++ /dev/null @@ -1,51 +0,0 @@ -document.addEventListener("DOMContentLoaded", () => { - const loader = document.getElementById("loader-overlay"); // déjà présent dans le layout.ejs - const errorMessage = document.getElementById("error-message"); - - let activateTimeout = null; - let timeoutError = null; - - // Le loader est le premier élément dans le HTML, donc il est chargé en premier - // Il est prêt à s'afficher immédiatement dès que showLoader() est appelé - // Pas de classe "hidden" par défaut = il est dans le DOM et prêt instantanément - - //activer le loader et le montrer a l'écran - window.showLoader = function() { - clearTimeout(activateTimeout); - clearTimeout(timeoutError); - errorMessage.style.display = "none"; - loader.classList.remove("hidden"); - - // Délai avant l'affichage : permet d'éviter le flash du loader sur les chargements rapides - // Si hideLoader() est appelé avant ce délai, l'utilisateur ne verra jamais le loader - activateTimeout = setTimeout(() => { - // Vérifier qu'on est toujours pas caché (au cas où hideLoader() ait été appelé entre temps) - if (!loader.classList.contains("hidden")) { - loader.classList.add("active"); - } - }, 500); - - // Afficher un message d'erreur après 5 secondes si le loader est toujours actif - timeoutError = setTimeout(() => { - if (loader.classList.contains("active") && !loader.classList.contains("hidden")) { - showError("Connexion lente ou problème de réseau. Veuillez vérifier votre connexion."); - } - }, 5000); - }; - - //enlever le loader et le faire disparaitre - window.hideLoader = function() { - clearTimeout(activateTimeout); - clearTimeout(timeoutError); - loader.classList.remove("active"); - setTimeout(() => loader.classList.add("hidden"), 500); - }; - - //cas d'erreur - window.showError = function(msg) { - clearTimeout(activateTimeout); - clearTimeout(timeoutError); - errorMessage.textContent = msg; - errorMessage.style.display = "block"; - }; -}); diff --git a/etv2/public/js/navigation.js b/etv2/public/js/navigation.js deleted file mode 100644 index f2559d91..00000000 --- a/etv2/public/js/navigation.js +++ /dev/null @@ -1,49 +0,0 @@ -document.addEventListener("DOMContentLoaded", () => { - const container = document.querySelector(".container"); - - async function loadPage(url, push = true) { - showLoader(); - - try { - - const res = await fetch(url, { headers: { "X-Requested-With": "fetch" }}); - const html = await res.text(); - - const parser = new DOMParser(); - const doc = parser.parseFromString(html, "text/html"); - const newContent = doc.querySelector(".container").innerHTML; - - container.innerHTML = newContent; - - if (push) history.pushState({}, "", url); - - } - - catch (err) { - showError("Impossible de charger la page. Vérifiez votre connexion."); - } - - finally { - hideLoader(); - } - } - - // Intercepter les clics sur les liens internes - document.body.addEventListener("click", (e) => { - const link = e.target.closest("a"); - - if (link && link.getAttribute("href").startsWith("/")) { - - e.preventDefault(); - loadPage(link.href); - - } - }); - - // Gérer le bouton retour - window.addEventListener("popstate", () => { - - loadPage(location.pathname, false); - - }); -}); diff --git a/etv2/src/controllers/historiqueParcoursController.js b/etv2/src/controllers/historiqueParcoursController.js deleted file mode 100644 index 490ea0fd..00000000 --- a/etv2/src/controllers/historiqueParcoursController.js +++ /dev/null @@ -1,51 +0,0 @@ -const express = require("express"); -const router = express.Router(); -const renderPage = require("../utils/renderHelper"); -const logger = require("../utils/logger"); -const parcoursService = require("../services/parcoursService"); - -router.get("/", (req, res) => { - renderPage("historiqueParcours.ejs", res); -}); - -router.get("/read", async (req, res) => { - try { - const allParcours = await parcoursService.getAllParcours(); - - if (allParcours) { - res.json({ valid: true, allParcours }); - } else { - res.json({ valid: false }); - } - } catch (error) { - logger.log("error", error); - - res.status(500).json({ - valid: false, - error: "Erreur lors de la récupération des parcours.", - }); - } -}); - -//controller to get parcours by region -router.get("/:regionUser", async (req, res) => { - try { - const { regionUser } = req.params; - const data = await parcoursService.getParcoursByRegion(regionUser); - - if (data) { - res.json({ valid: true, data }); - } else { - res.json({ valid: data }); - } - } catch (error) { - logger.log("error", error); - - res.status(500).json({ - valid: false, - error: "Erreur lors de la récupération des parcours.", - }); - } -}); - -module.exports = router; diff --git a/etv2/src/services/parcoursService.js b/etv2/src/services/parcoursService.js deleted file mode 100644 index 95dfaa95..00000000 --- a/etv2/src/services/parcoursService.js +++ /dev/null @@ -1,117 +0,0 @@ -const { db } = require("../db/db-connect"); -const logger = require("../utils/logger"); -const globalService = require("../services/globalService"); - -async function getParcoursByNumParcours(numParcours) { - const criteria = {filter: `numParcours='${numParcours}'`, expand: `dernierUtilisateur.region, contrat`}; - - return globalService.fetchInfoByCriteria("parcours", criteria); -} - -// get All parcours saved in DB -async function getAllParcours() { - try { - const criteria = {expand: "dernierUtilisateur, contrat, region"}; - const resultList = await db.records.getList("parcours", 1, 200, criteria); - - return resultList; - } catch (error) { - logger.log('error', error); - return null; - } -} - -// get all parcours filtred on region -async function getParcoursByRegion(regionUser) { - try { - // Récupérer les enregistrements de la collection "parcours" - const filter = `dernierUtilisateur.region.nom = "${regionUser}"`; - const parcoursRecords = await db.records.getFullList("parcours", 200, { - sort: "-created", - filter: filter, - expand: "contrat, dernierUtilisateur.region, contrat.intermediaire", - }); - - // Récupérer les relations client pour chaque contrat - for (const record of parcoursRecords) { - const contrat = record["@expand"].contrat; - if (contrat && contrat.client) { - const clientRecord = await db.records.getOne("client", contrat.client); - record["@expand"].contrat.client = clientRecord; - } - } - - return parcoursRecords; - } catch (error) { - logger.log('error', error); - throw error; - } -} - -async function createNewEmptyParcours(numParcours) { - try { - const data = { ["numParcours"]: numParcours }; - const record = await db.records.create("parcours", data); - - if (record) { - return record.id; - } else { - return null; - } - } catch (error) { - logger.log("error", error); - return null; - } -} - -async function updateFieldValueParcours(id, field, value) { - try { - const data = { [field]: value }; - const record = await db.records.update("parcours", id, data); - - if (record) { - return record.id; - } else { - return null; - } - } catch (error) { - logger.log("error", error); - return null; - } -} - -async function getNewParcoursNumber() { - try { - // fetch a paginated records list en utilisant le filtre pour le parcours - const resultList = await db.records.getFullList("parcours", 99999999, {sort: "-numParcours",}); - - if (resultList.length > 0) { - const lastNumParcours = resultList[0].numParcours; - - // Extrait les chiffres du numéro de parcours - const numericPart = lastNumParcours.substring(1); // Supprime le "P" initial - const numericValue = parseInt(numericPart, 10); - - if (!isNaN(numericValue)) { - const newNumericValue = numericValue + 1; - const newNumParcours = "P" + newNumericValue.toString().padStart(9, "0"); - - return newNumParcours; - } - } else { - return null; - } - } catch (error) { - logger.log("error", error); - return null; - } -} - -module.exports = { - getNewParcoursNumber, - getParcoursByNumParcours, - createNewEmptyParcours, - updateFieldValueParcours, - getAllParcours, - getParcoursByRegion, -}; diff --git a/etv2/src/templates/template-declinaison-tarifaire-rc - ancienne version.docx b/etv2/src/templates/template-declinaison-tarifaire-rc - ancienne version.docx deleted file mode 100644 index 334ba6c0..00000000 Binary files a/etv2/src/templates/template-declinaison-tarifaire-rc - ancienne version.docx and /dev/null differ diff --git a/etv2/src/templates/template-declinaison-tarifaire-rc.docx b/etv2/src/templates/template-declinaison-tarifaire-rc.docx deleted file mode 100644 index 64ad83ee..00000000 Binary files a/etv2/src/templates/template-declinaison-tarifaire-rc.docx and /dev/null differ diff --git a/etv2/views/layout.ejs b/etv2/views/layout.ejs deleted file mode 100644 index b81dfe06..00000000 --- a/etv2/views/layout.ejs +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - EasyTransport - - - <%- typeof extraHeadContent !=='undefined' ? extraHeadContent : '' %> - - - - - - - - - - - - - - - - - - - - - -
- - -
-
-
-
-
-
- - - <%- include('partials/navbar') %> - - -
- <%- typeof body !=='undefined' ? body : '' %> -
- - - - - - - - - - - - - - - - -
- - diff --git a/zzz-2.pdf b/zzz-2.pdf deleted file mode 100644 index ba13b728..00000000 Binary files a/zzz-2.pdf and /dev/null differ diff --git a/zzz.pdf b/zzz.pdf deleted file mode 100644 index 24f129b6..00000000 Binary files a/zzz.pdf and /dev/null differ