├── client
├── src
│ ├── index.css
│ ├── Assets
│ │ ├── see.png
│ │ ├── Reedem.png
│ │ ├── Users.png
│ │ ├── change.png
│ │ ├── hide.png
│ │ ├── home.png
│ │ ├── logo.png
│ │ ├── logout.png
│ │ ├── market.png
│ │ ├── remove.png
│ │ ├── role.png
│ │ ├── search.png
│ │ ├── show.png
│ │ ├── user.png
│ │ ├── Revenue.png
│ │ ├── Service.png
│ │ ├── content.png
│ │ ├── customer.png
│ │ ├── settings.png
│ │ ├── showcase.png
│ │ ├── background.png
│ │ ├── dashboard.png
│ │ ├── demo-user.png
│ │ └── index.js
│ ├── index.js
│ ├── Components
│ │ ├── MenuToggle.js
│ │ ├── Dashboard-card.js
│ │ ├── Navbar.js
│ │ ├── Menubar.js
│ │ ├── Chart.js
│ │ └── Table.js
│ ├── Pages
│ │ ├── index.js
│ │ ├── Settings.js
│ │ ├── HomeService.js
│ │ ├── MarketPlcae.js
│ │ ├── ContentManagement.js
│ │ ├── UserManagement.js
│ │ ├── CustomerManagement.js
│ │ ├── ShowcaseManagement.js
│ │ ├── Role.js
│ │ ├── Login.js
│ │ ├── Register.js
│ │ └── Dashboard.js
│ └── App.js
├── public
│ ├── favicon.png
│ └── index.html
├── tailwind.config.js
└── package.json
├── server
├── mongodb
│ ├── connection.js
│ └── models
│ │ └── register.js
├── package.json
├── index.js
└── package-lock.json
├── .gitignore
└── README.md
/client/src/index.css:
--------------------------------------------------------------------------------
1 | @tailwind base;
2 | @tailwind components;
3 | @tailwind utilities;
4 |
--------------------------------------------------------------------------------
/client/public/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/public/favicon.png
--------------------------------------------------------------------------------
/client/src/Assets/see.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/see.png
--------------------------------------------------------------------------------
/client/src/Assets/Reedem.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/Reedem.png
--------------------------------------------------------------------------------
/client/src/Assets/Users.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/Users.png
--------------------------------------------------------------------------------
/client/src/Assets/change.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/change.png
--------------------------------------------------------------------------------
/client/src/Assets/hide.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/hide.png
--------------------------------------------------------------------------------
/client/src/Assets/home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/home.png
--------------------------------------------------------------------------------
/client/src/Assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/logo.png
--------------------------------------------------------------------------------
/client/src/Assets/logout.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/logout.png
--------------------------------------------------------------------------------
/client/src/Assets/market.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/market.png
--------------------------------------------------------------------------------
/client/src/Assets/remove.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/remove.png
--------------------------------------------------------------------------------
/client/src/Assets/role.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/role.png
--------------------------------------------------------------------------------
/client/src/Assets/search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/search.png
--------------------------------------------------------------------------------
/client/src/Assets/show.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/show.png
--------------------------------------------------------------------------------
/client/src/Assets/user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/user.png
--------------------------------------------------------------------------------
/client/src/Assets/Revenue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/Revenue.png
--------------------------------------------------------------------------------
/client/src/Assets/Service.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/Service.png
--------------------------------------------------------------------------------
/client/src/Assets/content.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/content.png
--------------------------------------------------------------------------------
/client/src/Assets/customer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/customer.png
--------------------------------------------------------------------------------
/client/src/Assets/settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/settings.png
--------------------------------------------------------------------------------
/client/src/Assets/showcase.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/showcase.png
--------------------------------------------------------------------------------
/client/src/Assets/background.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/background.png
--------------------------------------------------------------------------------
/client/src/Assets/dashboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/dashboard.png
--------------------------------------------------------------------------------
/client/src/Assets/demo-user.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Prashant142/Mern-Dashboard/HEAD/client/src/Assets/demo-user.png
--------------------------------------------------------------------------------
/client/tailwind.config.js:
--------------------------------------------------------------------------------
1 | /** @type {import('tailwindcss').Config} */
2 | module.exports = {
3 | content: ["./src/**/*.{js,jsx,ts,tsx}"],
4 | theme: {
5 | extend: {},
6 | },
7 | plugins: [],
8 | };
9 |
--------------------------------------------------------------------------------
/client/src/index.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import ReactDOM from "react-dom/client";
3 | import "./index.css";
4 | import App from "./App";
5 |
6 | const root = ReactDOM.createRoot(document.getElementById("root"));
7 | root.render(
8 |
9 |
10 |
11 | );
12 |
--------------------------------------------------------------------------------
/server/mongodb/connection.js:
--------------------------------------------------------------------------------
1 | import mongoose from "mongoose";
2 |
3 | const connectDB = (url) => {
4 | mongoose.set({ strictQuery: true });
5 |
6 | mongoose
7 | .connect(url)
8 | .then(() => {
9 | console.log("MongoDB connect successfully.");
10 | })
11 | .catch((err) => console.log(err));
12 | };
13 |
14 | export default connectDB;
15 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
2 |
3 | # dependencies
4 | node_modules
5 | /.pnp
6 | .pnp.js
7 |
8 | # testing
9 | /coverage
10 |
11 | # production
12 | build
13 |
14 | # misc
15 | .DS_Store
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | npm-debug.log*
22 | yarn-debug.log*
23 | yarn-error.log*
24 |
25 | .env
--------------------------------------------------------------------------------
/client/src/Components/MenuToggle.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { hide, show } from "../Assets/index";
3 |
4 | const MenuToggle = ({ showMenu, handleMenuToggle }) => {
5 | return (
6 |
13 | );
14 | };
15 |
16 | export default MenuToggle;
17 |
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "type": "module",
7 | "scripts": {
8 | "test": "echo \"Error: no test specified\" && exit 1",
9 | "start": "nodemon index.js"
10 | },
11 | "author": "",
12 | "license": "ISC",
13 | "dependencies": {
14 | "bcrypt": "^5.1.0",
15 | "cors": "^2.8.5",
16 | "dotenv": "^16.0.3",
17 | "express": "^4.18.2",
18 | "jsonwebtoken": "^9.0.0",
19 | "mongoose": "^7.0.2",
20 | "nodemon": "^2.0.21"
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/server/mongodb/models/register.js:
--------------------------------------------------------------------------------
1 | import mongoose from "mongoose";
2 |
3 | const User = new mongoose.Schema(
4 | {
5 | name: {
6 | type: String,
7 | required: true,
8 | },
9 | email: {
10 | type: String,
11 | required: true,
12 | unique: true,
13 | },
14 | role: {
15 | type: String,
16 | required: true,
17 | },
18 | password: {
19 | type: String,
20 | required: true,
21 | },
22 | },
23 | {
24 | collection: "user-data",
25 | }
26 | );
27 |
28 | const model = mongoose.model("userData", User);
29 | export default model;
30 |
--------------------------------------------------------------------------------
/client/src/Components/Dashboard-card.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 |
3 | const Card = ({ title, subtitle, icon, color }) => {
4 | return (
5 |
7 |
8 |
{title}
9 | {subtitle}
10 |
11 |
12 |
13 |

14 |
15 |
16 | );
17 | };
18 |
19 | export default Card;
20 |
--------------------------------------------------------------------------------
/client/src/Pages/index.js:
--------------------------------------------------------------------------------
1 | import Login from "./Login";
2 | import Register from "./Register";
3 | import Dashboard from "./Dashboard";
4 | import Role from "./Role";
5 | import ContentManagement from "./ContentManagement";
6 | import CustomerManagement from "./CustomerManagement";
7 | import HomeService from "./HomeService";
8 | import MarketPlace from "./MarketPlcae";
9 | import Settings from "./Settings";
10 | import ShowcaseManagement from "./ShowcaseManagement";
11 | import UserManagement from "./UserManagement";
12 |
13 | export {
14 | Login,
15 | Register,
16 | Dashboard,
17 | Role,
18 | ContentManagement,
19 | CustomerManagement,
20 | HomeService,
21 | MarketPlace,
22 | Settings,
23 | ShowcaseManagement,
24 | UserManagement,
25 | };
26 |
--------------------------------------------------------------------------------
/client/src/Pages/Settings.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Menubar from "../Components/Menubar";
3 | import MenuToggle from "../Components/MenuToggle";
4 | import Navbar from "../Components/Navbar";
5 |
6 | const Settings = () => {
7 | const [showMenu, setShowMenu] = useState(false);
8 |
9 | const handleMenuToggle = () => {
10 | setShowMenu(!showMenu);
11 | };
12 |
13 | return (
14 |
15 |
19 |
20 |
21 |
22 |
23 |
24 |
Settings
25 |
26 |
27 | );
28 | };
29 |
30 | export default Settings;
31 |
--------------------------------------------------------------------------------
/client/src/Pages/HomeService.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Menubar from "../Components/Menubar";
3 | import MenuToggle from "../Components/MenuToggle";
4 | import Navbar from "../Components/Navbar";
5 |
6 | const HomeService = () => {
7 | const [showMenu, setShowMenu] = useState(false);
8 |
9 | const handleMenuToggle = () => {
10 | setShowMenu(!showMenu);
11 | };
12 |
13 | return (
14 |
15 |
19 |
20 |
21 |
22 |
23 |
24 |
Home Service
25 |
26 |
27 | );
28 | };
29 |
30 | export default HomeService;
31 |
--------------------------------------------------------------------------------
/client/src/Pages/MarketPlcae.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Menubar from "../Components/Menubar";
3 | import MenuToggle from "../Components/MenuToggle";
4 | import Navbar from "../Components/Navbar";
5 |
6 | const MarketPlace = () => {
7 | const [showMenu, setShowMenu] = useState(false);
8 |
9 | const handleMenuToggle = () => {
10 | setShowMenu(!showMenu);
11 | };
12 |
13 | return (
14 |
15 |
19 |
20 |
21 |
22 |
23 |
24 |
MarketPlace
25 |
26 |
27 | );
28 | };
29 |
30 | export default MarketPlace;
31 |
--------------------------------------------------------------------------------
/client/src/Pages/ContentManagement.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Menubar from "../Components/Menubar";
3 | import MenuToggle from "../Components/MenuToggle";
4 | import Navbar from "../Components/Navbar";
5 |
6 | const ContentManagement = () => {
7 | const [showMenu, setShowMenu] = useState(false);
8 |
9 | const handleMenuToggle = () => {
10 | setShowMenu(!showMenu);
11 | };
12 |
13 | return (
14 |
15 |
19 |
20 |
21 |
22 |
23 |
24 | Content Management
25 |
26 |
27 | );
28 | };
29 |
30 | export default ContentManagement;
31 |
--------------------------------------------------------------------------------
/client/src/Pages/UserManagement.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Menubar from "../Components/Menubar";
3 | import MenuToggle from "../Components/MenuToggle";
4 | import Navbar from "../Components/Navbar";
5 |
6 | const UserManagement = () => {
7 | const [showMenu, setShowMenu] = useState(false);
8 |
9 | const handleMenuToggle = () => {
10 | setShowMenu(!showMenu);
11 | };
12 |
13 | return (
14 |
15 |
19 |
20 |
21 |
22 |
23 |
24 |
User Management
25 |
26 |
27 | );
28 | };
29 |
30 | export default UserManagement;
31 |
--------------------------------------------------------------------------------
/client/src/Pages/CustomerManagement.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Menubar from "../Components/Menubar";
3 | import MenuToggle from "../Components/MenuToggle";
4 | import Navbar from "../Components/Navbar";
5 |
6 | const CustomerManagement = () => {
7 | const [showMenu, setShowMenu] = useState(false);
8 |
9 | const handleMenuToggle = () => {
10 | setShowMenu(!showMenu);
11 | };
12 |
13 | return (
14 |
15 |
19 |
20 |
21 |
22 |
23 |
24 |
Customer Management
25 |
26 |
27 | );
28 | };
29 |
30 | export default CustomerManagement;
31 |
--------------------------------------------------------------------------------
/client/src/Pages/ShowcaseManagement.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Menubar from "../Components/Menubar";
3 | import MenuToggle from "../Components/MenuToggle";
4 | import Navbar from "../Components/Navbar";
5 |
6 | const ShowcaseManagement = () => {
7 | const [showMenu, setShowMenu] = useState(false);
8 |
9 | const handleMenuToggle = () => {
10 | setShowMenu(!showMenu);
11 | };
12 |
13 | return (
14 |
15 |
19 |
20 |
21 |
22 |
23 |
24 |
Showcase Management
25 |
26 |
27 | );
28 | };
29 |
30 | export default ShowcaseManagement;
31 |
--------------------------------------------------------------------------------
/client/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
11 |
12 | Booking Dashboard
13 |
14 |
15 |
16 |
17 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/client/src/Pages/Role.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Menubar from "../Components/Menubar";
3 | import MenuToggle from "../Components/MenuToggle";
4 | import Navbar from "../Components/Navbar";
5 | import UsersTable from "../Components/Table";
6 |
7 | const RoleManagement = () => {
8 | const [showMenu, setShowMenu] = useState(false);
9 |
10 | const handleMenuToggle = () => {
11 | setShowMenu(!showMenu);
12 | };
13 |
14 | return (
15 |
16 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | );
31 | };
32 |
33 | export default RoleManagement;
34 |
--------------------------------------------------------------------------------
/client/src/Components/Navbar.js:
--------------------------------------------------------------------------------
1 | import React from "react";
2 | import { demouser } from "../Assets/index";
3 |
4 | const Navbar = ({ pagename }) => {
5 | // const [userInfo, setUserInfo] = useState([]);
6 |
7 | // useEffect(() => {
8 | // axios.get("http://localhost:5000/api/users").then((response) => {
9 | // setUserInfo(response.data.data);
10 | // console.log(userInfo);
11 | // });
12 | // }, []);
13 |
14 | return (
15 |
29 | );
30 | };
31 |
32 | export default Navbar;
33 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "client",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@testing-library/jest-dom": "^5.16.5",
7 | "@testing-library/react": "^13.4.0",
8 | "@testing-library/user-event": "^13.5.0",
9 | "antd": "^5.3.1",
10 | "axios": "^1.3.4",
11 | "chart.js": "^4.2.1",
12 | "react": "^18.2.0",
13 | "react-chartjs-2": "^5.2.0",
14 | "react-dom": "^18.2.0",
15 | "react-router-dom": "^6.9.0",
16 | "react-scripts": "5.0.1",
17 | "web-vitals": "^2.1.4"
18 | },
19 | "scripts": {
20 | "start": "react-scripts start",
21 | "build": "react-scripts build",
22 | "test": "react-scripts test",
23 | "eject": "react-scripts eject"
24 | },
25 | "eslintConfig": {
26 | "extends": [
27 | "react-app",
28 | "react-app/jest"
29 | ]
30 | },
31 | "browserslist": {
32 | "production": [
33 | ">0.2%",
34 | "not dead",
35 | "not op_mini all"
36 | ],
37 | "development": [
38 | "last 1 chrome version",
39 | "last 1 firefox version",
40 | "last 1 safari version"
41 | ]
42 | },
43 | "devDependencies": {
44 | "tailwindcss": "^3.2.7"
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/client/src/Assets/index.js:
--------------------------------------------------------------------------------
1 | import logo from "./logo.png";
2 | import reedem from "./Reedem.png";
3 | import revenue from "./Revenue.png";
4 | import service from "./Service.png";
5 | import users from "./Users.png";
6 | import background from "./background.png";
7 | import show from "./show.png";
8 | import hide from "./hide.png";
9 | import dashboard from "./dashboard.png";
10 | import home from "./home.png";
11 | import user from "./user.png";
12 | import showcase from "./showcase.png";
13 | import settings from "./settings.png";
14 | import role from "./role.png";
15 | import market from "./market.png";
16 | import content from "./content.png";
17 | import customer from "./customer.png";
18 | import logout from "./logout.png";
19 | import demouser from "./demo-user.png";
20 | import see from "./see.png";
21 | import change from "./change.png";
22 | import remove from "./remove.png";
23 | import search from "./search.png";
24 |
25 | export {
26 | logo,
27 | reedem,
28 | revenue,
29 | service,
30 | users,
31 | background,
32 | hide,
33 | show,
34 | dashboard,
35 | home,
36 | user,
37 | showcase,
38 | settings,
39 | role,
40 | market,
41 | content,
42 | customer,
43 | logout,
44 | demouser,
45 | remove,
46 | change,
47 | see,
48 | search,
49 | };
50 |
--------------------------------------------------------------------------------
/client/src/App.js:
--------------------------------------------------------------------------------
1 | import { BrowserRouter, Route, Routes } from "react-router-dom";
2 | import {
3 | Dashboard,
4 | Login,
5 | Register,
6 | Role,
7 | ContentManagement,
8 | CustomerManagement,
9 | HomeService,
10 | MarketPlace,
11 | Settings,
12 | ShowcaseManagement,
13 | UserManagement,
14 | } from "./Pages/index";
15 | const App = () => {
16 | return (
17 |
18 |
19 |
20 | } />
21 | } />
22 | } />
23 | } />
24 | } />
25 | } />
26 | } />
27 | } />
28 | } />
29 | } />
30 | } />
31 |
32 |
33 |
34 | );
35 | };
36 |
37 | export default App;
38 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # MERN Dashboard
2 |
3 | ## An informative dashboard with multiple functionalities
4 |
5 | ## Features
6 |
7 | ### Login Page
8 |
9 | Proper functional email and password authentication login form.
10 |
11 | 
12 |
13 |
14 | ### Signup page
15 |
16 | Register yourself and the passwords will save in hashed form to your database.
17 |
18 | 
19 |
20 | ### Dashboard section
21 |
22 | Dynamic charts that can be change as per the data.
23 |
24 | 
25 |
26 | ### Permission & Role Management page
27 |
28 | Tabel that retrieves the data from your database. And with a well functional search option in the table.
29 |
30 |
31 | 
32 |
33 | ## Technologies Used
34 |
35 | - MongoDB
36 | - Express.js
37 | - React.js
38 | - Node.js
39 | - Tailwind CSS
40 | - JavaScript
41 | - Chart.js
42 |
43 | ## How to Run the Application
44 |
45 | 1. Clone the repository to your local machine
46 | 2. Navigate to the project directory in your terminal
47 | 3. Run `npm install` to install the necessary dependencies
48 | 4. Start both the server by navigating to each directory "Clinet" and "Server"
49 | 4. Run `npm start` to start the application in front-end and back-end separately.
50 | 5. Open a web browser and go to http://localhost:3000/ to view the application.
51 |
52 | ## Author
53 |
54 | Prashant Dhiman
55 |
56 |
--------------------------------------------------------------------------------
/server/index.js:
--------------------------------------------------------------------------------
1 | import express from "express";
2 | import cors from "cors";
3 | import User from "./mongodb/models/register.js";
4 | import connectDB from "./mongodb/connection.js";
5 | import * as dotenv from "dotenv";
6 | import bcrypt from "bcrypt";
7 | import jwt from "jsonwebtoken";
8 |
9 | dotenv.config();
10 | const app = express();
11 | app.use(cors());
12 | app.use(express.json());
13 |
14 | app.use("/api/register", async (req, res) => {
15 | try {
16 | const saltRounds = 10;
17 | const hashedPassword = await bcrypt.hash(req.body.password, saltRounds);
18 |
19 | const user = await User.create({
20 | name: req.body.name,
21 | email: req.body.email,
22 | role: req.body.role,
23 | password: hashedPassword,
24 | });
25 |
26 | const token = jwt.sign({ id: user._id }, process.env.JWT_SECRET, {
27 | expiresIn: "30d",
28 | });
29 |
30 | res.status(200).json({ success: true, data: { user, token } });
31 | } catch (error) {
32 | res.status(500).json({ success: false, message: error });
33 | }
34 | });
35 |
36 | app.use("/api/login", async (req, res) => {
37 | try {
38 | const user = await User.findOne({
39 | email: req.body.email,
40 | password: req.body.password,
41 | });
42 | if (!user) {
43 | return res
44 | .status(401)
45 | .json({ success: false, message: "Invalid email or password" });
46 | }
47 | res.status(200).json({ success: true, data: user });
48 | } catch (error) {
49 | res.status(500).json({ success: false, message: error });
50 | }
51 | });
52 |
53 | app.use("/api/users", async (req, res) => {
54 | try {
55 | const users = await User.find();
56 | res.status(200).json({ success: true, data: users });
57 | } catch (error) {
58 | res.status(500).json({ success: false, message: error });
59 | }
60 | });
61 |
62 | app.use("/", (req, res) => {
63 | res.send("Hello this is the backend");
64 | });
65 |
66 | const startServer = async () => {
67 | try {
68 | connectDB(process.env.MONGO_URI);
69 | app.listen(5000, () => {
70 | console.log("Server is listening on port 5000");
71 | });
72 | } catch (error) {
73 | console.error(error);
74 | }
75 | };
76 |
77 | startServer();
78 |
--------------------------------------------------------------------------------
/client/src/Components/Menubar.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import {
3 | logo,
4 | dashboard,
5 | home,
6 | user,
7 | showcase,
8 | settings,
9 | role,
10 | market,
11 | content,
12 | customer,
13 | logout,
14 | } from "../Assets/index";
15 |
16 | const Menubar = () => {
17 | const [selectedItem, setSelectedItem] = useState(null);
18 |
19 | const menuItems = [
20 | { name: "Dashboard", icon: dashboard, link: "/dashboard" },
21 | {
22 | name: "User Management",
23 | icon: user,
24 | link: "/user-management",
25 | },
26 | {
27 | name: "Customer Management",
28 | icon: customer,
29 | link: "/customer-management",
30 | },
31 | {
32 | name: "Content Management",
33 | icon: content,
34 | link: "/content-management",
35 | },
36 | {
37 | name: "Showcase Management",
38 | icon: showcase,
39 | link: "/showcase-management",
40 | },
41 | {
42 | name: "Home Service Management",
43 | icon: home,
44 | link: "/home-service",
45 | },
46 | {
47 | name: "Market Place Management",
48 | icon: market,
49 | link: "/market-place",
50 | },
51 | { name: "Permission & Role", icon: role, link: "/role-management" },
52 | { name: "Settings", icon: settings, link: "/settings" },
53 | ];
54 |
55 | const handleItemClick = (item) => {
56 | setSelectedItem(item);
57 | };
58 |
59 | return (
60 |
61 |
62 |

63 |
64 |
65 |
80 |
{
83 | window.location.href = "/";
84 | }}>
85 |

86 |
87 | Logout
88 |
89 |
90 |
91 |
92 | );
93 | };
94 |
95 | export default Menubar;
96 |
--------------------------------------------------------------------------------
/client/src/Components/Chart.js:
--------------------------------------------------------------------------------
1 | import React, { useState, useEffect } from "react";
2 | import { Chart as ChartJS, ArcElement, Tooltip, Legend } from "chart.js";
3 | import { Pie } from "react-chartjs-2";
4 |
5 | const data = {
6 | labels: ["Today", "Yesterday", "Tomorrow", "Last Month"],
7 | datasets: [
8 | {
9 | data: [300, 50, 100, 150],
10 | backgroundColor: ["#FF6384", "#36A2EB", "#FFCE56", "#2ECC71"],
11 | hoverBackgroundColor: ["#FF6384", "#36A2EB", "#FFCE56", "#2ECC71"],
12 | },
13 | ],
14 | };
15 |
16 | ChartJS.register(ArcElement, Tooltip, Legend);
17 |
18 | const ChartCard = ({ heading, fields }) => {
19 | const [currentTime, setCurrentTime] = useState("");
20 |
21 | useEffect(() => {
22 | const timer = setInterval(() => {
23 | const now = new Date();
24 | setCurrentTime(
25 | now.toLocaleTimeString("en-US", {
26 | hour: "numeric",
27 | minute: "2-digit",
28 | hour12: true,
29 | })
30 | );
31 | }, 1000);
32 | return () => clearInterval(timer);
33 | }, []);
34 |
35 | const current = new Date();
36 | const date = `${current.getDate()}/${
37 | current.getMonth() + 1
38 | }/${current.getFullYear()}`;
39 |
40 | return (
41 |
42 |
43 |
44 |
{heading}
45 |
46 | {date}
47 | {currentTime}
48 |
49 |
50 |
53 |
54 |
55 |
{fields[0].name}
56 |
{fields[0].value}
57 |
58 |
59 |
60 |
{fields[1].name}
61 |
{fields[1].value}
62 |
63 |
64 |
65 |
{fields[2].name}
66 |
{fields[2].value}
67 |
68 |
69 |
70 |
{fields[3].name}
71 |
{fields[3].value}
72 |
73 |
74 |
75 |
76 |
77 | );
78 | };
79 |
80 | export default ChartCard;
81 |
--------------------------------------------------------------------------------
/client/src/Pages/Login.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import { useNavigate } from "react-router-dom";
3 | import { logo, background } from "../Assets/index";
4 |
5 | const Login = () => {
6 | const [email, setEmail] = useState("");
7 | const [password, setPassword] = useState("");
8 |
9 | const navigate = useNavigate();
10 | const loginUser = async (event) => {
11 | event.preventDefault();
12 | const response = await fetch("http://localhost:5000/api/login", {
13 | method: "POST",
14 | headers: {
15 | "Content-type": "application/json",
16 | },
17 | body: JSON.stringify({
18 | email,
19 | password,
20 | }),
21 | });
22 | const data = await response.json();
23 | if (data.success) {
24 | navigate("/Dashboard");
25 | } else {
26 | alert("Invalid email or password");
27 | }
28 | };
29 | return (
30 |
36 |
37 |

42 |
87 |
88 |
89 | );
90 | };
91 |
92 | export default Login;
93 |
--------------------------------------------------------------------------------
/client/src/Components/Table.js:
--------------------------------------------------------------------------------
1 | import React, { useEffect, useState } from "react";
2 | import axios from "axios";
3 | import { see, remove, change, search } from "../Assets/index";
4 |
5 | const UsersTable = () => {
6 | const [users, setUsers] = useState([]);
7 | const [searchText, setSearchText] = useState("");
8 | const [status, setStatus] = useState({});
9 | const updateStatus = (id) => {
10 | setStatus((prev) => ({ ...prev, [id]: "Complete" }));
11 | };
12 |
13 | useEffect(() => {
14 | const fetchUsers = async () => {
15 | const response = await axios.get("http://localhost:5000/api/users");
16 | setUsers(response.data.data);
17 | };
18 | fetchUsers();
19 | }, []);
20 |
21 | const handleSearch = (event) => {
22 | setSearchText(event.target.value);
23 | };
24 |
25 | const filteredUsers = users.filter((user) =>
26 | user.name.toLowerCase().includes(searchText.toLowerCase())
27 | );
28 |
29 | const handleDelete = (id) => {
30 | setUsers(users.filter((user) => user._id !== id));
31 | };
32 |
33 | return (
34 |
35 |
36 |
37 |
43 |

48 |
49 |
50 |
53 |
54 |
55 |
56 |
57 |
58 | | S.No |
59 | Name |
60 | Email Address |
61 | Role |
62 | Status |
63 | Actions |
64 |
65 |
66 |
67 | {filteredUsers.map((user, index) => (
68 |
69 | | {index + 1} |
70 | {user.name} |
71 | {user.email} |
72 | {user.role} |
73 |
79 | {status[user._id] || "Assign"}
80 | | {" "}
81 |
82 |
83 |  updateStatus(user._id)}
87 | />
88 | 
89 |  handleDelete(user._id)}
93 | />
94 |
95 | |
96 |
97 | ))}
98 |
99 |
100 |
101 | );
102 | };
103 |
104 | export default UsersTable;
105 |
--------------------------------------------------------------------------------
/client/src/Pages/Register.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import { useNavigate } from "react-router-dom";
3 | import { logo, background } from "../Assets/index";
4 |
5 | const Register = () => {
6 | const [name, setName] = useState("");
7 | const [email, setEmail] = useState("");
8 | const [role, setRole] = useState("");
9 | const [password, setPassword] = useState("");
10 |
11 | const navigate = useNavigate();
12 |
13 | const registerUser = async (event) => {
14 | event.preventDefault();
15 | try {
16 | const response = await fetch("http://localhost:5000/api/register", {
17 | method: "POST",
18 | headers: {
19 | "Content-type": "application/json",
20 | },
21 | body: JSON.stringify({
22 | name,
23 | email,
24 | role,
25 | password,
26 | }),
27 | });
28 | const data = await response.json();
29 | console.log(data); // Log the response data to the console
30 | navigate("/");
31 | } catch (error) {
32 | console.error(error);
33 | }
34 | };
35 | return (
36 |
42 |
43 |

48 |
110 |
111 |
112 | );
113 | };
114 |
115 | export default Register;
116 |
--------------------------------------------------------------------------------
/client/src/Pages/Dashboard.js:
--------------------------------------------------------------------------------
1 | import React, { useState } from "react";
2 | import Menubar from "../Components/Menubar";
3 | import MenuToggle from "../Components/MenuToggle";
4 | import Navbar from "../Components/Navbar";
5 | import Card from "../Components/Dashboard-card";
6 | import { reedem, service, users, revenue } from "../Assets/index";
7 | import ChartComponent from "../Components/Chart";
8 |
9 | const Dashboard = () => {
10 | const [showMenu, setShowMenu] = useState(false);
11 |
12 | const handleMenuToggle = () => {
13 | setShowMenu(!showMenu);
14 | };
15 |
16 | return (
17 |
18 |
19 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
38 |
39 |
40 |
46 |
47 |
48 |
54 |
55 |
56 |
62 |
63 |
64 |
85 |
106 |
107 |
108 |
109 |
110 |
111 | );
112 | };
113 |
114 | export default Dashboard;
115 |
--------------------------------------------------------------------------------
/server/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "server",
9 | "version": "1.0.0",
10 | "license": "ISC",
11 | "dependencies": {
12 | "bcrypt": "^5.1.0",
13 | "cors": "^2.8.5",
14 | "dotenv": "^16.0.3",
15 | "express": "^4.18.2",
16 | "jsonwebtoken": "^9.0.0",
17 | "mongoose": "^7.0.2",
18 | "nodemon": "^2.0.21"
19 | }
20 | },
21 | "node_modules/@mapbox/node-pre-gyp": {
22 | "version": "1.0.10",
23 | "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz",
24 | "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==",
25 | "dependencies": {
26 | "detect-libc": "^2.0.0",
27 | "https-proxy-agent": "^5.0.0",
28 | "make-dir": "^3.1.0",
29 | "node-fetch": "^2.6.7",
30 | "nopt": "^5.0.0",
31 | "npmlog": "^5.0.1",
32 | "rimraf": "^3.0.2",
33 | "semver": "^7.3.5",
34 | "tar": "^6.1.11"
35 | },
36 | "bin": {
37 | "node-pre-gyp": "bin/node-pre-gyp"
38 | }
39 | },
40 | "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": {
41 | "version": "5.0.0",
42 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz",
43 | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==",
44 | "dependencies": {
45 | "abbrev": "1"
46 | },
47 | "bin": {
48 | "nopt": "bin/nopt.js"
49 | },
50 | "engines": {
51 | "node": ">=6"
52 | }
53 | },
54 | "node_modules/@mapbox/node-pre-gyp/node_modules/semver": {
55 | "version": "7.3.8",
56 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
57 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
58 | "dependencies": {
59 | "lru-cache": "^6.0.0"
60 | },
61 | "bin": {
62 | "semver": "bin/semver.js"
63 | },
64 | "engines": {
65 | "node": ">=10"
66 | }
67 | },
68 | "node_modules/@types/node": {
69 | "version": "18.15.3",
70 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.3.tgz",
71 | "integrity": "sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw=="
72 | },
73 | "node_modules/@types/webidl-conversions": {
74 | "version": "7.0.0",
75 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
76 | "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog=="
77 | },
78 | "node_modules/@types/whatwg-url": {
79 | "version": "8.2.2",
80 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
81 | "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
82 | "dependencies": {
83 | "@types/node": "*",
84 | "@types/webidl-conversions": "*"
85 | }
86 | },
87 | "node_modules/abbrev": {
88 | "version": "1.1.1",
89 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
90 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
91 | },
92 | "node_modules/accepts": {
93 | "version": "1.3.8",
94 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz",
95 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==",
96 | "dependencies": {
97 | "mime-types": "~2.1.34",
98 | "negotiator": "0.6.3"
99 | },
100 | "engines": {
101 | "node": ">= 0.6"
102 | }
103 | },
104 | "node_modules/agent-base": {
105 | "version": "6.0.2",
106 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz",
107 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==",
108 | "dependencies": {
109 | "debug": "4"
110 | },
111 | "engines": {
112 | "node": ">= 6.0.0"
113 | }
114 | },
115 | "node_modules/agent-base/node_modules/debug": {
116 | "version": "4.3.4",
117 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
118 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
119 | "dependencies": {
120 | "ms": "2.1.2"
121 | },
122 | "engines": {
123 | "node": ">=6.0"
124 | },
125 | "peerDependenciesMeta": {
126 | "supports-color": {
127 | "optional": true
128 | }
129 | }
130 | },
131 | "node_modules/agent-base/node_modules/ms": {
132 | "version": "2.1.2",
133 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
134 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
135 | },
136 | "node_modules/ansi-regex": {
137 | "version": "5.0.1",
138 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
139 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
140 | "engines": {
141 | "node": ">=8"
142 | }
143 | },
144 | "node_modules/anymatch": {
145 | "version": "3.1.3",
146 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
147 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
148 | "dependencies": {
149 | "normalize-path": "^3.0.0",
150 | "picomatch": "^2.0.4"
151 | },
152 | "engines": {
153 | "node": ">= 8"
154 | }
155 | },
156 | "node_modules/aproba": {
157 | "version": "2.0.0",
158 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz",
159 | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ=="
160 | },
161 | "node_modules/are-we-there-yet": {
162 | "version": "2.0.0",
163 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz",
164 | "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==",
165 | "dependencies": {
166 | "delegates": "^1.0.0",
167 | "readable-stream": "^3.6.0"
168 | },
169 | "engines": {
170 | "node": ">=10"
171 | }
172 | },
173 | "node_modules/array-flatten": {
174 | "version": "1.1.1",
175 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
176 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
177 | },
178 | "node_modules/balanced-match": {
179 | "version": "1.0.2",
180 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
181 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
182 | },
183 | "node_modules/bcrypt": {
184 | "version": "5.1.0",
185 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz",
186 | "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==",
187 | "hasInstallScript": true,
188 | "dependencies": {
189 | "@mapbox/node-pre-gyp": "^1.0.10",
190 | "node-addon-api": "^5.0.0"
191 | },
192 | "engines": {
193 | "node": ">= 10.0.0"
194 | }
195 | },
196 | "node_modules/binary-extensions": {
197 | "version": "2.2.0",
198 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
199 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
200 | "engines": {
201 | "node": ">=8"
202 | }
203 | },
204 | "node_modules/body-parser": {
205 | "version": "1.20.1",
206 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz",
207 | "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==",
208 | "dependencies": {
209 | "bytes": "3.1.2",
210 | "content-type": "~1.0.4",
211 | "debug": "2.6.9",
212 | "depd": "2.0.0",
213 | "destroy": "1.2.0",
214 | "http-errors": "2.0.0",
215 | "iconv-lite": "0.4.24",
216 | "on-finished": "2.4.1",
217 | "qs": "6.11.0",
218 | "raw-body": "2.5.1",
219 | "type-is": "~1.6.18",
220 | "unpipe": "1.0.0"
221 | },
222 | "engines": {
223 | "node": ">= 0.8",
224 | "npm": "1.2.8000 || >= 1.4.16"
225 | }
226 | },
227 | "node_modules/brace-expansion": {
228 | "version": "1.1.11",
229 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
230 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
231 | "dependencies": {
232 | "balanced-match": "^1.0.0",
233 | "concat-map": "0.0.1"
234 | }
235 | },
236 | "node_modules/braces": {
237 | "version": "3.0.2",
238 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
239 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
240 | "dependencies": {
241 | "fill-range": "^7.0.1"
242 | },
243 | "engines": {
244 | "node": ">=8"
245 | }
246 | },
247 | "node_modules/bson": {
248 | "version": "5.1.0",
249 | "resolved": "https://registry.npmjs.org/bson/-/bson-5.1.0.tgz",
250 | "integrity": "sha512-FEecNHkhYRBe7X9KDkdG12xNuz5VHGeH6mCE0B5sBmYtiR/Ux/9vUH/v4NUoBCDr6NuEhvahjoLiiRogptVW0A==",
251 | "engines": {
252 | "node": ">=14.20.1"
253 | }
254 | },
255 | "node_modules/buffer-equal-constant-time": {
256 | "version": "1.0.1",
257 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz",
258 | "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA=="
259 | },
260 | "node_modules/bytes": {
261 | "version": "3.1.2",
262 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz",
263 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==",
264 | "engines": {
265 | "node": ">= 0.8"
266 | }
267 | },
268 | "node_modules/call-bind": {
269 | "version": "1.0.2",
270 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
271 | "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
272 | "dependencies": {
273 | "function-bind": "^1.1.1",
274 | "get-intrinsic": "^1.0.2"
275 | },
276 | "funding": {
277 | "url": "https://github.com/sponsors/ljharb"
278 | }
279 | },
280 | "node_modules/chokidar": {
281 | "version": "3.5.3",
282 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
283 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
284 | "funding": [
285 | {
286 | "type": "individual",
287 | "url": "https://paulmillr.com/funding/"
288 | }
289 | ],
290 | "dependencies": {
291 | "anymatch": "~3.1.2",
292 | "braces": "~3.0.2",
293 | "glob-parent": "~5.1.2",
294 | "is-binary-path": "~2.1.0",
295 | "is-glob": "~4.0.1",
296 | "normalize-path": "~3.0.0",
297 | "readdirp": "~3.6.0"
298 | },
299 | "engines": {
300 | "node": ">= 8.10.0"
301 | },
302 | "optionalDependencies": {
303 | "fsevents": "~2.3.2"
304 | }
305 | },
306 | "node_modules/chownr": {
307 | "version": "2.0.0",
308 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz",
309 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==",
310 | "engines": {
311 | "node": ">=10"
312 | }
313 | },
314 | "node_modules/color-support": {
315 | "version": "1.1.3",
316 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
317 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
318 | "bin": {
319 | "color-support": "bin.js"
320 | }
321 | },
322 | "node_modules/concat-map": {
323 | "version": "0.0.1",
324 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
325 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
326 | },
327 | "node_modules/console-control-strings": {
328 | "version": "1.1.0",
329 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
330 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
331 | },
332 | "node_modules/content-disposition": {
333 | "version": "0.5.4",
334 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
335 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
336 | "dependencies": {
337 | "safe-buffer": "5.2.1"
338 | },
339 | "engines": {
340 | "node": ">= 0.6"
341 | }
342 | },
343 | "node_modules/content-type": {
344 | "version": "1.0.5",
345 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz",
346 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==",
347 | "engines": {
348 | "node": ">= 0.6"
349 | }
350 | },
351 | "node_modules/cookie": {
352 | "version": "0.5.0",
353 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz",
354 | "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==",
355 | "engines": {
356 | "node": ">= 0.6"
357 | }
358 | },
359 | "node_modules/cookie-signature": {
360 | "version": "1.0.6",
361 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
362 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
363 | },
364 | "node_modules/cors": {
365 | "version": "2.8.5",
366 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
367 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
368 | "dependencies": {
369 | "object-assign": "^4",
370 | "vary": "^1"
371 | },
372 | "engines": {
373 | "node": ">= 0.10"
374 | }
375 | },
376 | "node_modules/debug": {
377 | "version": "2.6.9",
378 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
379 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
380 | "dependencies": {
381 | "ms": "2.0.0"
382 | }
383 | },
384 | "node_modules/delegates": {
385 | "version": "1.0.0",
386 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
387 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
388 | },
389 | "node_modules/depd": {
390 | "version": "2.0.0",
391 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
392 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
393 | "engines": {
394 | "node": ">= 0.8"
395 | }
396 | },
397 | "node_modules/destroy": {
398 | "version": "1.2.0",
399 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz",
400 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==",
401 | "engines": {
402 | "node": ">= 0.8",
403 | "npm": "1.2.8000 || >= 1.4.16"
404 | }
405 | },
406 | "node_modules/detect-libc": {
407 | "version": "2.0.1",
408 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz",
409 | "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==",
410 | "engines": {
411 | "node": ">=8"
412 | }
413 | },
414 | "node_modules/dotenv": {
415 | "version": "16.0.3",
416 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz",
417 | "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==",
418 | "engines": {
419 | "node": ">=12"
420 | }
421 | },
422 | "node_modules/ecdsa-sig-formatter": {
423 | "version": "1.0.11",
424 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz",
425 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==",
426 | "dependencies": {
427 | "safe-buffer": "^5.0.1"
428 | }
429 | },
430 | "node_modules/ee-first": {
431 | "version": "1.1.1",
432 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
433 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow=="
434 | },
435 | "node_modules/emoji-regex": {
436 | "version": "8.0.0",
437 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
438 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
439 | },
440 | "node_modules/encodeurl": {
441 | "version": "1.0.2",
442 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
443 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==",
444 | "engines": {
445 | "node": ">= 0.8"
446 | }
447 | },
448 | "node_modules/escape-html": {
449 | "version": "1.0.3",
450 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
451 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
452 | },
453 | "node_modules/etag": {
454 | "version": "1.8.1",
455 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
456 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==",
457 | "engines": {
458 | "node": ">= 0.6"
459 | }
460 | },
461 | "node_modules/express": {
462 | "version": "4.18.2",
463 | "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz",
464 | "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==",
465 | "dependencies": {
466 | "accepts": "~1.3.8",
467 | "array-flatten": "1.1.1",
468 | "body-parser": "1.20.1",
469 | "content-disposition": "0.5.4",
470 | "content-type": "~1.0.4",
471 | "cookie": "0.5.0",
472 | "cookie-signature": "1.0.6",
473 | "debug": "2.6.9",
474 | "depd": "2.0.0",
475 | "encodeurl": "~1.0.2",
476 | "escape-html": "~1.0.3",
477 | "etag": "~1.8.1",
478 | "finalhandler": "1.2.0",
479 | "fresh": "0.5.2",
480 | "http-errors": "2.0.0",
481 | "merge-descriptors": "1.0.1",
482 | "methods": "~1.1.2",
483 | "on-finished": "2.4.1",
484 | "parseurl": "~1.3.3",
485 | "path-to-regexp": "0.1.7",
486 | "proxy-addr": "~2.0.7",
487 | "qs": "6.11.0",
488 | "range-parser": "~1.2.1",
489 | "safe-buffer": "5.2.1",
490 | "send": "0.18.0",
491 | "serve-static": "1.15.0",
492 | "setprototypeof": "1.2.0",
493 | "statuses": "2.0.1",
494 | "type-is": "~1.6.18",
495 | "utils-merge": "1.0.1",
496 | "vary": "~1.1.2"
497 | },
498 | "engines": {
499 | "node": ">= 0.10.0"
500 | }
501 | },
502 | "node_modules/fill-range": {
503 | "version": "7.0.1",
504 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
505 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
506 | "dependencies": {
507 | "to-regex-range": "^5.0.1"
508 | },
509 | "engines": {
510 | "node": ">=8"
511 | }
512 | },
513 | "node_modules/finalhandler": {
514 | "version": "1.2.0",
515 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz",
516 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==",
517 | "dependencies": {
518 | "debug": "2.6.9",
519 | "encodeurl": "~1.0.2",
520 | "escape-html": "~1.0.3",
521 | "on-finished": "2.4.1",
522 | "parseurl": "~1.3.3",
523 | "statuses": "2.0.1",
524 | "unpipe": "~1.0.0"
525 | },
526 | "engines": {
527 | "node": ">= 0.8"
528 | }
529 | },
530 | "node_modules/forwarded": {
531 | "version": "0.2.0",
532 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
533 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
534 | "engines": {
535 | "node": ">= 0.6"
536 | }
537 | },
538 | "node_modules/fresh": {
539 | "version": "0.5.2",
540 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
541 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==",
542 | "engines": {
543 | "node": ">= 0.6"
544 | }
545 | },
546 | "node_modules/fs-minipass": {
547 | "version": "2.1.0",
548 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz",
549 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==",
550 | "dependencies": {
551 | "minipass": "^3.0.0"
552 | },
553 | "engines": {
554 | "node": ">= 8"
555 | }
556 | },
557 | "node_modules/fs-minipass/node_modules/minipass": {
558 | "version": "3.3.6",
559 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
560 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
561 | "dependencies": {
562 | "yallist": "^4.0.0"
563 | },
564 | "engines": {
565 | "node": ">=8"
566 | }
567 | },
568 | "node_modules/fs.realpath": {
569 | "version": "1.0.0",
570 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
571 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw=="
572 | },
573 | "node_modules/fsevents": {
574 | "version": "2.3.2",
575 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
576 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
577 | "hasInstallScript": true,
578 | "optional": true,
579 | "os": [
580 | "darwin"
581 | ],
582 | "engines": {
583 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
584 | }
585 | },
586 | "node_modules/function-bind": {
587 | "version": "1.1.1",
588 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
589 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
590 | },
591 | "node_modules/gauge": {
592 | "version": "3.0.2",
593 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz",
594 | "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==",
595 | "dependencies": {
596 | "aproba": "^1.0.3 || ^2.0.0",
597 | "color-support": "^1.1.2",
598 | "console-control-strings": "^1.0.0",
599 | "has-unicode": "^2.0.1",
600 | "object-assign": "^4.1.1",
601 | "signal-exit": "^3.0.0",
602 | "string-width": "^4.2.3",
603 | "strip-ansi": "^6.0.1",
604 | "wide-align": "^1.1.2"
605 | },
606 | "engines": {
607 | "node": ">=10"
608 | }
609 | },
610 | "node_modules/get-intrinsic": {
611 | "version": "1.2.0",
612 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz",
613 | "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==",
614 | "dependencies": {
615 | "function-bind": "^1.1.1",
616 | "has": "^1.0.3",
617 | "has-symbols": "^1.0.3"
618 | },
619 | "funding": {
620 | "url": "https://github.com/sponsors/ljharb"
621 | }
622 | },
623 | "node_modules/glob": {
624 | "version": "7.2.3",
625 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
626 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
627 | "dependencies": {
628 | "fs.realpath": "^1.0.0",
629 | "inflight": "^1.0.4",
630 | "inherits": "2",
631 | "minimatch": "^3.1.1",
632 | "once": "^1.3.0",
633 | "path-is-absolute": "^1.0.0"
634 | },
635 | "engines": {
636 | "node": "*"
637 | },
638 | "funding": {
639 | "url": "https://github.com/sponsors/isaacs"
640 | }
641 | },
642 | "node_modules/glob-parent": {
643 | "version": "5.1.2",
644 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
645 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
646 | "dependencies": {
647 | "is-glob": "^4.0.1"
648 | },
649 | "engines": {
650 | "node": ">= 6"
651 | }
652 | },
653 | "node_modules/has": {
654 | "version": "1.0.3",
655 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
656 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
657 | "dependencies": {
658 | "function-bind": "^1.1.1"
659 | },
660 | "engines": {
661 | "node": ">= 0.4.0"
662 | }
663 | },
664 | "node_modules/has-flag": {
665 | "version": "3.0.0",
666 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
667 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==",
668 | "engines": {
669 | "node": ">=4"
670 | }
671 | },
672 | "node_modules/has-symbols": {
673 | "version": "1.0.3",
674 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz",
675 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==",
676 | "engines": {
677 | "node": ">= 0.4"
678 | },
679 | "funding": {
680 | "url": "https://github.com/sponsors/ljharb"
681 | }
682 | },
683 | "node_modules/has-unicode": {
684 | "version": "2.0.1",
685 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
686 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
687 | },
688 | "node_modules/http-errors": {
689 | "version": "2.0.0",
690 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz",
691 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==",
692 | "dependencies": {
693 | "depd": "2.0.0",
694 | "inherits": "2.0.4",
695 | "setprototypeof": "1.2.0",
696 | "statuses": "2.0.1",
697 | "toidentifier": "1.0.1"
698 | },
699 | "engines": {
700 | "node": ">= 0.8"
701 | }
702 | },
703 | "node_modules/https-proxy-agent": {
704 | "version": "5.0.1",
705 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz",
706 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==",
707 | "dependencies": {
708 | "agent-base": "6",
709 | "debug": "4"
710 | },
711 | "engines": {
712 | "node": ">= 6"
713 | }
714 | },
715 | "node_modules/https-proxy-agent/node_modules/debug": {
716 | "version": "4.3.4",
717 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
718 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
719 | "dependencies": {
720 | "ms": "2.1.2"
721 | },
722 | "engines": {
723 | "node": ">=6.0"
724 | },
725 | "peerDependenciesMeta": {
726 | "supports-color": {
727 | "optional": true
728 | }
729 | }
730 | },
731 | "node_modules/https-proxy-agent/node_modules/ms": {
732 | "version": "2.1.2",
733 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
734 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
735 | },
736 | "node_modules/iconv-lite": {
737 | "version": "0.4.24",
738 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
739 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
740 | "dependencies": {
741 | "safer-buffer": ">= 2.1.2 < 3"
742 | },
743 | "engines": {
744 | "node": ">=0.10.0"
745 | }
746 | },
747 | "node_modules/ignore-by-default": {
748 | "version": "1.0.1",
749 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
750 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
751 | },
752 | "node_modules/inflight": {
753 | "version": "1.0.6",
754 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
755 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
756 | "dependencies": {
757 | "once": "^1.3.0",
758 | "wrappy": "1"
759 | }
760 | },
761 | "node_modules/inherits": {
762 | "version": "2.0.4",
763 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
764 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
765 | },
766 | "node_modules/ip": {
767 | "version": "2.0.0",
768 | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz",
769 | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ=="
770 | },
771 | "node_modules/ipaddr.js": {
772 | "version": "1.9.1",
773 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
774 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
775 | "engines": {
776 | "node": ">= 0.10"
777 | }
778 | },
779 | "node_modules/is-binary-path": {
780 | "version": "2.1.0",
781 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
782 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
783 | "dependencies": {
784 | "binary-extensions": "^2.0.0"
785 | },
786 | "engines": {
787 | "node": ">=8"
788 | }
789 | },
790 | "node_modules/is-extglob": {
791 | "version": "2.1.1",
792 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
793 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
794 | "engines": {
795 | "node": ">=0.10.0"
796 | }
797 | },
798 | "node_modules/is-fullwidth-code-point": {
799 | "version": "3.0.0",
800 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
801 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
802 | "engines": {
803 | "node": ">=8"
804 | }
805 | },
806 | "node_modules/is-glob": {
807 | "version": "4.0.3",
808 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
809 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
810 | "dependencies": {
811 | "is-extglob": "^2.1.1"
812 | },
813 | "engines": {
814 | "node": ">=0.10.0"
815 | }
816 | },
817 | "node_modules/is-number": {
818 | "version": "7.0.0",
819 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
820 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
821 | "engines": {
822 | "node": ">=0.12.0"
823 | }
824 | },
825 | "node_modules/jsonwebtoken": {
826 | "version": "9.0.0",
827 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz",
828 | "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==",
829 | "dependencies": {
830 | "jws": "^3.2.2",
831 | "lodash": "^4.17.21",
832 | "ms": "^2.1.1",
833 | "semver": "^7.3.8"
834 | },
835 | "engines": {
836 | "node": ">=12",
837 | "npm": ">=6"
838 | }
839 | },
840 | "node_modules/jsonwebtoken/node_modules/ms": {
841 | "version": "2.1.3",
842 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
843 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
844 | },
845 | "node_modules/jsonwebtoken/node_modules/semver": {
846 | "version": "7.3.8",
847 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
848 | "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
849 | "dependencies": {
850 | "lru-cache": "^6.0.0"
851 | },
852 | "bin": {
853 | "semver": "bin/semver.js"
854 | },
855 | "engines": {
856 | "node": ">=10"
857 | }
858 | },
859 | "node_modules/jwa": {
860 | "version": "1.4.1",
861 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz",
862 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==",
863 | "dependencies": {
864 | "buffer-equal-constant-time": "1.0.1",
865 | "ecdsa-sig-formatter": "1.0.11",
866 | "safe-buffer": "^5.0.1"
867 | }
868 | },
869 | "node_modules/jws": {
870 | "version": "3.2.2",
871 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz",
872 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==",
873 | "dependencies": {
874 | "jwa": "^1.4.1",
875 | "safe-buffer": "^5.0.1"
876 | }
877 | },
878 | "node_modules/kareem": {
879 | "version": "2.5.1",
880 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
881 | "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==",
882 | "engines": {
883 | "node": ">=12.0.0"
884 | }
885 | },
886 | "node_modules/lodash": {
887 | "version": "4.17.21",
888 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
889 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
890 | },
891 | "node_modules/lru-cache": {
892 | "version": "6.0.0",
893 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
894 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
895 | "dependencies": {
896 | "yallist": "^4.0.0"
897 | },
898 | "engines": {
899 | "node": ">=10"
900 | }
901 | },
902 | "node_modules/make-dir": {
903 | "version": "3.1.0",
904 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
905 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
906 | "dependencies": {
907 | "semver": "^6.0.0"
908 | },
909 | "engines": {
910 | "node": ">=8"
911 | },
912 | "funding": {
913 | "url": "https://github.com/sponsors/sindresorhus"
914 | }
915 | },
916 | "node_modules/make-dir/node_modules/semver": {
917 | "version": "6.3.0",
918 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
919 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
920 | "bin": {
921 | "semver": "bin/semver.js"
922 | }
923 | },
924 | "node_modules/media-typer": {
925 | "version": "0.3.0",
926 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
927 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==",
928 | "engines": {
929 | "node": ">= 0.6"
930 | }
931 | },
932 | "node_modules/memory-pager": {
933 | "version": "1.5.0",
934 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
935 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
936 | "optional": true
937 | },
938 | "node_modules/merge-descriptors": {
939 | "version": "1.0.1",
940 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
941 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
942 | },
943 | "node_modules/methods": {
944 | "version": "1.1.2",
945 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
946 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==",
947 | "engines": {
948 | "node": ">= 0.6"
949 | }
950 | },
951 | "node_modules/mime": {
952 | "version": "1.6.0",
953 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
954 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
955 | "bin": {
956 | "mime": "cli.js"
957 | },
958 | "engines": {
959 | "node": ">=4"
960 | }
961 | },
962 | "node_modules/mime-db": {
963 | "version": "1.52.0",
964 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz",
965 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==",
966 | "engines": {
967 | "node": ">= 0.6"
968 | }
969 | },
970 | "node_modules/mime-types": {
971 | "version": "2.1.35",
972 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz",
973 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==",
974 | "dependencies": {
975 | "mime-db": "1.52.0"
976 | },
977 | "engines": {
978 | "node": ">= 0.6"
979 | }
980 | },
981 | "node_modules/minimatch": {
982 | "version": "3.1.2",
983 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
984 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
985 | "dependencies": {
986 | "brace-expansion": "^1.1.7"
987 | },
988 | "engines": {
989 | "node": "*"
990 | }
991 | },
992 | "node_modules/minipass": {
993 | "version": "4.2.5",
994 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.5.tgz",
995 | "integrity": "sha512-+yQl7SX3bIT83Lhb4BVorMAHVuqsskxRdlmO9kTpyukp8vsm2Sn/fUOV9xlnG8/a5JsypJzap21lz/y3FBMJ8Q==",
996 | "engines": {
997 | "node": ">=8"
998 | }
999 | },
1000 | "node_modules/minizlib": {
1001 | "version": "2.1.2",
1002 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz",
1003 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==",
1004 | "dependencies": {
1005 | "minipass": "^3.0.0",
1006 | "yallist": "^4.0.0"
1007 | },
1008 | "engines": {
1009 | "node": ">= 8"
1010 | }
1011 | },
1012 | "node_modules/minizlib/node_modules/minipass": {
1013 | "version": "3.3.6",
1014 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz",
1015 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==",
1016 | "dependencies": {
1017 | "yallist": "^4.0.0"
1018 | },
1019 | "engines": {
1020 | "node": ">=8"
1021 | }
1022 | },
1023 | "node_modules/mkdirp": {
1024 | "version": "1.0.4",
1025 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
1026 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==",
1027 | "bin": {
1028 | "mkdirp": "bin/cmd.js"
1029 | },
1030 | "engines": {
1031 | "node": ">=10"
1032 | }
1033 | },
1034 | "node_modules/mongodb": {
1035 | "version": "5.1.0",
1036 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.1.0.tgz",
1037 | "integrity": "sha512-qgKb7y+EI90y4weY3z5+lIgm8wmexbonz0GalHkSElQXVKtRuwqXuhXKccyvIjXCJVy9qPV82zsinY0W1FBnJw==",
1038 | "dependencies": {
1039 | "bson": "^5.0.1",
1040 | "mongodb-connection-string-url": "^2.6.0",
1041 | "socks": "^2.7.1"
1042 | },
1043 | "engines": {
1044 | "node": ">=14.20.1"
1045 | },
1046 | "optionalDependencies": {
1047 | "saslprep": "^1.0.3"
1048 | },
1049 | "peerDependencies": {
1050 | "@aws-sdk/credential-providers": "^3.201.0",
1051 | "mongodb-client-encryption": "^2.3.0",
1052 | "snappy": "^7.2.2"
1053 | },
1054 | "peerDependenciesMeta": {
1055 | "@aws-sdk/credential-providers": {
1056 | "optional": true
1057 | },
1058 | "mongodb-client-encryption": {
1059 | "optional": true
1060 | },
1061 | "snappy": {
1062 | "optional": true
1063 | }
1064 | }
1065 | },
1066 | "node_modules/mongodb-connection-string-url": {
1067 | "version": "2.6.0",
1068 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
1069 | "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
1070 | "dependencies": {
1071 | "@types/whatwg-url": "^8.2.1",
1072 | "whatwg-url": "^11.0.0"
1073 | }
1074 | },
1075 | "node_modules/mongoose": {
1076 | "version": "7.0.2",
1077 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.0.2.tgz",
1078 | "integrity": "sha512-whX+5lAOLOs6VXRr9w+6m5qb8m/IXWLLb9+0/HRUh2TiIYtTt7UvajK92zW6wllCjBkrrnz/MDIOTCWMbs8K4g==",
1079 | "dependencies": {
1080 | "bson": "^5.0.1",
1081 | "kareem": "2.5.1",
1082 | "mongodb": "5.1.0",
1083 | "mpath": "0.9.0",
1084 | "mquery": "5.0.0",
1085 | "ms": "2.1.3",
1086 | "sift": "16.0.1"
1087 | },
1088 | "engines": {
1089 | "node": ">=14.0.0"
1090 | },
1091 | "funding": {
1092 | "type": "opencollective",
1093 | "url": "https://opencollective.com/mongoose"
1094 | }
1095 | },
1096 | "node_modules/mongoose/node_modules/ms": {
1097 | "version": "2.1.3",
1098 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1099 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1100 | },
1101 | "node_modules/mpath": {
1102 | "version": "0.9.0",
1103 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz",
1104 | "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==",
1105 | "engines": {
1106 | "node": ">=4.0.0"
1107 | }
1108 | },
1109 | "node_modules/mquery": {
1110 | "version": "5.0.0",
1111 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz",
1112 | "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==",
1113 | "dependencies": {
1114 | "debug": "4.x"
1115 | },
1116 | "engines": {
1117 | "node": ">=14.0.0"
1118 | }
1119 | },
1120 | "node_modules/mquery/node_modules/debug": {
1121 | "version": "4.3.4",
1122 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1123 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1124 | "dependencies": {
1125 | "ms": "2.1.2"
1126 | },
1127 | "engines": {
1128 | "node": ">=6.0"
1129 | },
1130 | "peerDependenciesMeta": {
1131 | "supports-color": {
1132 | "optional": true
1133 | }
1134 | }
1135 | },
1136 | "node_modules/mquery/node_modules/ms": {
1137 | "version": "2.1.2",
1138 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1139 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
1140 | },
1141 | "node_modules/ms": {
1142 | "version": "2.0.0",
1143 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
1144 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
1145 | },
1146 | "node_modules/negotiator": {
1147 | "version": "0.6.3",
1148 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz",
1149 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==",
1150 | "engines": {
1151 | "node": ">= 0.6"
1152 | }
1153 | },
1154 | "node_modules/node-addon-api": {
1155 | "version": "5.1.0",
1156 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz",
1157 | "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA=="
1158 | },
1159 | "node_modules/node-fetch": {
1160 | "version": "2.6.9",
1161 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz",
1162 | "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==",
1163 | "dependencies": {
1164 | "whatwg-url": "^5.0.0"
1165 | },
1166 | "engines": {
1167 | "node": "4.x || >=6.0.0"
1168 | },
1169 | "peerDependencies": {
1170 | "encoding": "^0.1.0"
1171 | },
1172 | "peerDependenciesMeta": {
1173 | "encoding": {
1174 | "optional": true
1175 | }
1176 | }
1177 | },
1178 | "node_modules/node-fetch/node_modules/tr46": {
1179 | "version": "0.0.3",
1180 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1181 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
1182 | },
1183 | "node_modules/node-fetch/node_modules/webidl-conversions": {
1184 | "version": "3.0.1",
1185 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1186 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
1187 | },
1188 | "node_modules/node-fetch/node_modules/whatwg-url": {
1189 | "version": "5.0.0",
1190 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1191 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
1192 | "dependencies": {
1193 | "tr46": "~0.0.3",
1194 | "webidl-conversions": "^3.0.0"
1195 | }
1196 | },
1197 | "node_modules/nodemon": {
1198 | "version": "2.0.21",
1199 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.21.tgz",
1200 | "integrity": "sha512-djN/n2549DUtY33S7o1djRCd7dEm0kBnj9c7S9XVXqRUbuggN1MZH/Nqa+5RFQr63Fbefq37nFXAE9VU86yL1A==",
1201 | "dependencies": {
1202 | "chokidar": "^3.5.2",
1203 | "debug": "^3.2.7",
1204 | "ignore-by-default": "^1.0.1",
1205 | "minimatch": "^3.1.2",
1206 | "pstree.remy": "^1.1.8",
1207 | "semver": "^5.7.1",
1208 | "simple-update-notifier": "^1.0.7",
1209 | "supports-color": "^5.5.0",
1210 | "touch": "^3.1.0",
1211 | "undefsafe": "^2.0.5"
1212 | },
1213 | "bin": {
1214 | "nodemon": "bin/nodemon.js"
1215 | },
1216 | "engines": {
1217 | "node": ">=8.10.0"
1218 | },
1219 | "funding": {
1220 | "type": "opencollective",
1221 | "url": "https://opencollective.com/nodemon"
1222 | }
1223 | },
1224 | "node_modules/nodemon/node_modules/debug": {
1225 | "version": "3.2.7",
1226 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
1227 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
1228 | "dependencies": {
1229 | "ms": "^2.1.1"
1230 | }
1231 | },
1232 | "node_modules/nodemon/node_modules/ms": {
1233 | "version": "2.1.3",
1234 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1235 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1236 | },
1237 | "node_modules/nopt": {
1238 | "version": "1.0.10",
1239 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
1240 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
1241 | "dependencies": {
1242 | "abbrev": "1"
1243 | },
1244 | "bin": {
1245 | "nopt": "bin/nopt.js"
1246 | },
1247 | "engines": {
1248 | "node": "*"
1249 | }
1250 | },
1251 | "node_modules/normalize-path": {
1252 | "version": "3.0.0",
1253 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1254 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1255 | "engines": {
1256 | "node": ">=0.10.0"
1257 | }
1258 | },
1259 | "node_modules/npmlog": {
1260 | "version": "5.0.1",
1261 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz",
1262 | "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==",
1263 | "dependencies": {
1264 | "are-we-there-yet": "^2.0.0",
1265 | "console-control-strings": "^1.1.0",
1266 | "gauge": "^3.0.0",
1267 | "set-blocking": "^2.0.0"
1268 | }
1269 | },
1270 | "node_modules/object-assign": {
1271 | "version": "4.1.1",
1272 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1273 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1274 | "engines": {
1275 | "node": ">=0.10.0"
1276 | }
1277 | },
1278 | "node_modules/object-inspect": {
1279 | "version": "1.12.3",
1280 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz",
1281 | "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==",
1282 | "funding": {
1283 | "url": "https://github.com/sponsors/ljharb"
1284 | }
1285 | },
1286 | "node_modules/on-finished": {
1287 | "version": "2.4.1",
1288 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz",
1289 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==",
1290 | "dependencies": {
1291 | "ee-first": "1.1.1"
1292 | },
1293 | "engines": {
1294 | "node": ">= 0.8"
1295 | }
1296 | },
1297 | "node_modules/once": {
1298 | "version": "1.4.0",
1299 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1300 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1301 | "dependencies": {
1302 | "wrappy": "1"
1303 | }
1304 | },
1305 | "node_modules/parseurl": {
1306 | "version": "1.3.3",
1307 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
1308 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
1309 | "engines": {
1310 | "node": ">= 0.8"
1311 | }
1312 | },
1313 | "node_modules/path-is-absolute": {
1314 | "version": "1.0.1",
1315 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1316 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
1317 | "engines": {
1318 | "node": ">=0.10.0"
1319 | }
1320 | },
1321 | "node_modules/path-to-regexp": {
1322 | "version": "0.1.7",
1323 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1324 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
1325 | },
1326 | "node_modules/picomatch": {
1327 | "version": "2.3.1",
1328 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
1329 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
1330 | "engines": {
1331 | "node": ">=8.6"
1332 | },
1333 | "funding": {
1334 | "url": "https://github.com/sponsors/jonschlinkert"
1335 | }
1336 | },
1337 | "node_modules/proxy-addr": {
1338 | "version": "2.0.7",
1339 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
1340 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
1341 | "dependencies": {
1342 | "forwarded": "0.2.0",
1343 | "ipaddr.js": "1.9.1"
1344 | },
1345 | "engines": {
1346 | "node": ">= 0.10"
1347 | }
1348 | },
1349 | "node_modules/pstree.remy": {
1350 | "version": "1.1.8",
1351 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz",
1352 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w=="
1353 | },
1354 | "node_modules/punycode": {
1355 | "version": "2.3.0",
1356 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz",
1357 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==",
1358 | "engines": {
1359 | "node": ">=6"
1360 | }
1361 | },
1362 | "node_modules/qs": {
1363 | "version": "6.11.0",
1364 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz",
1365 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==",
1366 | "dependencies": {
1367 | "side-channel": "^1.0.4"
1368 | },
1369 | "engines": {
1370 | "node": ">=0.6"
1371 | },
1372 | "funding": {
1373 | "url": "https://github.com/sponsors/ljharb"
1374 | }
1375 | },
1376 | "node_modules/range-parser": {
1377 | "version": "1.2.1",
1378 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1379 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
1380 | "engines": {
1381 | "node": ">= 0.6"
1382 | }
1383 | },
1384 | "node_modules/raw-body": {
1385 | "version": "2.5.1",
1386 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz",
1387 | "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==",
1388 | "dependencies": {
1389 | "bytes": "3.1.2",
1390 | "http-errors": "2.0.0",
1391 | "iconv-lite": "0.4.24",
1392 | "unpipe": "1.0.0"
1393 | },
1394 | "engines": {
1395 | "node": ">= 0.8"
1396 | }
1397 | },
1398 | "node_modules/readable-stream": {
1399 | "version": "3.6.2",
1400 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
1401 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
1402 | "dependencies": {
1403 | "inherits": "^2.0.3",
1404 | "string_decoder": "^1.1.1",
1405 | "util-deprecate": "^1.0.1"
1406 | },
1407 | "engines": {
1408 | "node": ">= 6"
1409 | }
1410 | },
1411 | "node_modules/readdirp": {
1412 | "version": "3.6.0",
1413 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
1414 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
1415 | "dependencies": {
1416 | "picomatch": "^2.2.1"
1417 | },
1418 | "engines": {
1419 | "node": ">=8.10.0"
1420 | }
1421 | },
1422 | "node_modules/rimraf": {
1423 | "version": "3.0.2",
1424 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
1425 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
1426 | "dependencies": {
1427 | "glob": "^7.1.3"
1428 | },
1429 | "bin": {
1430 | "rimraf": "bin.js"
1431 | },
1432 | "funding": {
1433 | "url": "https://github.com/sponsors/isaacs"
1434 | }
1435 | },
1436 | "node_modules/safe-buffer": {
1437 | "version": "5.2.1",
1438 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1439 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
1440 | "funding": [
1441 | {
1442 | "type": "github",
1443 | "url": "https://github.com/sponsors/feross"
1444 | },
1445 | {
1446 | "type": "patreon",
1447 | "url": "https://www.patreon.com/feross"
1448 | },
1449 | {
1450 | "type": "consulting",
1451 | "url": "https://feross.org/support"
1452 | }
1453 | ]
1454 | },
1455 | "node_modules/safer-buffer": {
1456 | "version": "2.1.2",
1457 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1458 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1459 | },
1460 | "node_modules/saslprep": {
1461 | "version": "1.0.3",
1462 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
1463 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
1464 | "optional": true,
1465 | "dependencies": {
1466 | "sparse-bitfield": "^3.0.3"
1467 | },
1468 | "engines": {
1469 | "node": ">=6"
1470 | }
1471 | },
1472 | "node_modules/semver": {
1473 | "version": "5.7.1",
1474 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1475 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1476 | "bin": {
1477 | "semver": "bin/semver"
1478 | }
1479 | },
1480 | "node_modules/send": {
1481 | "version": "0.18.0",
1482 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz",
1483 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==",
1484 | "dependencies": {
1485 | "debug": "2.6.9",
1486 | "depd": "2.0.0",
1487 | "destroy": "1.2.0",
1488 | "encodeurl": "~1.0.2",
1489 | "escape-html": "~1.0.3",
1490 | "etag": "~1.8.1",
1491 | "fresh": "0.5.2",
1492 | "http-errors": "2.0.0",
1493 | "mime": "1.6.0",
1494 | "ms": "2.1.3",
1495 | "on-finished": "2.4.1",
1496 | "range-parser": "~1.2.1",
1497 | "statuses": "2.0.1"
1498 | },
1499 | "engines": {
1500 | "node": ">= 0.8.0"
1501 | }
1502 | },
1503 | "node_modules/send/node_modules/ms": {
1504 | "version": "2.1.3",
1505 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
1506 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
1507 | },
1508 | "node_modules/serve-static": {
1509 | "version": "1.15.0",
1510 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz",
1511 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==",
1512 | "dependencies": {
1513 | "encodeurl": "~1.0.2",
1514 | "escape-html": "~1.0.3",
1515 | "parseurl": "~1.3.3",
1516 | "send": "0.18.0"
1517 | },
1518 | "engines": {
1519 | "node": ">= 0.8.0"
1520 | }
1521 | },
1522 | "node_modules/set-blocking": {
1523 | "version": "2.0.0",
1524 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1525 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw=="
1526 | },
1527 | "node_modules/setprototypeof": {
1528 | "version": "1.2.0",
1529 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
1530 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw=="
1531 | },
1532 | "node_modules/side-channel": {
1533 | "version": "1.0.4",
1534 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
1535 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
1536 | "dependencies": {
1537 | "call-bind": "^1.0.0",
1538 | "get-intrinsic": "^1.0.2",
1539 | "object-inspect": "^1.9.0"
1540 | },
1541 | "funding": {
1542 | "url": "https://github.com/sponsors/ljharb"
1543 | }
1544 | },
1545 | "node_modules/sift": {
1546 | "version": "16.0.1",
1547 | "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz",
1548 | "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="
1549 | },
1550 | "node_modules/signal-exit": {
1551 | "version": "3.0.7",
1552 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
1553 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
1554 | },
1555 | "node_modules/simple-update-notifier": {
1556 | "version": "1.1.0",
1557 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz",
1558 | "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==",
1559 | "dependencies": {
1560 | "semver": "~7.0.0"
1561 | },
1562 | "engines": {
1563 | "node": ">=8.10.0"
1564 | }
1565 | },
1566 | "node_modules/simple-update-notifier/node_modules/semver": {
1567 | "version": "7.0.0",
1568 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz",
1569 | "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==",
1570 | "bin": {
1571 | "semver": "bin/semver.js"
1572 | }
1573 | },
1574 | "node_modules/smart-buffer": {
1575 | "version": "4.2.0",
1576 | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
1577 | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
1578 | "engines": {
1579 | "node": ">= 6.0.0",
1580 | "npm": ">= 3.0.0"
1581 | }
1582 | },
1583 | "node_modules/socks": {
1584 | "version": "2.7.1",
1585 | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
1586 | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
1587 | "dependencies": {
1588 | "ip": "^2.0.0",
1589 | "smart-buffer": "^4.2.0"
1590 | },
1591 | "engines": {
1592 | "node": ">= 10.13.0",
1593 | "npm": ">= 3.0.0"
1594 | }
1595 | },
1596 | "node_modules/sparse-bitfield": {
1597 | "version": "3.0.3",
1598 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
1599 | "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
1600 | "optional": true,
1601 | "dependencies": {
1602 | "memory-pager": "^1.0.2"
1603 | }
1604 | },
1605 | "node_modules/statuses": {
1606 | "version": "2.0.1",
1607 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz",
1608 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==",
1609 | "engines": {
1610 | "node": ">= 0.8"
1611 | }
1612 | },
1613 | "node_modules/string_decoder": {
1614 | "version": "1.3.0",
1615 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
1616 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
1617 | "dependencies": {
1618 | "safe-buffer": "~5.2.0"
1619 | }
1620 | },
1621 | "node_modules/string-width": {
1622 | "version": "4.2.3",
1623 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1624 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1625 | "dependencies": {
1626 | "emoji-regex": "^8.0.0",
1627 | "is-fullwidth-code-point": "^3.0.0",
1628 | "strip-ansi": "^6.0.1"
1629 | },
1630 | "engines": {
1631 | "node": ">=8"
1632 | }
1633 | },
1634 | "node_modules/strip-ansi": {
1635 | "version": "6.0.1",
1636 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1637 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1638 | "dependencies": {
1639 | "ansi-regex": "^5.0.1"
1640 | },
1641 | "engines": {
1642 | "node": ">=8"
1643 | }
1644 | },
1645 | "node_modules/supports-color": {
1646 | "version": "5.5.0",
1647 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1648 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1649 | "dependencies": {
1650 | "has-flag": "^3.0.0"
1651 | },
1652 | "engines": {
1653 | "node": ">=4"
1654 | }
1655 | },
1656 | "node_modules/tar": {
1657 | "version": "6.1.13",
1658 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz",
1659 | "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==",
1660 | "dependencies": {
1661 | "chownr": "^2.0.0",
1662 | "fs-minipass": "^2.0.0",
1663 | "minipass": "^4.0.0",
1664 | "minizlib": "^2.1.1",
1665 | "mkdirp": "^1.0.3",
1666 | "yallist": "^4.0.0"
1667 | },
1668 | "engines": {
1669 | "node": ">=10"
1670 | }
1671 | },
1672 | "node_modules/to-regex-range": {
1673 | "version": "5.0.1",
1674 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1675 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1676 | "dependencies": {
1677 | "is-number": "^7.0.0"
1678 | },
1679 | "engines": {
1680 | "node": ">=8.0"
1681 | }
1682 | },
1683 | "node_modules/toidentifier": {
1684 | "version": "1.0.1",
1685 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
1686 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
1687 | "engines": {
1688 | "node": ">=0.6"
1689 | }
1690 | },
1691 | "node_modules/touch": {
1692 | "version": "3.1.0",
1693 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
1694 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
1695 | "dependencies": {
1696 | "nopt": "~1.0.10"
1697 | },
1698 | "bin": {
1699 | "nodetouch": "bin/nodetouch.js"
1700 | }
1701 | },
1702 | "node_modules/tr46": {
1703 | "version": "3.0.0",
1704 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
1705 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
1706 | "dependencies": {
1707 | "punycode": "^2.1.1"
1708 | },
1709 | "engines": {
1710 | "node": ">=12"
1711 | }
1712 | },
1713 | "node_modules/type-is": {
1714 | "version": "1.6.18",
1715 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1716 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1717 | "dependencies": {
1718 | "media-typer": "0.3.0",
1719 | "mime-types": "~2.1.24"
1720 | },
1721 | "engines": {
1722 | "node": ">= 0.6"
1723 | }
1724 | },
1725 | "node_modules/undefsafe": {
1726 | "version": "2.0.5",
1727 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz",
1728 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA=="
1729 | },
1730 | "node_modules/unpipe": {
1731 | "version": "1.0.0",
1732 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1733 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==",
1734 | "engines": {
1735 | "node": ">= 0.8"
1736 | }
1737 | },
1738 | "node_modules/util-deprecate": {
1739 | "version": "1.0.2",
1740 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1741 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
1742 | },
1743 | "node_modules/utils-merge": {
1744 | "version": "1.0.1",
1745 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1746 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==",
1747 | "engines": {
1748 | "node": ">= 0.4.0"
1749 | }
1750 | },
1751 | "node_modules/vary": {
1752 | "version": "1.1.2",
1753 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1754 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==",
1755 | "engines": {
1756 | "node": ">= 0.8"
1757 | }
1758 | },
1759 | "node_modules/webidl-conversions": {
1760 | "version": "7.0.0",
1761 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
1762 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
1763 | "engines": {
1764 | "node": ">=12"
1765 | }
1766 | },
1767 | "node_modules/whatwg-url": {
1768 | "version": "11.0.0",
1769 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
1770 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
1771 | "dependencies": {
1772 | "tr46": "^3.0.0",
1773 | "webidl-conversions": "^7.0.0"
1774 | },
1775 | "engines": {
1776 | "node": ">=12"
1777 | }
1778 | },
1779 | "node_modules/wide-align": {
1780 | "version": "1.1.5",
1781 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz",
1782 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==",
1783 | "dependencies": {
1784 | "string-width": "^1.0.2 || 2 || 3 || 4"
1785 | }
1786 | },
1787 | "node_modules/wrappy": {
1788 | "version": "1.0.2",
1789 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1790 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
1791 | },
1792 | "node_modules/yallist": {
1793 | "version": "4.0.0",
1794 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
1795 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A=="
1796 | }
1797 | }
1798 | }
1799 |
--------------------------------------------------------------------------------