From edcd51599cafe5e9a470eed02ef6ee5d00985398 Mon Sep 17 00:00:00 2001 From: inmake Date: Fri, 1 Dec 2023 14:43:18 +0500 Subject: [PATCH] upd --- client/.env | 2 +- client/package.json | 5 +- client/src/App.tsx | 171 +- client/src/components/ModalContainer.tsx | 23 + client/src/components/MoreProjectButton.tsx | 2 +- client/src/components/ProjectCard.tsx | 65 +- client/src/components/icons/MobileIcon.tsx | 28 + .../src/components/icons/TouchScreenIcon.tsx | 32 + client/src/components/icons/VRIcon.tsx | 18 + .../components/modals/CreateProjectModal.tsx | 293 ++++ .../components/modals/DeleteProjectModal.tsx | 40 + .../components/modals/EditProjectModal.tsx | 317 ++++ client/src/index.css | 7 + client/src/main.tsx | 5 + client/src/pages/ProjectsPage.tsx | 76 + client/src/stores/useModalStore.ts | 16 + client/src/types/Device.ts | 3 + client/src/types/IProject.ts | 14 + client/src/utils/api.ts | 7 + client/yarn.lock | 29 + server/.env | 4 +- server/package.json | 8 +- server/src/config/db.ts | 16 + server/src/db.ts | 62 - server/src/index.ts | 10 +- server/src/models/Project.ts | 42 + server/src/routes/projects.ts | 76 + server/src/routes/upload.ts | 61 + .../8c9b0949-8b30-457c-a6d5-aeef71866a42.jpg | Bin 0 -> 14079 bytes .../925c5501-5e6e-4b23-bad2-ea7e7d5e96e2.jpg | Bin 0 -> 55988 bytes .../9d6db744-3af3-41a7-b24e-ef0f056c3d6e.jpg | Bin 0 -> 15451 bytes .../d5829c95-f38b-43e9-883a-c23a2080e496.jpg | Bin 0 -> 3511 bytes server/yarn.lock | 1473 +++++++++++++++++ 33 files changed, 2669 insertions(+), 236 deletions(-) create mode 100644 client/src/components/ModalContainer.tsx create mode 100644 client/src/components/icons/MobileIcon.tsx create mode 100644 client/src/components/icons/TouchScreenIcon.tsx create mode 100644 client/src/components/icons/VRIcon.tsx create mode 100644 client/src/components/modals/CreateProjectModal.tsx create mode 100644 client/src/components/modals/DeleteProjectModal.tsx create mode 100644 client/src/components/modals/EditProjectModal.tsx create mode 100644 client/src/pages/ProjectsPage.tsx create mode 100644 client/src/stores/useModalStore.ts create mode 100644 client/src/types/Device.ts create mode 100644 client/src/types/IProject.ts create mode 100644 client/src/utils/api.ts create mode 100644 server/src/config/db.ts delete mode 100644 server/src/db.ts create mode 100644 server/src/models/Project.ts create mode 100644 server/src/routes/projects.ts create mode 100644 server/src/routes/upload.ts create mode 100644 server/uploads/8c9b0949-8b30-457c-a6d5-aeef71866a42.jpg create mode 100644 server/uploads/925c5501-5e6e-4b23-bad2-ea7e7d5e96e2.jpg create mode 100644 server/uploads/9d6db744-3af3-41a7-b24e-ef0f056c3d6e.jpg create mode 100644 server/uploads/d5829c95-f38b-43e9-883a-c23a2080e496.jpg create mode 100644 server/yarn.lock diff --git a/client/.env b/client/.env index cd41370..9c07060 100644 --- a/client/.env +++ b/client/.env @@ -1 +1 @@ -VITE_API_URL=http://localhost:3000 \ No newline at end of file +VITE_API_URL=http://192.168.1.170:3000 \ No newline at end of file diff --git a/client/package.json b/client/package.json index 20bad07..8a384d5 100644 --- a/client/package.json +++ b/client/package.json @@ -12,14 +12,17 @@ "dependencies": { "date-fns": "^2.30.0", "framer-motion": "^10.16.5", + "ky": "^1.1.3", "prop-types": "^15.8.1", "react": "^18.2.0", "react-circular-progressbar": "^2.1.0", + "react-device-detect": "^2.2.3", "react-dom": "^18.2.0", "react-rangeslider": "^2.2.0", "react-router-dom": "^6.18.0", "react-swipeable": "^7.0.1", - "usehooks-ts": "^2.9.1" + "usehooks-ts": "^2.9.1", + "zustand": "^4.4.6" }, "devDependencies": { "@types/react": "^18.2.15", diff --git a/client/src/App.tsx b/client/src/App.tsx index 90107a5..fd45491 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -8,9 +8,9 @@ import BlendStream from "./components/blendings/BlendStream"; import StreamButton from "./components/StreamButton"; import "react-rangeslider/lib/index.css"; import "./components/RangeSlider.css"; -import { useState } from "react"; +import { useEffect, useState } from "react"; import ProjectCard from "./components/ProjectCard"; -import MoreProjectButton from "./components/MoreProjectButton"; +// import MoreProjectButton from "./components/MoreProjectButton"; import ExampleCard from "./components/ExampleCard"; import FeatureVideoViewBox from "./components/FeatureVideoViewBox"; import Button from "./components/Button"; @@ -20,15 +20,36 @@ import BlendingClients from "./components/blendings/BlendingClients"; import Heading2 from "./components/Headings/Heading2"; // import PlayIcon from "./components/icons/PlayIcon"; import VideoSliderMobile from "./components/VideoSliderMobile"; +// import { isMobile } from "react-device-detect"; +import IProject from "./types/IProject"; +import api from "./utils/api"; function App() { const [selectedVideo, setSelectedVideo] = useState( "https://graff.estate/videos/features/virtual_tour.mp4" ); - const [isShowProjects, setIsShowProjects] = useState(false); + // const [isShowProjects, setIsShowProjects] = useState(false); + + const [projects, setProjects] = useState([]); + + async function getProjects() { + try { + const projects: IProject[] = await api.get("projects").json(); + + setProjects(projects); + } catch (error) { + if (error instanceof Error) { + alert(`Error: ${error.message}`); + } + } + } + + useEffect(() => { + getProjects(); + }, []); return ( -
+
@@ -408,145 +429,9 @@ function App() {
Проекты
- - - - - - - - - - - - - - - - - {!isShowProjects ? ( - setIsShowProjects(true)} /> - ) : ( - <> - - - - - - - - - - - - - - - - - - - - - - - - - - - )} + {projects.map((project, index) => ( + + ))}
diff --git a/client/src/components/ModalContainer.tsx b/client/src/components/ModalContainer.tsx new file mode 100644 index 0000000..cc96374 --- /dev/null +++ b/client/src/components/ModalContainer.tsx @@ -0,0 +1,23 @@ +import useModalStore from "../stores/useModalStore"; + +function ModalContainer() { + const [modal, setModal] = useModalStore((state) => [ + state.modal, + state.setModal, + ]); + + if (modal) { + return ( +
setModal(null)} + className={`min-h-screen p-8 absolute top-0 left-0 w-full flex justify-center items-center bg-black bg-opacity-30 overflow-auto cursor-pointer transition-opacity`} + > +
e.stopPropagation()} className="cursor-default"> + {modal} +
+
+ ); + } +} + +export default ModalContainer; diff --git a/client/src/components/MoreProjectButton.tsx b/client/src/components/MoreProjectButton.tsx index fa4ede9..18cccf1 100644 --- a/client/src/components/MoreProjectButton.tsx +++ b/client/src/components/MoreProjectButton.tsx @@ -15,8 +15,8 @@ function MoreProjectButton({ handleClick }: MoreProjectButtonProps) { className="sm:aspect-[4/3] border border-[#3D425C] rounded-[48px] px-6 py-4 flex sm:flex-col sm:justify-center justify-between items-center gap-2" onClick={handleClick} > -

Показать еще

+ ); } diff --git a/client/src/components/ProjectCard.tsx b/client/src/components/ProjectCard.tsx index ca2a380..25d555c 100644 --- a/client/src/components/ProjectCard.tsx +++ b/client/src/components/ProjectCard.tsx @@ -1,21 +1,19 @@ import { motion } from "framer-motion"; import ProgressPie from "./ProgressPie"; - -interface ProjectCardProps { - title: string; - company: string; - image: string; - stream?: boolean; - stage?: number; -} +import TouchScreenIcon from "./icons/TouchScreenIcon"; +import VRIcon from "./icons/VRIcon"; +import MobileIcon from "./icons/MobileIcon"; +import IProject from "../types/IProject"; function ProjectCard({ - title, + name, company, + city, image, stage = 6, - stream, -}: ProjectCardProps) { + releaseYear = 2023, + devices = [], +}: IProject) { const stagePercentage = Math.round((100 / 6) * stage); return ( @@ -35,13 +33,13 @@ function ProjectCard({
-

- {title} +

{name}

+

+ {company}, {city}

-

{company}

-
+
{stage < 6 ? (

@@ -51,17 +49,38 @@ function ProjectCard({

) : (
-

Сдан

+

+ {releaseYear} +

)} - {stream && ( -
-
-

- Stream -

-
+ {devices.length > 0 && ( + <> + {devices.includes("stream") && ( +
+
+

+ Stream +

+
+ )} + {devices.includes("touch") && ( +
+ +
+ )} + {devices.includes("mobile") && ( +
+ +
+ )} + {devices.includes("vr") && ( +
+ +
+ )} + )}
diff --git a/client/src/components/icons/MobileIcon.tsx b/client/src/components/icons/MobileIcon.tsx new file mode 100644 index 0000000..0d73ee6 --- /dev/null +++ b/client/src/components/icons/MobileIcon.tsx @@ -0,0 +1,28 @@ +function MobileIcon() { + return ( + + + + + ); +} + +export default MobileIcon; diff --git a/client/src/components/icons/TouchScreenIcon.tsx b/client/src/components/icons/TouchScreenIcon.tsx new file mode 100644 index 0000000..43a40eb --- /dev/null +++ b/client/src/components/icons/TouchScreenIcon.tsx @@ -0,0 +1,32 @@ +function TouchScreenIcon() { + return ( + + + + + + + + + + + ); +} + +export default TouchScreenIcon; diff --git a/client/src/components/icons/VRIcon.tsx b/client/src/components/icons/VRIcon.tsx new file mode 100644 index 0000000..2b0e47b --- /dev/null +++ b/client/src/components/icons/VRIcon.tsx @@ -0,0 +1,18 @@ +function VRIcon() { + return ( + + + + ); +} + +export default VRIcon; diff --git a/client/src/components/modals/CreateProjectModal.tsx b/client/src/components/modals/CreateProjectModal.tsx new file mode 100644 index 0000000..4242a2e --- /dev/null +++ b/client/src/components/modals/CreateProjectModal.tsx @@ -0,0 +1,293 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { ChangeEvent, useEffect, useState } from "react"; +import api from "../../utils/api"; +import Button from "../Button"; +import IProject from "../../types/IProject"; +import useModalStore from "../../stores/useModalStore"; + +function CreateProjectModal() { + const [project, setProject] = useState({ + name: "", + company: "", + city: "", + image: "", + devices: [], + }); + + const [file, setFile] = useState(); + const [previewFile, setPreviewFile] = useState(); + const [setModal] = useModalStore((state) => [state.setModal]); + + function handleChangeFile(e: ChangeEvent) { + if (!e.target.files) return; + + const targetFile = e.target.files[0]; + + setFile(targetFile); + setPreviewFile(URL.createObjectURL(targetFile)); + } + + async function uploadFile() { + if (!file) return; + + const formData = new FormData(); + formData.append("file", file); + + try { + const { file }: { file: string } = await api + .post("upload", { body: formData }) + .json(); + + setProject((prev) => ({ ...prev, image: file })); + } catch (error) { + if (error instanceof Error) { + alert(`Error: ${error.message}`); + } + } + } + + async function createProject() { + try { + await api.post("projects", { json: { ...project } }); + + setModal(null); + } catch (error) { + if (error instanceof Error) { + alert(`Error: ${error.message}`); + } + } + } + + async function handleSubmit(e: ChangeEvent) { + e.preventDefault(); + + await createProject(); + + window.location.reload(); + } + + useEffect(() => { + uploadFile(); + }, [file]); + + return ( +
+

Создание проекта

+
+
+ + + setProject((prev) => ({ ...prev, name: e.target.value })) + } + /> +
+ +
+ + + setProject((prev) => ({ ...prev, company: e.target.value })) + } + /> +
+ +
+ + + setProject((prev) => ({ ...prev, city: e.target.value })) + } + /> +
+ + + +
+ + +
+ +
+ + +
+ +
+

Девайсы

+
+ + + + + + + +
+
+ +
+ +
+
+
+ ); +} + +export default CreateProjectModal; diff --git a/client/src/components/modals/DeleteProjectModal.tsx b/client/src/components/modals/DeleteProjectModal.tsx new file mode 100644 index 0000000..413745f --- /dev/null +++ b/client/src/components/modals/DeleteProjectModal.tsx @@ -0,0 +1,40 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import api from "../../utils/api"; +import Button from "../Button"; +import useModalStore from "../../stores/useModalStore"; + +interface DeleteProjectModalProps { + projectId: string; +} + +function DeleteProjectModal({ projectId }: DeleteProjectModalProps) { + const [setModal] = useModalStore((state) => [state.setModal]); + + async function deleteProject() { + try { + await api.delete(`projects/${projectId}`); + setModal(null); + window.location.reload(); + } catch (error) { + if (error instanceof Error) { + alert(`Error: ${error.message}`); + } + } + } + + return ( +
+

Удаление проекта

+ + +
+ ); +} + +export default DeleteProjectModal; diff --git a/client/src/components/modals/EditProjectModal.tsx b/client/src/components/modals/EditProjectModal.tsx new file mode 100644 index 0000000..0cc0376 --- /dev/null +++ b/client/src/components/modals/EditProjectModal.tsx @@ -0,0 +1,317 @@ +/* eslint-disable react-hooks/exhaustive-deps */ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { ChangeEvent, useEffect, useState } from "react"; +import api from "../../utils/api"; +import Button from "../Button"; +import IProject from "../../types/IProject"; +import useModalStore from "../../stores/useModalStore"; + +interface EditProjectModalProps { + projectId: string; +} + +function EditProjectModal({ projectId }: EditProjectModalProps) { + const [project, setProject] = useState({ + name: "", + company: "", + city: "", + image: "", + devices: [], + }); + + const [file, setFile] = useState(); + const [previewFile, setPreviewFile] = useState(); + const [setModal] = useModalStore((state) => [state.setModal]); + + function handleChangeFile(e: ChangeEvent) { + if (!e.target.files) return; + + const targetFile = e.target.files[0]; + + setFile(targetFile); + setPreviewFile(URL.createObjectURL(targetFile)); + } + + async function uploadFile() { + if (!file) return; + + const formData = new FormData(); + formData.append("file", file); + + try { + const { file }: { file: string } = await api + .post("upload", { body: formData }) + .json(); + + setProject((prev) => ({ ...prev, image: file })); + } catch (error) { + if (error instanceof Error) { + alert(`Error: ${error.message}`); + } + } + } + + async function updateProject() { + try { + await api.put(`projects/${projectId}`, { json: { ...project } }); + } catch (error) { + if (error instanceof Error) { + alert(`Error: ${error.message}`); + } + } + } + + async function handleSubmit(e: ChangeEvent) { + e.preventDefault(); + + await updateProject(); + setModal(null); + window.location.reload(); + } + + async function getProject() { + try { + const project: IProject = await api.get(`projects/${projectId}`).json(); + + setProject(project); + } catch (error) { + if (error instanceof Error) { + alert(`Error: ${error.message}`); + } + } + } + + useEffect(() => { + uploadFile(); + }, [file]); + + useEffect(() => { + getProject(); + }, []); + + return ( +
+

+ Редактирование проекта +

+
+
+ + + setProject((prev) => ({ ...prev, name: e.target.value })) + } + /> +
+ +
+ + + setProject((prev) => ({ ...prev, company: e.target.value })) + } + /> +
+ +
+ + + setProject((prev) => ({ ...prev, city: e.target.value })) + } + /> +
+ + + +
+ + +
+ +
+ + +
+ +
+

Девайсы

+
+ + + + + + + +
+
+ +
+ +
+
+
+ ); +} + +export default EditProjectModal; diff --git a/client/src/index.css b/client/src/index.css index c4015f5..a97eaff 100644 --- a/client/src/index.css +++ b/client/src/index.css @@ -8,6 +8,7 @@ body { font-family: "Inter", sans-serif; background-color: #14161f; + color: #fff; } .font-gilroy { @@ -57,6 +58,8 @@ body { border-width: 2px; } +/* Custom Line Through */ + .custom-line-through { position: relative; } @@ -84,3 +87,7 @@ body { rgba(20, 22, 31, 0.6) 100% ); } + +.button { + @apply 2xl:text-[40px] xl:text-2xl sm:text-base text-sm; +} diff --git a/client/src/main.tsx b/client/src/main.tsx index f0bccee..9e84bb2 100644 --- a/client/src/main.tsx +++ b/client/src/main.tsx @@ -2,12 +2,17 @@ import ReactDOM from "react-dom/client"; import { createBrowserRouter, RouterProvider } from "react-router-dom"; import App from "./App.tsx"; import "./index.css"; +import ProjectsPage from "./pages/ProjectsPage.tsx"; const router = createBrowserRouter([ { path: "/", element: , }, + { + path: "/projects", + element: , + }, ]); ReactDOM.createRoot(document.getElementById("root")!).render( diff --git a/client/src/pages/ProjectsPage.tsx b/client/src/pages/ProjectsPage.tsx new file mode 100644 index 0000000..e29e637 --- /dev/null +++ b/client/src/pages/ProjectsPage.tsx @@ -0,0 +1,76 @@ +import { useEffect, useState } from "react"; +import api from "../utils/api"; +import IProject from "../types/IProject"; +import ProjectCard from "../components/ProjectCard"; +import Button from "../components/Button"; +import useModalStore from "../stores/useModalStore"; +import CreateProjectModal from "../components/modals/CreateProjectModal"; +import ModalContainer from "../components/ModalContainer"; +import EditProjectModal from "../components/modals/EditProjectModal"; +import DeleteProjectModal from "../components/modals/DeleteProjectModal"; + +function ProjectsPage() { + const [projects, setProjects] = useState([]); + const [setModal] = useModalStore((state) => [state.setModal]); + + async function getProjects() { + try { + const projects: IProject[] = await api.get("projects").json(); + + setProjects(projects); + } catch (error) { + if (error instanceof Error) { + alert(`Error: ${error.message}`); + } + } + } + + function handleClickCreateProject() { + setModal(); + } + + useEffect(() => { + getProjects(); + }, []); + + return ( +
+
+
+ +
+ {projects.map((project, index) => ( +
+ +
+ + +
+
+ ))} +
+
+
+ + +
+ ); +} + +export default ProjectsPage; diff --git a/client/src/stores/useModalStore.ts b/client/src/stores/useModalStore.ts new file mode 100644 index 0000000..601ef24 --- /dev/null +++ b/client/src/stores/useModalStore.ts @@ -0,0 +1,16 @@ +import { ReactNode } from "react"; +import { create } from "zustand"; + +interface ModalState { + modal: ReactNode | null; + setModal: (modal: ReactNode) => void; + removeModal: () => void; +} + +const useModalStore = create((set) => ({ + modal: null, + setModal: (modal) => set({ modal }), + removeModal: set({ modal: null }), +})); + +export default useModalStore; diff --git a/client/src/types/Device.ts b/client/src/types/Device.ts new file mode 100644 index 0000000..59c0b35 --- /dev/null +++ b/client/src/types/Device.ts @@ -0,0 +1,3 @@ +type Device = "stream" | "touch" | "mobile" | "vr"; + +export default Device; diff --git a/client/src/types/IProject.ts b/client/src/types/IProject.ts new file mode 100644 index 0000000..92253cc --- /dev/null +++ b/client/src/types/IProject.ts @@ -0,0 +1,14 @@ +import Device from "./Device"; + +interface IProject { + id?: string; + name: string; + company: string; + city: string; + image: string; + stage?: number; + releaseYear?: number; + devices?: Device[]; +} + +export default IProject; diff --git a/client/src/utils/api.ts b/client/src/utils/api.ts new file mode 100644 index 0000000..74ccfa8 --- /dev/null +++ b/client/src/utils/api.ts @@ -0,0 +1,7 @@ +import ky from "ky"; + +const api = ky.extend({ + prefixUrl: import.meta.env.VITE_API_URL, +}); + +export default api; diff --git a/client/yarn.lock b/client/yarn.lock index 010a114..5dea54f 100644 --- a/client/yarn.lock +++ b/client/yarn.lock @@ -1129,6 +1129,11 @@ keyv@^4.5.3: dependencies: json-buffer "3.0.1" +ky@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/ky/-/ky-1.1.3.tgz#0d75906dfae00af0b4ea1a6fe29e505c4a0ee234" + integrity sha512-t7q8sJfazzHbfYxiCtuLIH4P+pWoCgunDll17O/GBZBqMt2vHjGSx5HzSxhOc2BDEg3YN/EmeA7VKrHnwuWDag== + levn@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" @@ -1409,6 +1414,13 @@ react-circular-progressbar@^2.1.0: resolved "https://registry.yarnpkg.com/react-circular-progressbar/-/react-circular-progressbar-2.1.0.tgz#99e5ae499c21de82223b498289e96f66adb8fa3a" integrity sha512-xp4THTrod4aLpGy68FX/k1Q3nzrfHUjUe5v6FsdwXBl3YVMwgeXYQKDrku7n/D6qsJA9CuunarAboC2xCiKs1g== +react-device-detect@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/react-device-detect/-/react-device-detect-2.2.3.tgz#97a7ae767cdd004e7c3578260f48cf70c036e7ca" + integrity sha512-buYY3qrCnQVlIFHrC5UcUoAj7iANs/+srdkwsnNjI7anr3Tt7UY6MqNxtMLlr0tMBied0O49UZVK8XKs3ZIiPw== + dependencies: + ua-parser-js "^1.0.33" + react-dom@^18.2.0: version "18.2.0" resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" @@ -1680,6 +1692,11 @@ typescript@^5.0.2: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.2.2.tgz#5ebb5e5a5b75f085f22bc3f8460fba308310fa78" integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== +ua-parser-js@^1.0.33: + version "1.0.37" + resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-1.0.37.tgz#b5dc7b163a5c1f0c510b08446aed4da92c46373f" + integrity sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ== + update-browserslist-db@^1.0.13: version "1.0.13" resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz#3c5e4f5c083661bd38ef64b6328c26ed6c8248c4" @@ -1695,6 +1712,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + usehooks-ts@^2.9.1: version "2.9.1" resolved "https://registry.yarnpkg.com/usehooks-ts/-/usehooks-ts-2.9.1.tgz#953d3284851ffd097432379e271ce046a8180b37" @@ -1742,3 +1764,10 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zustand@^4.4.6: + version "4.4.6" + resolved "https://registry.yarnpkg.com/zustand/-/zustand-4.4.6.tgz#03c78e3e2686c47095c93714c0c600b72a6512bd" + integrity sha512-Rb16eW55gqL4W2XZpJh0fnrATxYEG3Apl2gfHTyDSE965x/zxslTikpNch0JgNjJA9zK6gEFW8Fl6d1rTZaqgg== + dependencies: + use-sync-external-store "1.2.0" diff --git a/server/.env b/server/.env index c0c68b1..b2b3968 100644 --- a/server/.env +++ b/server/.env @@ -1 +1,3 @@ -PORT=3000 \ No newline at end of file +PORT=3000 +MONGO_URI=mongodb://root:p62Z!ZatgY25@194.26.138.94:27017/ +JWT_SECRET=yDcdWJgvlj2bJAuovYfQHTvtc3U9xQPw \ No newline at end of file diff --git a/server/package.json b/server/package.json index d2ee549..2373119 100644 --- a/server/package.json +++ b/server/package.json @@ -11,12 +11,18 @@ "dependencies": { "cors": "^2.8.5", "dotenv": "^16.3.1", - "express": "^4.18.2" + "express": "^4.18.2", + "mongoose": "^8.0.1", + "multer": "^1.4.5-lts.1", + "sharp": "^0.32.6", + "uuid": "^9.0.1" }, "devDependencies": { "@types/cors": "^2.8.15", "@types/express": "^4.17.20", + "@types/multer": "^1.4.11", "@types/node": "^20.8.10", + "@types/uuid": "^9.0.7", "nodemon": "^3.0.1", "ts-node": "^10.9.1", "tsconfig-paths": "^4.2.0", diff --git a/server/src/config/db.ts b/server/src/config/db.ts new file mode 100644 index 0000000..b277567 --- /dev/null +++ b/server/src/config/db.ts @@ -0,0 +1,16 @@ +import { connect } from "mongoose"; + +async function connectDB() { + try { + await connect(process.env.MONGO_URI!, { dbName: "estate" }); + console.log("MongoDB connected..."); + } catch (error) { + if (error instanceof Error) { + console.error(error.message); + } + + process.exit(1); + } +} + +export default connectDB; diff --git a/server/src/db.ts b/server/src/db.ts deleted file mode 100644 index edeaa17..0000000 --- a/server/src/db.ts +++ /dev/null @@ -1,62 +0,0 @@ -const db = { - products: [ - { - id: 1, - name: "Смартфон POCO C51 64 ГБ", - price: 6499, - image: - "https://c.dns-shop.ru/thumb/st1/fit/500/500/256e8ece17c46e683dbe0facd94c5e69/5c108f7da6e5886d4d32d723d0e24ad0151bd790d7941374c56d9d8e9718d9f6.jpg.webp", - colors: ["black", "blue", "green"], - popularity: 3, - desc: `Смартфон POCO C51 64 ГБ предлагает функции, необходимые для разговоров по мобильной связи, общения в социальных сетях и мультимедийных развлечений. Он выполнен в компактном пластиковом корпусе с обтекаемыми гранями и тыловой панелью голубого цвета. Экран IPS диагональю 6.52 дюйма обеспечивает интуитивное управление и реалистичное изображение. - Высокая производительность системы достигается благодаря 8-ядерному процессору MediaTek Helio G36 и 2 ГБ оперативной памяти. На тыловой панели установлена сдвоенная камера 8+0.3 Мп с автофокусом и светодиодной вспышкой для реалистичной съемки фотографий и видео. Фронтальная камера 5 Мп позволяет делать селфи и общаться по видеосвязи. Встроенный сканер отпечатков пальцев гарантирует простую и безопасную разблокировку устройства. За автономность смартфона POCO C51 отвечает аккумуляторная батарея емкостью 5000 мА*ч.`, - }, - { - id: 2, - name: "Смартфон realme C30s 64 ГБ", - price: 6999, - image: - "https://c.dns-shop.ru/thumb/st1/fit/500/500/774bc3d792cbcab34769a178c61686f2/cb157601cb15ceac4756053ed94ff8a9b2598f461f86084ca57090724cd9214e.jpg.webp", - colors: ["black", "blue"], - popularity: 3, - desc: `Смартфон realme C30S имеет тонкий корпус черного цвета и вес 186 г, что облегчает эксплуатацию. Для разграничения звонков можно установить две SIM-карты. Модель оснащена мощным производительным 8-ядерным процессором, который обеспечивает бесперебойную и быструю работу. Широкий экран диагональю 6.5 дюймов обеспечивает комфортную игру и просмотр фильмов. IPS-дисплей поддерживает насыщенную и яркую цветопередачу. - Смартфон realme C30S имеет 64 ГБ памяти, чего достаточно для хранения необходимой информации. Батарея емкостью 5000 мА*ч позволяет долгое время играть или смотреть видео без подзарядки. Даже при остатке 5% можно включить режим энергосбережения, чтобы оставаться на связи. Для быстрой разблокировки экрана на боковой стороне корпуса есть сканер отпечатка пальцев.`, - }, - { - id: 3, - name: "Смартфон Xiaomi Redmi A2+ 64 ГБ", - price: 7499, - image: - "https://c.dns-shop.ru/thumb/st1/fit/500/500/43aa8e3640bdc253df179db3eecd9cd3/b5926e67b994494fd67cdf8b75d9db0bad7bc5f4bc9839937ffc3daf7053abdc.jpg.webp", - colors: ["black", "blue", "green"], - popularity: 5, - desc: `Смартфон Xiaomi Redmi A2+ в голубом цвете корпуса поддерживает установку двух SIM-карт, чтобы вы могли разграничить личные и деловые звонки. Экран обладает диагональю 6.52” и разрешением 1600x720 для комфортного просмотра любого контента. Закаленное стекло способствует защите дисплея от мелких повреждений: потертостей и царапин. 8-ядерный процессор MediaTek Helio G36 вместе с 3 ГБ оперативной памяти обеспечивает достаточный уровень производительности для запуска мобильных приложений и работы в режиме многозадачности. - Смартфон Xiaomi Redmi A2+ имеет 64 ГБ встроенной памяти и предусматривает отдельный слот, в который можно установить карту памяти емкостью до 1 ТБ. Тыловая камера представлена двумя модулями 8+0.3 Мп для съемки детализированных и красочных снимков. Двойная светодиодная вспышка позволит проводить фотосъемку в условиях плохой освещенности. Для создания селфи предусмотрена 5-мегапиксельная фронтальная камера. Литий-полимерный аккумулятор емкостью 5000 мАч позволит устройству проработать в режиме разговора до 28 ч.`, - }, - { - id: 4, - name: "Смартфон Infinix SMART 7 HD 64 ГБ", - price: 6999, - image: - "https://c.dns-shop.ru/thumb/st1/fit/500/500/746f2653ecd116f0b3f5bc3e1ce6040f/8a0c3b832d57c5ea8faae411b3afd708403516a91e448da83efb13ef5d6696bd.jpg.webp", - colors: ["white", "black", "blue"], - popularity: 2, - desc: `Смартфон Infinix Smart 7 HD 64 ГБ выполнен в корпусе белого цвета и оснащен дисплеем 6.6 дюйма. Панель IPS (1612x720 пикселей) воспроизводит реалистичное изображение с насыщенными и яркими цветами. Плавная и бесперебойная работа аппаратной платформы при выполнении различных задач обеспечивается благодаря процессору Unisoc SC9863A и 2 ГБ оперативной памяти. - Infinix Smart 7 HD оснащен слотами для установки двух карт SIM и карты памяти microSD. Основная камера 8+0.3 Мп предназначена для создания детализированных фотографий и видео. На передней стороне в каплевидном вырезе расположена камера 5 Мп, которая позволяет общаться по видеосвязи и делать селфи. В устройстве реализованы беспроводные интерфейсы Wi-Fi и Bluetooth. Аккумулятор 5000 мА*ч гарантирует до 32 часов работы смартфона без подзарядки в режиме просмотра видео.`, - }, - - { - id: 5, - name: "Смартфон Tecno POP 7 64 ГБ", - price: 8499, - image: - "https://c.dns-shop.ru/thumb/st4/fit/500/500/8278fc2e0c767175a1bc3fe505284ca7/88c242ac48d30b2977c1802c8ad41f63484c9e2bb3a0976befc7d0bb7caa6c6e.jpg.webp", - colors: ["black", "blue", "purple"], - popularity: 4, - desc: `Смартфон Tecno POP 7 в пластиковом корпусе голубого цвета обладает многоуровневой биометрической защитой. Она запускает идентификацию личности по отпечатку и чертам лица. Процессор с 8 ядрами и 2 ГБ оперативной памяти выступают гарантом быстрого запуска приложений и отклика на пожелания пользователя. Энергия аккумулятора емкостью 5000 мАч рассчитана на длительное использование функционала. - Смартфон Tecno POP 7 оснащен основной камерой с разрешением матрицы 8 Мп и светодиодной вспышкой. Кадры получатся насыщенными даже в условиях слабого освещения. В 6.6-дюймовый экран интегрирован датчик, который анализирует уровень внешнего освещения. Он автоматически уменьшает или повышает яркость для комфортного просмотра контента.`, - }, - ], -}; - -export default db; diff --git a/server/src/index.ts b/server/src/index.ts index e91ce9f..97bb8e2 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -1,6 +1,11 @@ import "dotenv/config"; +import connectDB from "./config/db"; import express, { json } from "express"; import cors from "cors"; +import uploadRouter from "./routes/upload"; +import projectsRouter from "./routes/projects"; + +await connectDB(); const app = express(); const port = process.env.PORT || 3000; @@ -8,9 +13,8 @@ const port = process.env.PORT || 3000; app.use(json()); app.use(cors()); -app.get("/", (_req, res) => { - res.json({ ok: 1 }); -}); +app.use("/upload", uploadRouter); +app.use("/projects", projectsRouter); app.listen(port, () => { console.log(`Server is listening on port ${port}`); diff --git a/server/src/models/Project.ts b/server/src/models/Project.ts new file mode 100644 index 0000000..419490b --- /dev/null +++ b/server/src/models/Project.ts @@ -0,0 +1,42 @@ +import { Schema, model } from "mongoose"; + +const projectSchema = new Schema( + { + name: { + type: String, + required: true, + }, + company: { + type: String, + required: true, + }, + city: { + type: String, + required: true, + }, + image: { + type: String, + required: true, + }, + stage: { + type: Number, + default: 1, + }, + releaseYear: { + type: Number, + required: true, + }, + devices: { + type: Array, + }, + }, + { + timestamps: true, + toJSON: { virtuals: true }, + toObject: { virtuals: true }, + } +); + +const Project = model("Project", projectSchema); + +export default Project; diff --git a/server/src/routes/projects.ts b/server/src/routes/projects.ts new file mode 100644 index 0000000..3d97a37 --- /dev/null +++ b/server/src/routes/projects.ts @@ -0,0 +1,76 @@ +import { Router } from "express"; +import Project from "../models/Project"; + +const router = Router(); + +router.get("/", async (_req, res) => { + try { + const projects = await Project.find().sort({ createdAt: -1 }); + + return res.json(projects); + } catch (error) { + if (error instanceof Error) { + return res.json({ error: error.message }); + } + } +}); + +router.get("/:id", async (req, res) => { + try { + const project = await Project.findById(req.params.id); + + return res.json(project); + } catch (error) { + if (error instanceof Error) { + return res.json({ error: error.message }); + } + } +}); + +router.post("/", async (req, res) => { + try { + const project = await Project.create(req.body); + + return res.json(project); + } catch (error) { + if (error instanceof Error) { + return res.json({ error: error.message }); + } + } +}); + +router.put("/:id", async (req, res) => { + console.log(req.body); + + try { + const project = await Project.findByIdAndUpdate(req.params.id, req.body, { + upsert: true, + new: true, + }); + + console.log("updated", project); + + return res.json(project); + } catch (error) { + if (error instanceof Error) { + return res.json({ error: error.message }); + } + } +}); + +router.delete("/:id", async (req, res) => { + console.log(req.body); + + try { + const project = await Project.findByIdAndDelete(req.params.id); + + return res.json(project); + } catch (error) { + if (error instanceof Error) { + return res.json({ error: error.message }); + } + } +}); + +const projectsRouter = router; +export default projectsRouter; diff --git a/server/src/routes/upload.ts b/server/src/routes/upload.ts new file mode 100644 index 0000000..66924f5 --- /dev/null +++ b/server/src/routes/upload.ts @@ -0,0 +1,61 @@ +import { Router } from "express"; +import multer, { memoryStorage } from "multer"; +import sharp from "sharp"; +import fs from "fs"; +import { v4 as uuidv4 } from "uuid"; + +const router = Router(); + +const upload = multer({ + dest: "uploads/", + storage: memoryStorage(), + fileFilter: (_req, file, cb) => { + if (file.mimetype.split("/")[0] === "image") { + cb(null, true); + } else { + cb(new Error("Only images are allowed!")); + } + }, +}); + +router.get("/:file", (req, res) => { + const fileName = req.params.file; + + try { + const readStream = fs.createReadStream(`uploads/${fileName}`); + readStream.pipe(res); + } catch (error) { + if (error instanceof Error) { + return res.json({ error: error.message }); + } + } +}); + +router.post("/", upload.single("file"), async (req, res) => { + if (!req.file) { + return res.json({ error: "req.file" }); + } + + try { + const filename = `${uuidv4()}.jpg`; + + await sharp(req.file.buffer) + .resize({ + width: 512, + height: 512, + fit: "inside", + withoutEnlargement: true, + }) + .jpeg({ quality: 90 }) + .toFile(`uploads/${filename}`); + + return res.json({ file: `http://192.168.1.170:3000/upload/${filename}` }); + } catch (error) { + if (error instanceof Error) { + return res.json({ error: error.message }); + } + } +}); + +const uploadRouter = router; +export default uploadRouter; diff --git a/server/uploads/8c9b0949-8b30-457c-a6d5-aeef71866a42.jpg b/server/uploads/8c9b0949-8b30-457c-a6d5-aeef71866a42.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ca5604e7e5e7c1d74a2990821f352bd376d7de71 GIT binary patch literal 14079 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 literal 0 HcmV?d00001 diff --git a/server/uploads/925c5501-5e6e-4b23-bad2-ea7e7d5e96e2.jpg b/server/uploads/925c5501-5e6e-4b23-bad2-ea7e7d5e96e2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4d9fc67baa5a0476d3acc520a6a32afc043c6f08 GIT binary patch literal 55988 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 Gz!CN?9@FQy=uOh+O5%(68$a(##6~% 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 QoPM;cERv%fRox%|*^1i{DF6Tf literal 0 HcmV?d00001 diff --git a/server/uploads/9d6db744-3af3-41a7-b24e-ef0f056c3d6e.jpg b/server/uploads/9d6db744-3af3-41a7-b24e-ef0f056c3d6e.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a8f7c0040906c2471d4e97c1f1fdad7e9d7508f7 GIT binary patch literal 15451 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 literal 0 HcmV?d00001 diff --git a/server/yarn.lock b/server/yarn.lock new file mode 100644 index 0000000..9dc7739 --- /dev/null +++ b/server/yarn.lock @@ -0,0 +1,1473 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" + integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@mongodb-js/saslprep@^1.1.0": + version "1.1.1" + resolved "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz" + integrity sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ== + dependencies: + sparse-bitfield "^3.0.3" + +"@tsconfig/node10@^1.0.7": + version "1.0.9" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" + integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@types/body-parser@*": + version "1.19.5" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz" + integrity sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/cors@^2.8.15": + version "2.8.17" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz" + integrity sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA== + dependencies: + "@types/node" "*" + +"@types/express-serve-static-core@^4.17.33": + version "4.17.41" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.41.tgz" + integrity sha512-OaJ7XLaelTgrvlZD8/aa0vvvxZdUmlCn6MtWeB7TkiKW70BQLc9XEPpDLPdbo52ZhXUCrznlWdCHWxJWtdyajA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@*", "@types/express@^4.17.20": + version "4.17.21" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz" + integrity sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + +"@types/http-errors@*": + version "2.0.4" + resolved "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz" + integrity sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA== + +"@types/mime@*": + version "3.0.4" + resolved "https://registry.npmjs.org/@types/mime/-/mime-3.0.4.tgz" + integrity sha512-iJt33IQnVRkqeqC7PzBHPTC6fDlRNRW8vjrgqtScAhrmMwe8c4Eo7+fUGTa+XdWrpEgpyKWMYmi2dIwMAYRzPw== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + +"@types/multer@^1.4.11": + version "1.4.11" + resolved "https://registry.npmjs.org/@types/multer/-/multer-1.4.11.tgz" + integrity sha512-svK240gr6LVWvv3YGyhLlA+6LRRWA4mnGIU7RcNmgjBYFl6665wcXrRfxGp5tEPVHUNm5FMcmq7too9bxCwX/w== + dependencies: + "@types/express" "*" + +"@types/node@*", "@types/node@^20.8.10": + version "20.9.4" + resolved "https://registry.npmjs.org/@types/node/-/node-20.9.4.tgz" + integrity sha512-wmyg8HUhcn6ACjsn8oKYjkN/zUzQeNtMy44weTJSM6p4MMzEOuKbA3OjJ267uPCOW7Xex9dyrNTful8XTQYoDA== + dependencies: + undici-types "~5.26.4" + +"@types/qs@*": + version "6.9.10" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.10.tgz" + integrity sha512-3Gnx08Ns1sEoCrWssEgTSJs/rsT2vhGP+Ja9cnnk9k4ALxinORlQneLXFeFKOTJMOeZUFD1s7w+w2AphTpvzZw== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/send@*": + version "0.17.4" + resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz" + integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.5" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz" + integrity sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ== + dependencies: + "@types/http-errors" "*" + "@types/mime" "*" + "@types/node" "*" + +"@types/uuid@^9.0.7": + version "9.0.7" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.7.tgz" + integrity sha512-WUtIVRUZ9i5dYXefDEAI7sh9/O7jGvHg7Df/5O/gtH3Yabe5odI3UWopVR1qbPXQtvOxWu3mM4XxlYeZtMWF4g== + +"@types/webidl-conversions@*": + version "7.0.3" + resolved "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz" + integrity sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA== + +"@types/whatwg-url@^8.2.1": + version "8.2.2" + resolved "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz" + integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== + dependencies: + "@types/node" "*" + "@types/webidl-conversions" "*" + +abbrev@1: + version "1.1.1" + resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +accepts@~1.3.8: + 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" + +acorn-walk@^8.1.1: + version "8.3.0" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz" + integrity sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== + +acorn@^8.4.1: + version "8.11.2" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz" + integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +append-field@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz" + integrity sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +b4a@^1.6.4: + version "1.6.4" + resolved "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz" + integrity sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw== + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.2.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" + integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +body-parser@1.20.1: + version "1.20.1" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz" + integrity sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw== + dependencies: + bytes "3.1.2" + content-type "~1.0.4" + 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.1" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + 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" + +braces@~3.0.2: + version "3.0.2" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +bson@^6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz" + integrity sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +busboy@^1.0.0: + version "1.6.0" + resolved "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz" + integrity sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA== + dependencies: + streamsearch "^1.1.0" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.0: + version "1.0.5" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz" + integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== + dependencies: + function-bind "^1.1.2" + get-intrinsic "^1.2.1" + set-function-length "^1.1.1" + +chokidar@^3.5.2: + version "3.5.3" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + 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" + optionalDependencies: + fsevents "~2.3.2" + +chownr@^1.1.1: + version "1.1.4" + resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz" + integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== + +color-convert@^2.0.1: + 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" + +color-name@^1.0.0, color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +color-string@^1.9.0: + 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" + +color@^4.2.3: + version "4.2.3" + resolved "https://registry.npmjs.org/color/-/color-4.2.3.tgz" + integrity sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A== + dependencies: + color-convert "^2.0.1" + color-string "^1.9.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.5.2: + version "1.6.2" + resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +content-disposition@0.5.4: + 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" + +content-type@~1.0.4: + version "1.0.5" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.5.0: + version "0.5.0" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" + integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +debug@2.6.9: + 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" + +debug@4.x: + version "4.3.4" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@^3.2.7: + version "3.2.7" + resolved "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +define-data-property@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz" + integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== + dependencies: + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-libc@^2.0.0, detect-libc@^2.0.2: + 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== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dotenv@^16.3.1: + version "16.3.1" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-16.3.1.tgz" + integrity sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ== + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +end-of-stream@^1.1.0, end-of-stream@^1.4.1: + 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== + dependencies: + once "^1.4.0" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +expand-template@^2.0.3: + 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== + +express@^4.18.2: + version "4.18.2" + resolved "https://registry.npmjs.org/express/-/express-4.18.2.tgz" + integrity sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.1" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.5.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" + +fast-fifo@^1.1.0, fast-fifo@^1.2.0: + version "1.3.2" + resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.2.0: + 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" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +fs-constants@^1.0.0: + 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== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-intrinsic@^1.0.2, get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: + version "1.2.2" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz" + integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== + dependencies: + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +github-from-package@0.0.0: + 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== + +glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-property-descriptors@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz" + integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== + dependencies: + get-intrinsic "^1.2.2" + +has-proto@^1.0.1: + 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== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +hasown@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz" + integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== + dependencies: + function-bind "^1.1.2" + +http-errors@2.0.0: + 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" + +iconv-lite@0.4.24: + 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" + +ieee754@^1.1.13: + version "1.2.1" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-by-default@^1.0.1: + 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== + +inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@~1.3.0: + version "1.3.8" + resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ipaddr.js@1.9.1: + 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== + +is-arrayish@^0.3.1: + version "0.3.2" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" + integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +json5@^2.2.2: + version "2.2.3" + resolved "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +kareem@2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz" + integrity sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA== + +lru-cache@^6.0.0: + 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" + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +memory-pager@^1.0.2: + version "1.5.0" + resolved "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz" + integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" + integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@~2.1.24, mime-types@~2.1.34: + 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" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mimic-response@^3.1.0: + 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== + +minimatch@^3.1.2: + 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" + +minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3: + version "0.5.3" + resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz" + integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A== + +mkdirp@^0.5.4: + version "0.5.6" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mongodb-connection-string-url@^2.6.0: + version "2.6.0" + resolved "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz" + integrity sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ== + dependencies: + "@types/whatwg-url" "^8.2.1" + whatwg-url "^11.0.0" + +mongodb@6.2.0: + version "6.2.0" + resolved "https://registry.npmjs.org/mongodb/-/mongodb-6.2.0.tgz" + integrity sha512-d7OSuGjGWDZ5usZPqfvb36laQ9CPhnWkAGHT61x5P95p/8nMVeH8asloMwW6GcYFeB0Vj4CB/1wOTDG2RA9BFA== + dependencies: + "@mongodb-js/saslprep" "^1.1.0" + bson "^6.2.0" + mongodb-connection-string-url "^2.6.0" + +mongoose@^8.0.1: + version "8.0.1" + resolved "https://registry.npmjs.org/mongoose/-/mongoose-8.0.1.tgz" + integrity sha512-O3TJrtLCt4H1eGf2HoHGcnOcCTWloQkpmIP3hA9olybX3OX2KUjdIIq135HD5paGjZEDJYKn9fw4eH5N477zqQ== + dependencies: + bson "^6.2.0" + kareem "2.5.1" + mongodb "6.2.0" + mpath "0.9.0" + mquery "5.0.0" + ms "2.1.3" + sift "16.0.1" + +mpath@0.9.0: + version "0.9.0" + resolved "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz" + integrity sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew== + +mquery@5.0.0: + version "5.0.0" + resolved "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz" + integrity sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg== + dependencies: + debug "4.x" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1: + version "2.1.3" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +multer@^1.4.5-lts.1: + version "1.4.5-lts.1" + resolved "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz" + integrity sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ== + dependencies: + append-field "^1.0.0" + busboy "^1.0.0" + concat-stream "^1.5.2" + mkdirp "^0.5.4" + object-assign "^4.1.1" + type-is "^1.6.4" + xtend "^4.0.0" + +napi-build-utils@^1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz" + integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +node-abi@^3.3.0: + version "3.51.0" + resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.51.0.tgz" + integrity sha512-SQkEP4hmNWjlniS5zdnfIXTk1x7Ome85RDzHlTbBtzE97Gfwz/Ipw4v/Ryk20DWIy3yCNVLVlGKApCnmvYoJbA== + dependencies: + semver "^7.3.5" + +node-addon-api@^6.1.0: + version "6.1.0" + resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz" + integrity sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA== + +nodemon@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz" + integrity sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw== + 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 "^7.5.3" + simple-update-notifier "^2.0.0" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz" + integrity sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +object-assign@^4, object-assign@^4.1.1: + version "4.1.1" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.9.0: + version "1.13.1" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +on-finished@2.4.1: + 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" + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" + integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== + +picomatch@^2.0.4, picomatch@^2.2.1: + version "2.3.1" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +prebuild-install@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz" + integrity sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw== + 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" + +process-nextick-args@~2.0.0: + 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== + +proxy-addr@~2.0.7: + 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" + +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@^2.1.1: + version "2.3.1" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qs@6.11.0: + 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" + +queue-tick@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz" + integrity sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.1: + version "2.5.1" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" + integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +rc@^1.2.7: + version "1.2.8" + resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@^2.2.2: + version "2.3.8" + resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + 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" + +readable-stream@^3.1.1, readable-stream@^3.4.0: + 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" + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +semver@^7.3.5, semver@^7.5.3, semver@^7.5.4: + 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" + +send@0.18.0: + 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" + +serve-static@1.15.0: + 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" + +set-function-length@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz" + integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== + dependencies: + define-data-property "^1.1.1" + get-intrinsic "^1.2.1" + gopd "^1.0.1" + has-property-descriptors "^1.0.0" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sharp@^0.32.6: + version "0.32.6" + resolved "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz" + integrity sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w== + dependencies: + color "^4.2.3" + detect-libc "^2.0.2" + node-addon-api "^6.1.0" + prebuild-install "^7.1.1" + semver "^7.5.4" + simple-get "^4.0.1" + tar-fs "^3.0.4" + tunnel-agent "^0.6.0" + +side-channel@^1.0.4: + 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" + +sift@16.0.1: + version "16.0.1" + resolved "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz" + integrity sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ== + +simple-concat@^1.0.0: + version "1.0.1" + resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz" + integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q== + +simple-get@^4.0.0, simple-get@^4.0.1: + version "4.0.1" + resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz" + integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA== + dependencies: + decompress-response "^6.0.0" + once "^1.3.1" + simple-concat "^1.0.0" + +simple-swizzle@^0.2.2: + 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" + +simple-update-notifier@^2.0.0: + version "2.0.0" + resolved "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz" + integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== + dependencies: + semver "^7.5.3" + +sparse-bitfield@^3.0.3: + version "3.0.3" + resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" + integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== + dependencies: + memory-pager "^1.0.2" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +streamsearch@^1.1.0: + version "1.1.0" + resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz" + integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== + +streamx@^2.15.0: + version "2.15.5" + resolved "https://registry.npmjs.org/streamx/-/streamx-2.15.5.tgz" + integrity sha512-9thPGMkKC2GctCzyCUjME3yR03x2xNo0GPKGkRw2UMYN+gqWa9uqpyNWhmsNCutU5zHmkUum0LsCRQTXUgUCAg== + dependencies: + fast-fifo "^1.1.0" + queue-tick "^1.0.1" + +string_decoder@^1.1.1: + 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" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +tar-fs@^2.0.0: + version "2.1.1" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz" + integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + dependencies: + chownr "^1.1.1" + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^2.1.4" + +tar-fs@^3.0.4: + version "3.0.4" + resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz" + integrity sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w== + dependencies: + mkdirp-classic "^0.5.2" + pump "^3.0.0" + tar-stream "^3.1.5" + +tar-stream@^2.1.4: + version "2.2.0" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + 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" + +tar-stream@^3.1.5: + version "3.1.6" + resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz" + integrity sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +to-regex-range@^5.0.1: + 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== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz" + integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== + dependencies: + nopt "~1.0.10" + +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + +ts-node@^10.9.1: + version "10.9.1" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^4.2.0: + version "4.2.0" + resolved "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +type-is@^1.6.4, type-is@~1.6.18: + 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" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@^5.2.2: + version "5.3.2" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.2.tgz" + integrity sha512-6l+RyNy7oAHDfxC4FzSJcz9vnjTKxrLpDG5M2Vu4SHRVNg6xzqZp6LYSR9zjqQTu8DU/f5xwxUdADOkbrIX2gQ== + +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^9.0.1: + version "9.0.1" + resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" + integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +xtend@^4.0.0: + version "4.0.2" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==