├── .gitignore ├── frontend ├── postcss.config.js ├── src │ ├── index.css │ ├── components │ │ ├── ui │ │ │ ├── Container.jsx │ │ │ ├── Card.jsx │ │ │ ├── index.js │ │ │ ├── Label.jsx │ │ │ ├── Input.jsx │ │ │ ├── Textarea.jsx │ │ │ └── Button.jsx │ │ ├── ProtectedRoute.jsx │ │ ├── navbar │ │ │ ├── navigation.jsx │ │ │ └── Navbar.jsx │ │ └── tasks │ │ │ └── TaskCard.jsx │ ├── api │ │ ├── axios.js │ │ └── tasks.api.js │ ├── pages │ │ ├── ProfilePage.jsx │ │ ├── NotFound.jsx │ │ ├── HomePage.jsx │ │ ├── TasksPage.jsx │ │ ├── AboutPage.jsx │ │ ├── LoginPage.jsx │ │ ├── TaskFormPage.jsx │ │ └── RegisterPage.jsx │ ├── main.jsx │ ├── context │ │ ├── TaskContext.jsx │ │ └── AuthContext.jsx │ ├── App.jsx │ └── assets │ │ └── react.svg ├── vite.config.js ├── tailwind.config.js ├── .gitignore ├── index.html ├── package.json ├── public │ └── vite.svg └── package-lock.json ├── src ├── index.js ├── libs │ └── jwt.js ├── middlewares │ ├── validate.middleware.js │ └── auth.middleware.js ├── db.js ├── config.js ├── routes │ ├── auth.routes.js │ └── tasks.routes.js ├── schemas │ ├── task.schema.js │ └── auth.schema.js ├── app.js └── controllers │ ├── tasks.controller.js │ └── auth.controller.js ├── database └── init.sql ├── package.json └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /frontend/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /frontend/src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | body { 6 | background: #101010; 7 | color: white; 8 | } -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import app from "./app.js"; 2 | import { PORT } from "./config.js"; 3 | 4 | app.listen(PORT); 5 | console.log("Server on port", PORT); 6 | -------------------------------------------------------------------------------- /frontend/vite.config.js: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react' 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | plugins: [react()], 7 | }) 8 | -------------------------------------------------------------------------------- /frontend/src/components/ui/Container.jsx: -------------------------------------------------------------------------------- 1 | export function Container({ children, className }) { 2 | return
{children}
; 3 | } 4 | 5 | export default Container; 6 | -------------------------------------------------------------------------------- /frontend/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: ["./index.html", "./src/**/*.{js,ts,jsx,tsx}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | plugins: [], 8 | }; 9 | -------------------------------------------------------------------------------- /frontend/src/components/ui/Card.jsx: -------------------------------------------------------------------------------- 1 | export function Card({ children, className }) { 2 | return ( 3 |
{children}
4 | ); 5 | } 6 | 7 | export default Card; 8 | -------------------------------------------------------------------------------- /frontend/src/components/ui/index.js: -------------------------------------------------------------------------------- 1 | export { Button } from "./Button"; 2 | export { Card } from "./Card"; 3 | export { Input } from "./Input"; 4 | export { Label } from "./Label"; 5 | export { Container } from "./Container"; 6 | export { Textarea } from "./Textarea"; 7 | -------------------------------------------------------------------------------- /frontend/src/api/axios.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | 3 | const baseURL = import.meta.env.VITE_BACKEND || "http://localhost:3000/api"; 4 | 5 | const client = axios.create({ 6 | baseURL, 7 | withCredentials: true, 8 | }); 9 | 10 | export default client; 11 | -------------------------------------------------------------------------------- /frontend/src/components/ProtectedRoute.jsx: -------------------------------------------------------------------------------- 1 | import { Navigate, Outlet } from "react-router-dom"; 2 | 3 | export const ProtectedRoute = ({ redirectTo, isAllowed, children }) => { 4 | 5 | if (!isAllowed) return ; 6 | 7 | return children ? children : ; 8 | }; 9 | -------------------------------------------------------------------------------- /frontend/src/components/ui/Label.jsx: -------------------------------------------------------------------------------- 1 | export function Label({ children, htmlFor }) { 2 | return ( 3 | 9 | ); 10 | } 11 | 12 | export default Label; 13 | -------------------------------------------------------------------------------- /frontend/src/pages/ProfilePage.jsx: -------------------------------------------------------------------------------- 1 | import { useAuth } from "../context/AuthContext"; 2 | 3 | function ProfilePage() { 4 | const { user } = useAuth(); 5 | 6 | return ( 7 |
8 |
{JSON.stringify(user, null, 2)}
9 |
10 | ); 11 | } 12 | 13 | export default ProfilePage; 14 | -------------------------------------------------------------------------------- /frontend/src/components/ui/Input.jsx: -------------------------------------------------------------------------------- 1 | import { forwardRef } from "react"; 2 | 3 | export const Input = forwardRef((props, ref) => { 4 | return ( 5 | 11 | ); 12 | }); 13 | 14 | export default Input; 15 | -------------------------------------------------------------------------------- /frontend/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /frontend/src/components/ui/Textarea.jsx: -------------------------------------------------------------------------------- 1 | import { forwardRef } from "react"; 2 | 3 | export const Textarea = forwardRef((props, ref) => { 4 | return ( 5 | 12 | ); 13 | }); 14 | 15 | export default Textarea; 16 | -------------------------------------------------------------------------------- /src/libs/jwt.js: -------------------------------------------------------------------------------- 1 | import jwt from "jsonwebtoken"; 2 | 3 | export const createAccessToken = (payload) => { 4 | return new Promise((resolve, reject) => { 5 | jwt.sign( 6 | payload, 7 | "xyz123", 8 | { 9 | expiresIn: "1d", 10 | }, 11 | (err, token) => { 12 | if (err) reject(err); 13 | resolve(token); 14 | } 15 | ); 16 | }); 17 | }; 18 | -------------------------------------------------------------------------------- /frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/middlewares/validate.middleware.js: -------------------------------------------------------------------------------- 1 | export const validateSchema = (schema) => async (req, res, next) => { 2 | try { 3 | await schema.parse(req.body); 4 | next(); 5 | } catch (error) { 6 | if (Array.isArray(error.errors)) { 7 | return res.status(400).json(error.errors.map((error) => error.message)); 8 | } 9 | 10 | return res.status(400).json(error.message); 11 | 12 | } 13 | }; 14 | -------------------------------------------------------------------------------- /src/db.js: -------------------------------------------------------------------------------- 1 | import { 2 | PG_DATABASE, 3 | PG_HOST, 4 | PG_PASSWORD, 5 | PG_PORT, 6 | PG_USER, 7 | } from "./config.js"; 8 | import pg from "pg"; 9 | 10 | export const pool = new pg.Pool({ 11 | port: PG_PORT, 12 | host: PG_HOST, 13 | user: PG_USER, 14 | password: PG_PASSWORD, 15 | database: PG_DATABASE, 16 | }); 17 | 18 | pool.on("connect", () => { 19 | console.log("Database connected"); 20 | }); 21 | -------------------------------------------------------------------------------- /frontend/src/api/tasks.api.js: -------------------------------------------------------------------------------- 1 | import axios from "./axios"; 2 | 3 | export const getAllTasksRequest = () => axios.get("/tasks"); 4 | 5 | export const createTaskRequest = (task) => axios.post("/tasks", task); 6 | 7 | export const deleteTaskRequest = (id) => axios.delete(`/tasks/${id}`); 8 | 9 | export const getTaskRequest = (id) => axios.get(`/tasks/${id}`); 10 | 11 | export const updateTaskRequest = (id, task) => axios.put(`/tasks/${id}`, task); 12 | -------------------------------------------------------------------------------- /src/config.js: -------------------------------------------------------------------------------- 1 | export const PORT = process.env.PORT || 3000; 2 | 3 | export const PG_PORT = process.env.PG_PORT || 5432; 4 | export const PG_HOST = process.env.PG_HOST || "localhost"; 5 | export const PG_USER = process.env.PG_USER || "postgres"; 6 | export const PG_PASSWORD = process.env.PG_PASSWORD || "mysecretpassword"; 7 | export const PG_DATABASE = process.env.PG_DATABASE || "tasksdb"; 8 | 9 | export const ORIGIN = process.env.ORIGIN || "http://localhost:5173"; -------------------------------------------------------------------------------- /frontend/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom/client"; 3 | import { BrowserRouter } from "react-router-dom"; 4 | import { AuthProvider } from "./context/AuthContext"; 5 | import App from "./App"; 6 | import "./index.css"; 7 | 8 | ReactDOM.createRoot(document.getElementById("root")).render( 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | ); 17 | -------------------------------------------------------------------------------- /frontend/src/pages/NotFound.jsx: -------------------------------------------------------------------------------- 1 | import { Link } from "react-router-dom"; 2 | import { Card } from "../components/ui"; 3 | 4 | function NotFound() { 5 | return ( 6 |
7 | 8 |

Page Not Found

9 |

404

10 | 11 | Go back to home 12 |
13 |
14 | ); 15 | } 16 | 17 | export default NotFound; 18 | -------------------------------------------------------------------------------- /src/middlewares/auth.middleware.js: -------------------------------------------------------------------------------- 1 | import jwt from "jsonwebtoken"; 2 | 3 | export const isAuth = (req, res, next) => { 4 | const token = req.cookies.token; 5 | 6 | if (!token) { 7 | return res.status(401).json({ 8 | message: "No estas autorizado", 9 | }); 10 | } 11 | 12 | jwt.verify(token, "xyz123", (err, decoded) => { 13 | if (err) 14 | return res.status(401).json({ 15 | message: "No estas autorizado", 16 | }); 17 | 18 | req.userId = decoded.id; 19 | 20 | next(); 21 | }); 22 | }; 23 | -------------------------------------------------------------------------------- /frontend/src/components/ui/Button.jsx: -------------------------------------------------------------------------------- 1 | export function Button({ children, className, ...props }) { 2 | return ( 3 | 9 | ); 10 | } 11 | 12 | export default Button; 13 | -------------------------------------------------------------------------------- /database/init.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE task( 2 | id SERIAL PRIMARY KEY, 3 | title VARCHAR(255) UNIQUE NOT NULL, 4 | description TEXT 5 | ); 6 | 7 | ALTER TABLE task ADD COLUMN user_id INTEGER REFERENCES users(id); 8 | 9 | -- remove unique from title 10 | ALTER TABLE task DROP CONSTRAINT task_title_key; 11 | 12 | CREATE TABLE users ( 13 | id SERIAL PRIMARY KEY, 14 | name VARCHAR(255) NOT NULL, 15 | password VARCHAR(255) NOT NULL, 16 | email VARCHAR(255) UNIQUE NOT NULL, 17 | created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 18 | updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP 19 | ); 20 | 21 | ALTER TABLE users ADD COLUMN gravatar VARCHAR(255); -------------------------------------------------------------------------------- /src/routes/auth.routes.js: -------------------------------------------------------------------------------- 1 | import Router from "express-promise-router"; 2 | import { 3 | profile, 4 | signin, 5 | signout, 6 | signup, 7 | } from "../controllers/auth.controller.js"; 8 | import { isAuth } from "../middlewares/auth.middleware.js"; 9 | import { validateSchema } from "../middlewares/validate.middleware.js"; 10 | import { signinSchema, signupSchema } from "../schemas/auth.schema.js"; 11 | 12 | const router = Router(); 13 | 14 | router.post("/signin", validateSchema(signinSchema), signin); 15 | 16 | router.post("/signup", validateSchema(signupSchema), signup); 17 | 18 | router.post("/signout", signout); 19 | 20 | router.get("/profile", isAuth, profile); 21 | 22 | export default router; 23 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "pern-tasks", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "src/index.js", 6 | "type": "module", 7 | "scripts": { 8 | "dev": "nodemon .", 9 | "start": "node ." 10 | }, 11 | "keywords": [], 12 | "author": "", 13 | "license": "ISC", 14 | "dependencies": { 15 | "bcrypt": "^5.1.0", 16 | "cookie-parser": "^1.4.6", 17 | "cors": "^2.8.5", 18 | "express": "^4.18.2", 19 | "express-promise-router": "^4.1.1", 20 | "jsonwebtoken": "^9.0.0", 21 | "md5": "^2.3.0", 22 | "morgan": "^1.10.0", 23 | "pg": "^8.11.1", 24 | "zod": "^3.21.4" 25 | }, 26 | "devDependencies": { 27 | "eslint": "^8.44.0", 28 | "nodemon": "^2.0.22" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /frontend/src/pages/HomePage.jsx: -------------------------------------------------------------------------------- 1 | import { useAuth } from "../context/AuthContext"; 2 | import { Card } from "../components/ui"; 3 | 4 | function HomePage() { 5 | const data = useAuth(); 6 | console.log(data); 7 | 8 | return
9 | 10 | 11 |

Home Page

12 |

Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laudantium hic necessitatibus laborum aperiam repellendus, id facilis vero ea dignissimos, qui omnis provident doloremque. Eius cumque commodi doloribus! Illum libero neque mollitia rem, blanditiis odio minima quos fugiat nesciunt possimus reprehenderit?

13 |
14 | 15 |
; 16 | } 17 | 18 | export default HomePage; 19 | -------------------------------------------------------------------------------- /frontend/src/components/navbar/navigation.jsx: -------------------------------------------------------------------------------- 1 | import {MdTaskAlt} from 'react-icons/md' 2 | import {BiTask, BiUserCircle} from 'react-icons/bi' 3 | 4 | export const publicRoutes = [ 5 | { 6 | name: "About", 7 | path: "/about", 8 | }, 9 | { 10 | name: "Login", 11 | path: "/login", 12 | }, 13 | { 14 | name: "Register", 15 | path: "/register", 16 | }, 17 | ] 18 | 19 | export const privateRoutes = [ 20 | { 21 | name: "Tasks", 22 | path: "/tasks", 23 | icon: , 24 | }, 25 | { 26 | name: "Add", 27 | path: "/tasks/new", 28 | icon: , 29 | }, 30 | { 31 | name: "Profile", 32 | path: "/profile", 33 | icon: , 34 | }, 35 | ]; -------------------------------------------------------------------------------- /frontend/src/pages/TasksPage.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect } from "react"; 2 | import TaskCard from "../components/tasks/TaskCard"; 3 | import { useTasks } from "../context/TaskContext"; 4 | 5 | function TasksPage() { 6 | const { tasks, loadTasks } = useTasks(); 7 | 8 | useEffect(() => { 9 | loadTasks(); 10 | }, []); 11 | 12 | if (tasks.length === 0) return ( 13 |
14 |

No tasks found

15 |
16 | ) 17 | 18 | return ( 19 |
20 | {tasks.map((task) => ( 21 | 22 | ))} 23 |
24 | ); 25 | } 26 | 27 | export default TasksPage; 28 | -------------------------------------------------------------------------------- /src/routes/tasks.routes.js: -------------------------------------------------------------------------------- 1 | import Router from "express-promise-router"; 2 | import { 3 | createTask, 4 | deleteTask, 5 | getAllTasks, 6 | getTask, 7 | updateTask, 8 | } from "../controllers/tasks.controller.js"; 9 | import { isAuth } from "../middlewares/auth.middleware.js"; 10 | import { validateSchema } from "../middlewares/validate.middleware.js"; 11 | import { createTaskSchema, updateTaskSchema } from "../schemas/task.schema.js"; 12 | 13 | const router = Router(); 14 | 15 | router.get("/tasks", isAuth, getAllTasks); 16 | 17 | router.get("/tasks/:id", isAuth, getTask); 18 | 19 | router.post("/tasks", isAuth, validateSchema(createTaskSchema), createTask); 20 | 21 | router.put("/tasks/:id", isAuth, validateSchema(updateTaskSchema), updateTask); 22 | 23 | router.delete("/tasks/:id", isAuth, deleteTask); 24 | 25 | export default router; 26 | -------------------------------------------------------------------------------- /frontend/src/pages/AboutPage.jsx: -------------------------------------------------------------------------------- 1 | function AboutPage() { 2 | return ( 3 |
4 |

About Us

5 |

Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laudantium hic necessitatibus laborum aperiam repellendus, id facilis vero ea dignissimos, qui omnis provident doloremque. Eius cumque commodi doloribus! Illum libero neque mollitia rem, blanditiis odio minima quos fugiat nesciunt possimus reprehenderit?

6 |

Lorem ipsum dolor sit, amet consectetur adipisicing elit. Laudantium hic necessitatibus laborum aperiam repellendus, id facilis vero ea dignissimos, qui omnis provident doloremque. Eius cumque commodi doloribus! Illum libero neque mollitia rem, blanditiis odio minima quos fugiat nesciunt possimus reprehenderit?

7 |
8 | ) 9 | } 10 | 11 | export default AboutPage -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "preview": "vite preview", 10 | "start": "serve dist -p $PORT" 11 | }, 12 | "dependencies": { 13 | "axios": "^1.4.0", 14 | "js-cookie": "^3.0.5", 15 | "react": "^18.2.0", 16 | "react-dom": "^18.2.0", 17 | "react-hook-form": "^7.45.1", 18 | "react-icons": "^4.10.1", 19 | "react-router-dom": "^6.14.1", 20 | "serve": "^14.2.0", 21 | "tailwind-merge": "^1.14.0" 22 | }, 23 | "devDependencies": { 24 | "@types/react": "^18.0.26", 25 | "@types/react-dom": "^18.0.9", 26 | "@vitejs/plugin-react": "^3.0.0", 27 | "autoprefixer": "^10.4.14", 28 | "postcss": "^8.4.24", 29 | "tailwindcss": "^3.3.2", 30 | "vite": "^4.0.0" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/schemas/task.schema.js: -------------------------------------------------------------------------------- 1 | import { z } from "zod"; 2 | 3 | export const createTaskSchema = z.object({ 4 | title: z 5 | .string({ 6 | required_error: "El titulo es requerido", 7 | invalid_type_error: "El titulo debe ser un texto", 8 | }) 9 | .min(1) 10 | .max(255), 11 | description: z 12 | .string({ 13 | required_error: "La descripcion es requerida", 14 | invalid_type_error: "La descripcion debe ser un texto", 15 | }) 16 | .min(1) 17 | .max(255) 18 | .optional(), 19 | }); 20 | 21 | export const updateTaskSchema = z.object({ 22 | title: z 23 | .string({ 24 | required_error: "El titulo es requerido", 25 | invalid_type_error: "El titulo debe ser un texto", 26 | }) 27 | .min(1) 28 | .max(255).optional(), 29 | description: z 30 | .string({ 31 | required_error: "La descripcion es requerida", 32 | invalid_type_error: "La descripcion debe ser un texto", 33 | }) 34 | .min(1) 35 | .max(255) 36 | .optional(), 37 | }); 38 | 39 | 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PERN Tasks 2 | 3 | PERN Tasks is a robust task management application crafted with the PERN technology stack, which integrates PostgreSQL, Express, React, and Node.js. This web application provides a user-friendly interface for creating, managing, and organizing tasks. 4 | 5 | **Features** 6 | 1. User-friendly interface 7 | 2. Add, edit, and delete tasks (CRUD) 8 | 9 | **Technologies** 10 | 1. PostgreSQL - for database management 11 | 2. Express - as the back-end web application framework 12 | 3. React - for building interactive user interfaces 13 | 4. Node.js - as the JavaScript runtime environment 14 | 15 | ## Installation 16 | 17 | You need to have Node.js and npm installed on your PC to run this app. If you don't have it yet, you can download it from here: [Node.js official site](https://nodejs.org/en/download/). 18 | 19 | Clone the repository: 20 | 21 | ```bash 22 | git clone https://github.com/fazt/pern-tasks.git 23 | cd pern-tasks 24 | npm install 25 | npm start 26 | ``` 27 | 28 | ### Next Features in other version 29 | 30 | 1. Search and filter tasks 31 | 1. Prioritize tasks 32 | 1. Set due dates for tasks 33 | -------------------------------------------------------------------------------- /src/app.js: -------------------------------------------------------------------------------- 1 | import express from "express"; 2 | import morgan from "morgan"; 3 | import cookieParser from "cookie-parser"; 4 | import cors from "cors"; 5 | 6 | import taskRoutes from "./routes/tasks.routes.js"; 7 | import authRoutes from "./routes/auth.routes.js"; 8 | import { ORIGIN } from "./config.js"; 9 | import { pool } from "./db.js"; 10 | 11 | const app = express(); 12 | 13 | // Middlewares 14 | app.use( 15 | cors({ 16 | origin: ORIGIN, 17 | credentials: true, 18 | }) 19 | ); 20 | app.use(morgan("dev")); 21 | app.use(cookieParser()); 22 | app.use(express.json()); 23 | app.use(express.urlencoded({ extended: false })); 24 | 25 | // Routes 26 | app.get("/", (req, res) => res.json({ message: "welcome to my API" })); 27 | app.get("/api/ping", async (req, res) => { 28 | const result = await pool.query("SELECT NOW()"); 29 | return res.json(result.rows[0]); 30 | }); 31 | app.use("/api", taskRoutes); 32 | app.use("/api", authRoutes); 33 | 34 | // Error Hander 35 | app.use((err, req, res, next) => { 36 | res.status(500).json({ 37 | status: "error", 38 | message: err.message, 39 | }); 40 | }); 41 | 42 | export default app; 43 | -------------------------------------------------------------------------------- /frontend/src/components/tasks/TaskCard.jsx: -------------------------------------------------------------------------------- 1 | import { Card, Button } from "../ui"; 2 | import { useTasks } from "../../context/TaskContext"; 3 | import { useNavigate } from "react-router-dom"; 4 | import { PiTrashSimpleLight } from "react-icons/pi"; 5 | import { BiPencil } from "react-icons/bi"; 6 | 7 | function TaskCard({ task }) { 8 | const { deleteTask } = useTasks(); 9 | const navigate = useNavigate(); 10 | 11 | return ( 12 | 13 |
14 |

{task.title}

15 |

{task.description}

16 |
17 |
18 | 22 | 33 |
34 |
35 | ); 36 | } 37 | 38 | export default TaskCard; 39 | -------------------------------------------------------------------------------- /src/schemas/auth.schema.js: -------------------------------------------------------------------------------- 1 | import {z} from 'zod' 2 | 3 | export const signupSchema = z.object({ 4 | name: z.string({ 5 | required_error: 'El nombre es requerido', 6 | invalid_type_error: 'El nombre debe ser un texto' 7 | }).min(1).max(255), 8 | email: z.string({ 9 | required_error: 'El email es requerido', 10 | invalid_type_error: 'El email debe ser un texto' 11 | }).email({ 12 | message: 'El email debe ser un email valido' 13 | }), 14 | password: z.string({ 15 | required_error: 'La contraseña es requerida', 16 | invalid_type_error: 'La contraseña debe ser un texto' 17 | }).min(6, { 18 | message: 'La contraseña debe tener al menos 6 caracteres' 19 | }).max(255) 20 | }) 21 | 22 | export const signinSchema = z.object({ 23 | email: z.string({ 24 | required_error: 'El email es requerido', 25 | invalid_type_error: 'El email debe ser un texto' 26 | }).email({ 27 | message: 'El email debe ser un email valido' 28 | }), 29 | password: z.string({ 30 | required_error: 'La contraseña es requerida', 31 | invalid_type_error: 'La contraseña debe ser un texto' 32 | }).min(6, { 33 | message: 'La contraseña debe tener al menos 6 caracteres' 34 | }).max(255, { 35 | message: 'La contraseña debe tener como maximo 255 caracteres' 36 | }) 37 | }) -------------------------------------------------------------------------------- /frontend/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /src/controllers/tasks.controller.js: -------------------------------------------------------------------------------- 1 | import { pool } from "../db.js"; 2 | 3 | export const getAllTasks = async (req, res, next) => { 4 | const result = await pool.query("SELECT * FROM task WHERE user_id = $1", [ 5 | req.userId, 6 | ]); 7 | return res.json(result.rows); 8 | }; 9 | 10 | export const getTask = async (req, res) => { 11 | const result = await pool.query("SELECT * FROM task WHERE id = $1", [ 12 | req.params.id, 13 | ]); 14 | 15 | if (result.rowCount === 0) { 16 | return res.status(404).json({ 17 | message: "No existe una tarea con ese id", 18 | }); 19 | } 20 | 21 | return res.json(result.rows[0]); 22 | }; 23 | 24 | export const createTask = async (req, res, next) => { 25 | const { title, description } = req.body; 26 | 27 | try { 28 | const result = await pool.query( 29 | "INSERT INTO task (title, description, user_id) VALUES ($1, $2, $3) RETURNING *", 30 | [title, description, req.userId] 31 | ); 32 | 33 | res.json(result.rows[0]); 34 | } catch (error) { 35 | if (error.code === "23505") { 36 | return res.status(409).json({ 37 | message: "Ya existe una tarea con ese titulo", 38 | }); 39 | } 40 | next(error); 41 | } 42 | }; 43 | 44 | export const updateTask = async (req, res) => { 45 | const id = req.params.id; 46 | const { title, description } = req.body; 47 | 48 | const result = await pool.query( 49 | "UPDATE task SET title = $1, description = $2 WHERE id = $3 RETURNING *", 50 | [title, description, id] 51 | ); 52 | 53 | if (result.rowCount === 0) { 54 | return res.status(404).json({ 55 | message: "No existe una tarea con ese id", 56 | }); 57 | } 58 | 59 | return res.json(result.rows[0]); 60 | }; 61 | 62 | export const deleteTask = async (req, res) => { 63 | const result = await pool.query("DELETE FROM task WHERE id = $1", [ 64 | req.params.id, 65 | ]); 66 | 67 | if (result.rowCount === 0) { 68 | return res.status(404).json({ 69 | message: "No existe una tarea con ese id", 70 | }); 71 | } 72 | 73 | return res.sendStatus(204); 74 | }; 75 | -------------------------------------------------------------------------------- /frontend/src/context/TaskContext.jsx: -------------------------------------------------------------------------------- 1 | import { createContext, useState, useContext } from "react"; 2 | import { 3 | getAllTasksRequest, 4 | deleteTaskRequest, 5 | createTaskRequest, 6 | getTaskRequest, 7 | updateTaskRequest, 8 | } from "../api/tasks.api"; 9 | 10 | const TaskContext = createContext(); 11 | 12 | export const useTasks = () => { 13 | const context = useContext(TaskContext); 14 | if (!context) { 15 | throw new Error("useTasks debe estar dentro del proveedor TaskProvider"); 16 | } 17 | return context; 18 | }; 19 | 20 | export const TaskProvider = ({ children }) => { 21 | const [tasks, setTasks] = useState([]); 22 | const [errors, setErrors] = useState([]); 23 | 24 | const loadTasks = async () => { 25 | const res = await getAllTasksRequest(); 26 | setTasks(res.data); 27 | }; 28 | 29 | const loadTask = async (id) => { 30 | const res = await getTaskRequest(id); 31 | return res.data; 32 | }; 33 | 34 | const createTask = async (task) => { 35 | try { 36 | const res = await createTaskRequest(task); 37 | setTasks([...tasks, res.data]); 38 | return res.data; 39 | } catch (error) { 40 | if (error.response) { 41 | setErrors([error.response.data.message]); 42 | } 43 | } 44 | }; 45 | 46 | const deleteTask = async (id) => { 47 | const res = await deleteTaskRequest(id); 48 | if (res.status === 204) { 49 | setTasks(tasks.filter((task) => task.id !== id)); 50 | } 51 | }; 52 | 53 | const updateTask = async (id, task) => { 54 | try { 55 | const res = await updateTaskRequest(id, task); 56 | return res.data; 57 | } catch (error) { 58 | if (error.response) { 59 | setErrors([error.response.data.message]); 60 | } 61 | } 62 | }; 63 | 64 | return ( 65 | 76 | {children} 77 | 78 | ); 79 | }; 80 | -------------------------------------------------------------------------------- /frontend/src/App.jsx: -------------------------------------------------------------------------------- 1 | import { Routes, Route, Outlet } from "react-router-dom"; 2 | 3 | import { useAuth } from "./context/AuthContext"; 4 | import { TaskProvider } from "./context/TaskContext"; 5 | 6 | import Navbar from "./components/navbar/Navbar"; 7 | import { Container } from "./components/ui"; 8 | import { ProtectedRoute } from "./components/ProtectedRoute"; 9 | 10 | import HomePage from "./pages/HomePage"; 11 | import AboutPage from "./pages/AboutPage"; 12 | import LoginPage from "./pages/LoginPage"; 13 | import RegisterPage from "./pages/RegisterPage"; 14 | import TasksPage from "./pages/TasksPage"; 15 | import TaskFormPage from "./pages/TaskFormPage"; 16 | import ProfilePage from "./pages/ProfilePage"; 17 | import NotFound from "./pages/NotFound"; 18 | 19 | function App() { 20 | const { isAuth, loading } = useAuth(); 21 | console.log(loading) 22 | 23 | if (loading) return

24 | Cargando... 25 |

26 | 27 | return ( 28 | <> 29 | 30 | 31 | 32 | 33 | } 35 | > 36 | } /> 37 | } /> 38 | } /> 39 | } /> 40 | 41 | 42 | } 44 | > 45 | 48 | 49 | 50 | } 51 | > 52 | } /> 53 | } /> 54 | } /> 55 | 56 | 57 | } /> 58 | 59 | 60 | } /> 61 | 62 | 63 | 64 | ); 65 | } 66 | 67 | export default App; 68 | -------------------------------------------------------------------------------- /frontend/src/pages/LoginPage.jsx: -------------------------------------------------------------------------------- 1 | import { Card, Input, Button, Label, Container } from "../components/ui"; 2 | import { Link, useNavigate } from "react-router-dom"; 3 | import { useForm } from "react-hook-form"; 4 | import { useAuth } from "../context/AuthContext"; 5 | 6 | function LoginPage() { 7 | const { 8 | register, 9 | handleSubmit, 10 | formState: { errors }, 11 | } = useForm(); 12 | const { signin, errors: loginErrors } = useAuth(); 13 | const navigate = useNavigate(); 14 | 15 | const onSubmit = handleSubmit(async (data) => { 16 | const user = await signin(data); 17 | 18 | if (user) navigate("/tasks"); 19 | }); 20 | 21 | return ( 22 | 23 | 24 | {loginErrors && 25 | loginErrors.map((err) => ( 26 |

{err}

27 | ))} 28 | 29 |

Sign in

30 | 31 |
32 | 33 | 40 | {errors.email &&

Email is required

} 41 | 42 | 43 | 50 | {errors.password && ( 51 |

Password is required

52 | )} 53 | 54 | 55 | 56 |
57 |

Don't have an account?

58 | 59 | Register 60 | 61 |
62 |
63 |
64 |
65 | ); 66 | } 67 | 68 | export default LoginPage; 69 | -------------------------------------------------------------------------------- /src/controllers/auth.controller.js: -------------------------------------------------------------------------------- 1 | import bcrypt from "bcrypt"; 2 | import { pool } from "../db.js"; 3 | import { createAccessToken } from "../libs/jwt.js"; 4 | import md5 from 'md5' 5 | 6 | export const signin = async (req, res) => { 7 | const { email, password } = req.body; 8 | 9 | const result = await pool.query("SELECT * FROM users WHERE email = $1", [ 10 | email, 11 | ]); 12 | 13 | if (result.rowCount === 0) { 14 | return res.status(400).json({ 15 | message: "El correo no esta registrado", 16 | }); 17 | } 18 | 19 | const validPassword = await bcrypt.compare(password, result.rows[0].password); 20 | 21 | if (!validPassword) { 22 | return res.status(400).json({ 23 | message: "La contraseña es incorrecta", 24 | }); 25 | } 26 | 27 | const token = await createAccessToken({ id: result.rows[0].id }); 28 | 29 | res.cookie("token", token, { 30 | // httpOnly: true, 31 | secure: true, 32 | sameSite: "none", 33 | maxAge: 24 * 60 * 60 * 1000, // 1 day 34 | }); 35 | 36 | return res.json(result.rows[0]); 37 | }; 38 | 39 | export const signup = async (req, res, next) => { 40 | const { name, email, password } = req.body; 41 | 42 | try { 43 | const hashedPassword = await bcrypt.hash(password, 10); 44 | const gravatar = `https://www.gravatar.com/avatar/${md5(email)}`; 45 | 46 | const result = await pool.query( 47 | "INSERT INTO users(name, email, password, gravatar) VALUES($1, $2, $3, $4) Returning *", 48 | [name, email, hashedPassword, gravatar] 49 | ); 50 | 51 | const token = await createAccessToken({ id: result.rows[0].id }); 52 | 53 | res.cookie("token", token, { 54 | // httpOnly: true, 55 | secure: true, 56 | sameSite: "none", 57 | maxAge: 24 * 60 * 60 * 1000, // 1 day 58 | }); 59 | 60 | return res.json(result.rows[0]); 61 | } catch (error) { 62 | if (error.code === "23505") { 63 | return res.status(400).json({ 64 | message: "El correo ya esta registrado", 65 | }); 66 | } 67 | 68 | next(error); 69 | } 70 | }; 71 | 72 | export const signout = (req, res) => { 73 | res.clearCookie('token'); 74 | res.sendStatus(200); 75 | } 76 | 77 | export const profile = async (req, res) => { 78 | const result = await pool.query('SELECT * FROM users WHERE id = $1', [req.userId]); 79 | return res.json(result.rows[0]); 80 | } 81 | -------------------------------------------------------------------------------- /frontend/src/pages/TaskFormPage.jsx: -------------------------------------------------------------------------------- 1 | import { Card, Input, Textarea, Label, Button } from "../components/ui"; 2 | import { useForm } from "react-hook-form"; 3 | import { useNavigate, useParams } from "react-router-dom"; 4 | import { useEffect } from "react"; 5 | import { useTasks } from "../context/TaskContext"; 6 | 7 | function TaskFormPage() { 8 | const { 9 | register, 10 | handleSubmit, 11 | formState: { errors }, 12 | setValue, 13 | } = useForm(); 14 | const navigate = useNavigate(); 15 | const { createTask, updateTask, loadTask, errors: tasksErrors } = useTasks(); 16 | const params = useParams(); 17 | 18 | const onSubmit = handleSubmit(async (data) => { 19 | let task; 20 | 21 | if (!params.id) { 22 | task = await createTask(data); 23 | } else { 24 | task = await updateTask(params.id, data) 25 | } 26 | 27 | if (task) { 28 | navigate("/tasks"); 29 | } 30 | }); 31 | 32 | useEffect(() => { 33 | if (params.id) { 34 | loadTask(params.id).then((task) => { 35 | setValue("title", task.title); 36 | setValue("description", task.description); 37 | }); 38 | } 39 | }, []); 40 | 41 | return ( 42 |
43 | 44 | {tasksErrors.map((error, i) => ( 45 |

46 | {error} 47 |

48 | ))} 49 |

50 | {params.id ? "Edit Task" : "Create Task"} 51 |

52 |
53 | 54 | 62 | {errors.title && ( 63 | Title is required 64 | )} 65 | 66 | 67 | 72 | 73 | 74 |
75 |
76 |
77 | ); 78 | } 79 | 80 | export default TaskFormPage; 81 | -------------------------------------------------------------------------------- /frontend/src/pages/RegisterPage.jsx: -------------------------------------------------------------------------------- 1 | import { Button, Card, Container, Input, Label } from "../components/ui"; 2 | import { useForm } from "react-hook-form"; 3 | import { Link, useNavigate } from "react-router-dom"; 4 | import { useAuth } from "../context/AuthContext"; 5 | 6 | function RegisterPage() { 7 | const { 8 | register, 9 | handleSubmit, 10 | formState: { errors }, 11 | } = useForm(); 12 | const { signup, errors: signupErrors } = useAuth(); 13 | const navigate = useNavigate(); 14 | 15 | const onSubmit = handleSubmit(async (data) => { 16 | const user = await signup(data); 17 | 18 | if (user) navigate("/tasks"); 19 | }); 20 | 21 | return ( 22 | 23 | 24 | {signupErrors && 25 | signupErrors.map((err) => ( 26 |

{err}

27 | ))} 28 | 29 |

Register

30 | 31 |
32 | 33 | 39 | 40 | {errors.name &&

name is required

} 41 | 42 | 43 | 50 | {errors.email &&

email is required

} 51 | 52 | 53 | 60 | {errors.password && ( 61 |

password is required

62 | )} 63 | 64 | 65 | 66 |
67 |

Already have an account?

68 | 69 | Login 70 | 71 |
72 |
73 |
74 |
75 | ); 76 | } 77 | 78 | export default RegisterPage; 79 | -------------------------------------------------------------------------------- /frontend/src/components/navbar/Navbar.jsx: -------------------------------------------------------------------------------- 1 | import { Link, useLocation } from "react-router-dom"; 2 | import { publicRoutes, privateRoutes } from "./navigation"; 3 | import { Container } from "../ui"; 4 | import { useAuth } from "../../context/AuthContext"; 5 | import { twMerge } from "tailwind-merge"; 6 | import { BiLogOut } from "react-icons/bi"; 7 | 8 | function Navbar() { 9 | const location = useLocation(); 10 | const { isAuth, signout, user } = useAuth(); 11 | 12 | return ( 13 | 73 | ); 74 | } 75 | 76 | export default Navbar; 77 | -------------------------------------------------------------------------------- /frontend/src/context/AuthContext.jsx: -------------------------------------------------------------------------------- 1 | import { createContext, useState, useContext, useEffect } from "react"; 2 | import Cookie from "js-cookie"; 3 | import axios from "../api/axios"; 4 | 5 | export const AuthContext = createContext(); 6 | 7 | export const useAuth = () => { 8 | const context = useContext(AuthContext); 9 | if (!context) { 10 | throw new Error("useAuth must be used within an AuthProvider"); 11 | } 12 | return context; 13 | }; 14 | 15 | export function AuthProvider({ children }) { 16 | const [user, setUser] = useState(null); 17 | const [isAuth, setIsAuth] = useState(false); 18 | const [errors, setErrors] = useState(null); 19 | const [loading, setLoading] = useState(true); 20 | 21 | const signin = async (data) => { 22 | try { 23 | const res = await axios.post("/signin", data); 24 | setUser(res.data); 25 | setIsAuth(true); 26 | 27 | return res.data; 28 | } catch (error) { 29 | if (Array.isArray(error.response.data)) { 30 | return setErrors(error.response.data); 31 | } 32 | 33 | setErrors([error.response.data.message]); 34 | } 35 | }; 36 | 37 | const signup = async (data) => { 38 | try { 39 | const res = await axios.post("/signup", data); 40 | setUser(res.data); 41 | setUser(res.data); 42 | setIsAuth(true); 43 | 44 | return res.data; 45 | } catch (error) { 46 | if (Array.isArray(error.response.data)) { 47 | return setErrors(error.response.data); 48 | } 49 | 50 | setErrors([error.response.data.message]); 51 | } 52 | }; 53 | 54 | const signout = async () => { 55 | await axios.post("/signout"); 56 | setUser(null); 57 | setIsAuth(false); 58 | }; 59 | 60 | useEffect(() => { 61 | setLoading(true); 62 | if (Cookie.get("token")) { 63 | axios 64 | .get("/profile") 65 | .then((res) => { 66 | setUser(res.data); 67 | setIsAuth(true); 68 | }) 69 | .catch((err) => { 70 | setUser(null); 71 | setIsAuth(false); 72 | }); 73 | } 74 | 75 | setLoading(false); 76 | }, []); 77 | 78 | useEffect(() => { 79 | const clean = setTimeout(() => { 80 | setErrors(null); 81 | }, 5000); 82 | 83 | return () => clearTimeout(clean); 84 | }, [errors]) 85 | 86 | return ( 87 | 98 | {children} 99 | 100 | ); 101 | } 102 | -------------------------------------------------------------------------------- /frontend/src/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "version": "0.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "frontend", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "axios": "^1.4.0", 12 | "js-cookie": "^3.0.5", 13 | "react": "^18.2.0", 14 | "react-dom": "^18.2.0", 15 | "react-hook-form": "^7.45.1", 16 | "react-icons": "^4.10.1", 17 | "react-router-dom": "^6.14.1", 18 | "serve": "^14.2.0", 19 | "tailwind-merge": "^1.14.0" 20 | }, 21 | "devDependencies": { 22 | "@types/react": "^18.0.26", 23 | "@types/react-dom": "^18.0.9", 24 | "@vitejs/plugin-react": "^3.0.0", 25 | "autoprefixer": "^10.4.14", 26 | "postcss": "^8.4.24", 27 | "tailwindcss": "^3.3.2", 28 | "vite": "^4.0.0" 29 | } 30 | }, 31 | "node_modules/@alloc/quick-lru": { 32 | "version": "5.2.0", 33 | "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", 34 | "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", 35 | "dev": true, 36 | "engines": { 37 | "node": ">=10" 38 | }, 39 | "funding": { 40 | "url": "https://github.com/sponsors/sindresorhus" 41 | } 42 | }, 43 | "node_modules/@ampproject/remapping": { 44 | "version": "2.2.1", 45 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", 46 | "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", 47 | "dev": true, 48 | "dependencies": { 49 | "@jridgewell/gen-mapping": "^0.3.0", 50 | "@jridgewell/trace-mapping": "^0.3.9" 51 | }, 52 | "engines": { 53 | "node": ">=6.0.0" 54 | } 55 | }, 56 | "node_modules/@babel/code-frame": { 57 | "version": "7.22.5", 58 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.5.tgz", 59 | "integrity": "sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==", 60 | "dev": true, 61 | "dependencies": { 62 | "@babel/highlight": "^7.22.5" 63 | }, 64 | "engines": { 65 | "node": ">=6.9.0" 66 | } 67 | }, 68 | "node_modules/@babel/compat-data": { 69 | "version": "7.22.5", 70 | "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.5.tgz", 71 | "integrity": "sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==", 72 | "dev": true, 73 | "engines": { 74 | "node": ">=6.9.0" 75 | } 76 | }, 77 | "node_modules/@babel/core": { 78 | "version": "7.22.5", 79 | "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", 80 | "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", 81 | "dev": true, 82 | "dependencies": { 83 | "@ampproject/remapping": "^2.2.0", 84 | "@babel/code-frame": "^7.22.5", 85 | "@babel/generator": "^7.22.5", 86 | "@babel/helper-compilation-targets": "^7.22.5", 87 | "@babel/helper-module-transforms": "^7.22.5", 88 | "@babel/helpers": "^7.22.5", 89 | "@babel/parser": "^7.22.5", 90 | "@babel/template": "^7.22.5", 91 | "@babel/traverse": "^7.22.5", 92 | "@babel/types": "^7.22.5", 93 | "convert-source-map": "^1.7.0", 94 | "debug": "^4.1.0", 95 | "gensync": "^1.0.0-beta.2", 96 | "json5": "^2.2.2", 97 | "semver": "^6.3.0" 98 | }, 99 | "engines": { 100 | "node": ">=6.9.0" 101 | }, 102 | "funding": { 103 | "type": "opencollective", 104 | "url": "https://opencollective.com/babel" 105 | } 106 | }, 107 | "node_modules/@babel/generator": { 108 | "version": "7.22.5", 109 | "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.5.tgz", 110 | "integrity": "sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==", 111 | "dev": true, 112 | "dependencies": { 113 | "@babel/types": "^7.22.5", 114 | "@jridgewell/gen-mapping": "^0.3.2", 115 | "@jridgewell/trace-mapping": "^0.3.17", 116 | "jsesc": "^2.5.1" 117 | }, 118 | "engines": { 119 | "node": ">=6.9.0" 120 | } 121 | }, 122 | "node_modules/@babel/helper-compilation-targets": { 123 | "version": "7.22.5", 124 | "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.5.tgz", 125 | "integrity": "sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==", 126 | "dev": true, 127 | "dependencies": { 128 | "@babel/compat-data": "^7.22.5", 129 | "@babel/helper-validator-option": "^7.22.5", 130 | "browserslist": "^4.21.3", 131 | "lru-cache": "^5.1.1", 132 | "semver": "^6.3.0" 133 | }, 134 | "engines": { 135 | "node": ">=6.9.0" 136 | }, 137 | "peerDependencies": { 138 | "@babel/core": "^7.0.0" 139 | } 140 | }, 141 | "node_modules/@babel/helper-environment-visitor": { 142 | "version": "7.22.5", 143 | "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.5.tgz", 144 | "integrity": "sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==", 145 | "dev": true, 146 | "engines": { 147 | "node": ">=6.9.0" 148 | } 149 | }, 150 | "node_modules/@babel/helper-function-name": { 151 | "version": "7.22.5", 152 | "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.22.5.tgz", 153 | "integrity": "sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==", 154 | "dev": true, 155 | "dependencies": { 156 | "@babel/template": "^7.22.5", 157 | "@babel/types": "^7.22.5" 158 | }, 159 | "engines": { 160 | "node": ">=6.9.0" 161 | } 162 | }, 163 | "node_modules/@babel/helper-hoist-variables": { 164 | "version": "7.22.5", 165 | "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", 166 | "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", 167 | "dev": true, 168 | "dependencies": { 169 | "@babel/types": "^7.22.5" 170 | }, 171 | "engines": { 172 | "node": ">=6.9.0" 173 | } 174 | }, 175 | "node_modules/@babel/helper-module-imports": { 176 | "version": "7.22.5", 177 | "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", 178 | "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", 179 | "dev": true, 180 | "dependencies": { 181 | "@babel/types": "^7.22.5" 182 | }, 183 | "engines": { 184 | "node": ">=6.9.0" 185 | } 186 | }, 187 | "node_modules/@babel/helper-module-transforms": { 188 | "version": "7.22.5", 189 | "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.5.tgz", 190 | "integrity": "sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==", 191 | "dev": true, 192 | "dependencies": { 193 | "@babel/helper-environment-visitor": "^7.22.5", 194 | "@babel/helper-module-imports": "^7.22.5", 195 | "@babel/helper-simple-access": "^7.22.5", 196 | "@babel/helper-split-export-declaration": "^7.22.5", 197 | "@babel/helper-validator-identifier": "^7.22.5", 198 | "@babel/template": "^7.22.5", 199 | "@babel/traverse": "^7.22.5", 200 | "@babel/types": "^7.22.5" 201 | }, 202 | "engines": { 203 | "node": ">=6.9.0" 204 | } 205 | }, 206 | "node_modules/@babel/helper-plugin-utils": { 207 | "version": "7.22.5", 208 | "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", 209 | "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", 210 | "dev": true, 211 | "engines": { 212 | "node": ">=6.9.0" 213 | } 214 | }, 215 | "node_modules/@babel/helper-simple-access": { 216 | "version": "7.22.5", 217 | "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", 218 | "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", 219 | "dev": true, 220 | "dependencies": { 221 | "@babel/types": "^7.22.5" 222 | }, 223 | "engines": { 224 | "node": ">=6.9.0" 225 | } 226 | }, 227 | "node_modules/@babel/helper-split-export-declaration": { 228 | "version": "7.22.5", 229 | "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", 230 | "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", 231 | "dev": true, 232 | "dependencies": { 233 | "@babel/types": "^7.22.5" 234 | }, 235 | "engines": { 236 | "node": ">=6.9.0" 237 | } 238 | }, 239 | "node_modules/@babel/helper-string-parser": { 240 | "version": "7.22.5", 241 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", 242 | "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", 243 | "dev": true, 244 | "engines": { 245 | "node": ">=6.9.0" 246 | } 247 | }, 248 | "node_modules/@babel/helper-validator-identifier": { 249 | "version": "7.22.5", 250 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz", 251 | "integrity": "sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==", 252 | "dev": true, 253 | "engines": { 254 | "node": ">=6.9.0" 255 | } 256 | }, 257 | "node_modules/@babel/helper-validator-option": { 258 | "version": "7.22.5", 259 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", 260 | "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", 261 | "dev": true, 262 | "engines": { 263 | "node": ">=6.9.0" 264 | } 265 | }, 266 | "node_modules/@babel/helpers": { 267 | "version": "7.22.5", 268 | "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.5.tgz", 269 | "integrity": "sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==", 270 | "dev": true, 271 | "dependencies": { 272 | "@babel/template": "^7.22.5", 273 | "@babel/traverse": "^7.22.5", 274 | "@babel/types": "^7.22.5" 275 | }, 276 | "engines": { 277 | "node": ">=6.9.0" 278 | } 279 | }, 280 | "node_modules/@babel/highlight": { 281 | "version": "7.22.5", 282 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.5.tgz", 283 | "integrity": "sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==", 284 | "dev": true, 285 | "dependencies": { 286 | "@babel/helper-validator-identifier": "^7.22.5", 287 | "chalk": "^2.0.0", 288 | "js-tokens": "^4.0.0" 289 | }, 290 | "engines": { 291 | "node": ">=6.9.0" 292 | } 293 | }, 294 | "node_modules/@babel/parser": { 295 | "version": "7.22.5", 296 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.5.tgz", 297 | "integrity": "sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==", 298 | "dev": true, 299 | "bin": { 300 | "parser": "bin/babel-parser.js" 301 | }, 302 | "engines": { 303 | "node": ">=6.0.0" 304 | } 305 | }, 306 | "node_modules/@babel/plugin-transform-react-jsx-self": { 307 | "version": "7.22.5", 308 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.22.5.tgz", 309 | "integrity": "sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==", 310 | "dev": true, 311 | "dependencies": { 312 | "@babel/helper-plugin-utils": "^7.22.5" 313 | }, 314 | "engines": { 315 | "node": ">=6.9.0" 316 | }, 317 | "peerDependencies": { 318 | "@babel/core": "^7.0.0-0" 319 | } 320 | }, 321 | "node_modules/@babel/plugin-transform-react-jsx-source": { 322 | "version": "7.22.5", 323 | "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.22.5.tgz", 324 | "integrity": "sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==", 325 | "dev": true, 326 | "dependencies": { 327 | "@babel/helper-plugin-utils": "^7.22.5" 328 | }, 329 | "engines": { 330 | "node": ">=6.9.0" 331 | }, 332 | "peerDependencies": { 333 | "@babel/core": "^7.0.0-0" 334 | } 335 | }, 336 | "node_modules/@babel/template": { 337 | "version": "7.22.5", 338 | "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", 339 | "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", 340 | "dev": true, 341 | "dependencies": { 342 | "@babel/code-frame": "^7.22.5", 343 | "@babel/parser": "^7.22.5", 344 | "@babel/types": "^7.22.5" 345 | }, 346 | "engines": { 347 | "node": ">=6.9.0" 348 | } 349 | }, 350 | "node_modules/@babel/traverse": { 351 | "version": "7.22.5", 352 | "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.22.5.tgz", 353 | "integrity": "sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==", 354 | "dev": true, 355 | "dependencies": { 356 | "@babel/code-frame": "^7.22.5", 357 | "@babel/generator": "^7.22.5", 358 | "@babel/helper-environment-visitor": "^7.22.5", 359 | "@babel/helper-function-name": "^7.22.5", 360 | "@babel/helper-hoist-variables": "^7.22.5", 361 | "@babel/helper-split-export-declaration": "^7.22.5", 362 | "@babel/parser": "^7.22.5", 363 | "@babel/types": "^7.22.5", 364 | "debug": "^4.1.0", 365 | "globals": "^11.1.0" 366 | }, 367 | "engines": { 368 | "node": ">=6.9.0" 369 | } 370 | }, 371 | "node_modules/@babel/types": { 372 | "version": "7.22.5", 373 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.22.5.tgz", 374 | "integrity": "sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==", 375 | "dev": true, 376 | "dependencies": { 377 | "@babel/helper-string-parser": "^7.22.5", 378 | "@babel/helper-validator-identifier": "^7.22.5", 379 | "to-fast-properties": "^2.0.0" 380 | }, 381 | "engines": { 382 | "node": ">=6.9.0" 383 | } 384 | }, 385 | "node_modules/@esbuild/android-arm": { 386 | "version": "0.17.19", 387 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", 388 | "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", 389 | "cpu": [ 390 | "arm" 391 | ], 392 | "dev": true, 393 | "optional": true, 394 | "os": [ 395 | "android" 396 | ], 397 | "engines": { 398 | "node": ">=12" 399 | } 400 | }, 401 | "node_modules/@esbuild/android-arm64": { 402 | "version": "0.17.19", 403 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", 404 | "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", 405 | "cpu": [ 406 | "arm64" 407 | ], 408 | "dev": true, 409 | "optional": true, 410 | "os": [ 411 | "android" 412 | ], 413 | "engines": { 414 | "node": ">=12" 415 | } 416 | }, 417 | "node_modules/@esbuild/android-x64": { 418 | "version": "0.17.19", 419 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", 420 | "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", 421 | "cpu": [ 422 | "x64" 423 | ], 424 | "dev": true, 425 | "optional": true, 426 | "os": [ 427 | "android" 428 | ], 429 | "engines": { 430 | "node": ">=12" 431 | } 432 | }, 433 | "node_modules/@esbuild/darwin-arm64": { 434 | "version": "0.17.19", 435 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", 436 | "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", 437 | "cpu": [ 438 | "arm64" 439 | ], 440 | "dev": true, 441 | "optional": true, 442 | "os": [ 443 | "darwin" 444 | ], 445 | "engines": { 446 | "node": ">=12" 447 | } 448 | }, 449 | "node_modules/@esbuild/darwin-x64": { 450 | "version": "0.17.19", 451 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", 452 | "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", 453 | "cpu": [ 454 | "x64" 455 | ], 456 | "dev": true, 457 | "optional": true, 458 | "os": [ 459 | "darwin" 460 | ], 461 | "engines": { 462 | "node": ">=12" 463 | } 464 | }, 465 | "node_modules/@esbuild/freebsd-arm64": { 466 | "version": "0.17.19", 467 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", 468 | "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", 469 | "cpu": [ 470 | "arm64" 471 | ], 472 | "dev": true, 473 | "optional": true, 474 | "os": [ 475 | "freebsd" 476 | ], 477 | "engines": { 478 | "node": ">=12" 479 | } 480 | }, 481 | "node_modules/@esbuild/freebsd-x64": { 482 | "version": "0.17.19", 483 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", 484 | "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", 485 | "cpu": [ 486 | "x64" 487 | ], 488 | "dev": true, 489 | "optional": true, 490 | "os": [ 491 | "freebsd" 492 | ], 493 | "engines": { 494 | "node": ">=12" 495 | } 496 | }, 497 | "node_modules/@esbuild/linux-arm": { 498 | "version": "0.17.19", 499 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", 500 | "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", 501 | "cpu": [ 502 | "arm" 503 | ], 504 | "dev": true, 505 | "optional": true, 506 | "os": [ 507 | "linux" 508 | ], 509 | "engines": { 510 | "node": ">=12" 511 | } 512 | }, 513 | "node_modules/@esbuild/linux-arm64": { 514 | "version": "0.17.19", 515 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", 516 | "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", 517 | "cpu": [ 518 | "arm64" 519 | ], 520 | "dev": true, 521 | "optional": true, 522 | "os": [ 523 | "linux" 524 | ], 525 | "engines": { 526 | "node": ">=12" 527 | } 528 | }, 529 | "node_modules/@esbuild/linux-ia32": { 530 | "version": "0.17.19", 531 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", 532 | "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", 533 | "cpu": [ 534 | "ia32" 535 | ], 536 | "dev": true, 537 | "optional": true, 538 | "os": [ 539 | "linux" 540 | ], 541 | "engines": { 542 | "node": ">=12" 543 | } 544 | }, 545 | "node_modules/@esbuild/linux-loong64": { 546 | "version": "0.17.19", 547 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", 548 | "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", 549 | "cpu": [ 550 | "loong64" 551 | ], 552 | "dev": true, 553 | "optional": true, 554 | "os": [ 555 | "linux" 556 | ], 557 | "engines": { 558 | "node": ">=12" 559 | } 560 | }, 561 | "node_modules/@esbuild/linux-mips64el": { 562 | "version": "0.17.19", 563 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", 564 | "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", 565 | "cpu": [ 566 | "mips64el" 567 | ], 568 | "dev": true, 569 | "optional": true, 570 | "os": [ 571 | "linux" 572 | ], 573 | "engines": { 574 | "node": ">=12" 575 | } 576 | }, 577 | "node_modules/@esbuild/linux-ppc64": { 578 | "version": "0.17.19", 579 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", 580 | "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", 581 | "cpu": [ 582 | "ppc64" 583 | ], 584 | "dev": true, 585 | "optional": true, 586 | "os": [ 587 | "linux" 588 | ], 589 | "engines": { 590 | "node": ">=12" 591 | } 592 | }, 593 | "node_modules/@esbuild/linux-riscv64": { 594 | "version": "0.17.19", 595 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", 596 | "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", 597 | "cpu": [ 598 | "riscv64" 599 | ], 600 | "dev": true, 601 | "optional": true, 602 | "os": [ 603 | "linux" 604 | ], 605 | "engines": { 606 | "node": ">=12" 607 | } 608 | }, 609 | "node_modules/@esbuild/linux-s390x": { 610 | "version": "0.17.19", 611 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", 612 | "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", 613 | "cpu": [ 614 | "s390x" 615 | ], 616 | "dev": true, 617 | "optional": true, 618 | "os": [ 619 | "linux" 620 | ], 621 | "engines": { 622 | "node": ">=12" 623 | } 624 | }, 625 | "node_modules/@esbuild/linux-x64": { 626 | "version": "0.17.19", 627 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", 628 | "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", 629 | "cpu": [ 630 | "x64" 631 | ], 632 | "dev": true, 633 | "optional": true, 634 | "os": [ 635 | "linux" 636 | ], 637 | "engines": { 638 | "node": ">=12" 639 | } 640 | }, 641 | "node_modules/@esbuild/netbsd-x64": { 642 | "version": "0.17.19", 643 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", 644 | "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", 645 | "cpu": [ 646 | "x64" 647 | ], 648 | "dev": true, 649 | "optional": true, 650 | "os": [ 651 | "netbsd" 652 | ], 653 | "engines": { 654 | "node": ">=12" 655 | } 656 | }, 657 | "node_modules/@esbuild/openbsd-x64": { 658 | "version": "0.17.19", 659 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", 660 | "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", 661 | "cpu": [ 662 | "x64" 663 | ], 664 | "dev": true, 665 | "optional": true, 666 | "os": [ 667 | "openbsd" 668 | ], 669 | "engines": { 670 | "node": ">=12" 671 | } 672 | }, 673 | "node_modules/@esbuild/sunos-x64": { 674 | "version": "0.17.19", 675 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", 676 | "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", 677 | "cpu": [ 678 | "x64" 679 | ], 680 | "dev": true, 681 | "optional": true, 682 | "os": [ 683 | "sunos" 684 | ], 685 | "engines": { 686 | "node": ">=12" 687 | } 688 | }, 689 | "node_modules/@esbuild/win32-arm64": { 690 | "version": "0.17.19", 691 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", 692 | "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", 693 | "cpu": [ 694 | "arm64" 695 | ], 696 | "dev": true, 697 | "optional": true, 698 | "os": [ 699 | "win32" 700 | ], 701 | "engines": { 702 | "node": ">=12" 703 | } 704 | }, 705 | "node_modules/@esbuild/win32-ia32": { 706 | "version": "0.17.19", 707 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", 708 | "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", 709 | "cpu": [ 710 | "ia32" 711 | ], 712 | "dev": true, 713 | "optional": true, 714 | "os": [ 715 | "win32" 716 | ], 717 | "engines": { 718 | "node": ">=12" 719 | } 720 | }, 721 | "node_modules/@esbuild/win32-x64": { 722 | "version": "0.17.19", 723 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", 724 | "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", 725 | "cpu": [ 726 | "x64" 727 | ], 728 | "dev": true, 729 | "optional": true, 730 | "os": [ 731 | "win32" 732 | ], 733 | "engines": { 734 | "node": ">=12" 735 | } 736 | }, 737 | "node_modules/@jridgewell/gen-mapping": { 738 | "version": "0.3.3", 739 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", 740 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", 741 | "dev": true, 742 | "dependencies": { 743 | "@jridgewell/set-array": "^1.0.1", 744 | "@jridgewell/sourcemap-codec": "^1.4.10", 745 | "@jridgewell/trace-mapping": "^0.3.9" 746 | }, 747 | "engines": { 748 | "node": ">=6.0.0" 749 | } 750 | }, 751 | "node_modules/@jridgewell/resolve-uri": { 752 | "version": "3.1.0", 753 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", 754 | "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", 755 | "dev": true, 756 | "engines": { 757 | "node": ">=6.0.0" 758 | } 759 | }, 760 | "node_modules/@jridgewell/set-array": { 761 | "version": "1.1.2", 762 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", 763 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", 764 | "dev": true, 765 | "engines": { 766 | "node": ">=6.0.0" 767 | } 768 | }, 769 | "node_modules/@jridgewell/sourcemap-codec": { 770 | "version": "1.4.15", 771 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 772 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 773 | "dev": true 774 | }, 775 | "node_modules/@jridgewell/trace-mapping": { 776 | "version": "0.3.18", 777 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", 778 | "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", 779 | "dev": true, 780 | "dependencies": { 781 | "@jridgewell/resolve-uri": "3.1.0", 782 | "@jridgewell/sourcemap-codec": "1.4.14" 783 | } 784 | }, 785 | "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { 786 | "version": "1.4.14", 787 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", 788 | "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", 789 | "dev": true 790 | }, 791 | "node_modules/@nodelib/fs.scandir": { 792 | "version": "2.1.5", 793 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 794 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 795 | "dev": true, 796 | "dependencies": { 797 | "@nodelib/fs.stat": "2.0.5", 798 | "run-parallel": "^1.1.9" 799 | }, 800 | "engines": { 801 | "node": ">= 8" 802 | } 803 | }, 804 | "node_modules/@nodelib/fs.stat": { 805 | "version": "2.0.5", 806 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 807 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 808 | "dev": true, 809 | "engines": { 810 | "node": ">= 8" 811 | } 812 | }, 813 | "node_modules/@nodelib/fs.walk": { 814 | "version": "1.2.8", 815 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 816 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 817 | "dev": true, 818 | "dependencies": { 819 | "@nodelib/fs.scandir": "2.1.5", 820 | "fastq": "^1.6.0" 821 | }, 822 | "engines": { 823 | "node": ">= 8" 824 | } 825 | }, 826 | "node_modules/@remix-run/router": { 827 | "version": "1.7.1", 828 | "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.7.1.tgz", 829 | "integrity": "sha512-bgVQM4ZJ2u2CM8k1ey70o1ePFXsEzYVZoWghh6WjM8p59jQ7HxzbHW4SbnWFG7V9ig9chLawQxDTZ3xzOF8MkQ==", 830 | "engines": { 831 | "node": ">=14" 832 | } 833 | }, 834 | "node_modules/@types/prop-types": { 835 | "version": "15.7.5", 836 | "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", 837 | "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", 838 | "dev": true 839 | }, 840 | "node_modules/@types/react": { 841 | "version": "18.2.14", 842 | "resolved": "https://registry.npmjs.org/@types/react/-/react-18.2.14.tgz", 843 | "integrity": "sha512-A0zjq+QN/O0Kpe30hA1GidzyFjatVvrpIvWLxD+xv67Vt91TWWgco9IvrJBkeyHm1trGaFS/FSGqPlhyeZRm0g==", 844 | "dev": true, 845 | "dependencies": { 846 | "@types/prop-types": "*", 847 | "@types/scheduler": "*", 848 | "csstype": "^3.0.2" 849 | } 850 | }, 851 | "node_modules/@types/react-dom": { 852 | "version": "18.2.6", 853 | "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.2.6.tgz", 854 | "integrity": "sha512-2et4PDvg6PVCyS7fuTc4gPoksV58bW0RwSxWKcPRcHZf0PRUGq03TKcD/rUHe3azfV6/5/biUBJw+HhCQjaP0A==", 855 | "dev": true, 856 | "dependencies": { 857 | "@types/react": "*" 858 | } 859 | }, 860 | "node_modules/@types/scheduler": { 861 | "version": "0.16.3", 862 | "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.3.tgz", 863 | "integrity": "sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==", 864 | "dev": true 865 | }, 866 | "node_modules/@vitejs/plugin-react": { 867 | "version": "3.1.0", 868 | "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-3.1.0.tgz", 869 | "integrity": "sha512-AfgcRL8ZBhAlc3BFdigClmTUMISmmzHn7sB2h9U1odvc5U/MjWXsAaz18b/WoppUTDBzxOJwo2VdClfUcItu9g==", 870 | "dev": true, 871 | "dependencies": { 872 | "@babel/core": "^7.20.12", 873 | "@babel/plugin-transform-react-jsx-self": "^7.18.6", 874 | "@babel/plugin-transform-react-jsx-source": "^7.19.6", 875 | "magic-string": "^0.27.0", 876 | "react-refresh": "^0.14.0" 877 | }, 878 | "engines": { 879 | "node": "^14.18.0 || >=16.0.0" 880 | }, 881 | "peerDependencies": { 882 | "vite": "^4.1.0-beta.0" 883 | } 884 | }, 885 | "node_modules/@zeit/schemas": { 886 | "version": "2.29.0", 887 | "resolved": "https://registry.npmjs.org/@zeit/schemas/-/schemas-2.29.0.tgz", 888 | "integrity": "sha512-g5QiLIfbg3pLuYUJPlisNKY+epQJTcMDsOnVNkscrDP1oi7vmJnzOANYJI/1pZcVJ6umUkBv3aFtlg1UvUHGzA==" 889 | }, 890 | "node_modules/accepts": { 891 | "version": "1.3.8", 892 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 893 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 894 | "dependencies": { 895 | "mime-types": "~2.1.34", 896 | "negotiator": "0.6.3" 897 | }, 898 | "engines": { 899 | "node": ">= 0.6" 900 | } 901 | }, 902 | "node_modules/ajv": { 903 | "version": "8.11.0", 904 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", 905 | "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", 906 | "dependencies": { 907 | "fast-deep-equal": "^3.1.1", 908 | "json-schema-traverse": "^1.0.0", 909 | "require-from-string": "^2.0.2", 910 | "uri-js": "^4.2.2" 911 | }, 912 | "funding": { 913 | "type": "github", 914 | "url": "https://github.com/sponsors/epoberezkin" 915 | } 916 | }, 917 | "node_modules/ansi-align": { 918 | "version": "3.0.1", 919 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", 920 | "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", 921 | "dependencies": { 922 | "string-width": "^4.1.0" 923 | } 924 | }, 925 | "node_modules/ansi-align/node_modules/ansi-regex": { 926 | "version": "5.0.1", 927 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 928 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 929 | "engines": { 930 | "node": ">=8" 931 | } 932 | }, 933 | "node_modules/ansi-align/node_modules/emoji-regex": { 934 | "version": "8.0.0", 935 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 936 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 937 | }, 938 | "node_modules/ansi-align/node_modules/string-width": { 939 | "version": "4.2.3", 940 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 941 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 942 | "dependencies": { 943 | "emoji-regex": "^8.0.0", 944 | "is-fullwidth-code-point": "^3.0.0", 945 | "strip-ansi": "^6.0.1" 946 | }, 947 | "engines": { 948 | "node": ">=8" 949 | } 950 | }, 951 | "node_modules/ansi-align/node_modules/strip-ansi": { 952 | "version": "6.0.1", 953 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 954 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 955 | "dependencies": { 956 | "ansi-regex": "^5.0.1" 957 | }, 958 | "engines": { 959 | "node": ">=8" 960 | } 961 | }, 962 | "node_modules/ansi-regex": { 963 | "version": "6.0.1", 964 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 965 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 966 | "engines": { 967 | "node": ">=12" 968 | }, 969 | "funding": { 970 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 971 | } 972 | }, 973 | "node_modules/ansi-styles": { 974 | "version": "3.2.1", 975 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 976 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 977 | "dev": true, 978 | "dependencies": { 979 | "color-convert": "^1.9.0" 980 | }, 981 | "engines": { 982 | "node": ">=4" 983 | } 984 | }, 985 | "node_modules/any-promise": { 986 | "version": "1.3.0", 987 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 988 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 989 | "dev": true 990 | }, 991 | "node_modules/anymatch": { 992 | "version": "3.1.3", 993 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 994 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 995 | "dev": true, 996 | "dependencies": { 997 | "normalize-path": "^3.0.0", 998 | "picomatch": "^2.0.4" 999 | }, 1000 | "engines": { 1001 | "node": ">= 8" 1002 | } 1003 | }, 1004 | "node_modules/arch": { 1005 | "version": "2.2.0", 1006 | "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", 1007 | "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", 1008 | "funding": [ 1009 | { 1010 | "type": "github", 1011 | "url": "https://github.com/sponsors/feross" 1012 | }, 1013 | { 1014 | "type": "patreon", 1015 | "url": "https://www.patreon.com/feross" 1016 | }, 1017 | { 1018 | "type": "consulting", 1019 | "url": "https://feross.org/support" 1020 | } 1021 | ] 1022 | }, 1023 | "node_modules/arg": { 1024 | "version": "5.0.2", 1025 | "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", 1026 | "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" 1027 | }, 1028 | "node_modules/asynckit": { 1029 | "version": "0.4.0", 1030 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1031 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==" 1032 | }, 1033 | "node_modules/autoprefixer": { 1034 | "version": "10.4.14", 1035 | "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", 1036 | "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", 1037 | "dev": true, 1038 | "funding": [ 1039 | { 1040 | "type": "opencollective", 1041 | "url": "https://opencollective.com/postcss/" 1042 | }, 1043 | { 1044 | "type": "tidelift", 1045 | "url": "https://tidelift.com/funding/github/npm/autoprefixer" 1046 | } 1047 | ], 1048 | "dependencies": { 1049 | "browserslist": "^4.21.5", 1050 | "caniuse-lite": "^1.0.30001464", 1051 | "fraction.js": "^4.2.0", 1052 | "normalize-range": "^0.1.2", 1053 | "picocolors": "^1.0.0", 1054 | "postcss-value-parser": "^4.2.0" 1055 | }, 1056 | "bin": { 1057 | "autoprefixer": "bin/autoprefixer" 1058 | }, 1059 | "engines": { 1060 | "node": "^10 || ^12 || >=14" 1061 | }, 1062 | "peerDependencies": { 1063 | "postcss": "^8.1.0" 1064 | } 1065 | }, 1066 | "node_modules/axios": { 1067 | "version": "1.4.0", 1068 | "resolved": "https://registry.npmjs.org/axios/-/axios-1.4.0.tgz", 1069 | "integrity": "sha512-S4XCWMEmzvo64T9GfvQDOXgYRDJ/wsSZc7Jvdgx5u1sd0JwsuPLqb3SYmusag+edF6ziyMensPVqLTSc1PiSEA==", 1070 | "dependencies": { 1071 | "follow-redirects": "^1.15.0", 1072 | "form-data": "^4.0.0", 1073 | "proxy-from-env": "^1.1.0" 1074 | } 1075 | }, 1076 | "node_modules/balanced-match": { 1077 | "version": "1.0.2", 1078 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1079 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 1080 | }, 1081 | "node_modules/binary-extensions": { 1082 | "version": "2.2.0", 1083 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1084 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1085 | "dev": true, 1086 | "engines": { 1087 | "node": ">=8" 1088 | } 1089 | }, 1090 | "node_modules/boxen": { 1091 | "version": "7.0.0", 1092 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.0.0.tgz", 1093 | "integrity": "sha512-j//dBVuyacJbvW+tvZ9HuH03fZ46QcaKvvhZickZqtB271DxJ7SNRSNxrV/dZX0085m7hISRZWbzWlJvx/rHSg==", 1094 | "dependencies": { 1095 | "ansi-align": "^3.0.1", 1096 | "camelcase": "^7.0.0", 1097 | "chalk": "^5.0.1", 1098 | "cli-boxes": "^3.0.0", 1099 | "string-width": "^5.1.2", 1100 | "type-fest": "^2.13.0", 1101 | "widest-line": "^4.0.1", 1102 | "wrap-ansi": "^8.0.1" 1103 | }, 1104 | "engines": { 1105 | "node": ">=14.16" 1106 | }, 1107 | "funding": { 1108 | "url": "https://github.com/sponsors/sindresorhus" 1109 | } 1110 | }, 1111 | "node_modules/boxen/node_modules/chalk": { 1112 | "version": "5.3.0", 1113 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 1114 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 1115 | "engines": { 1116 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 1117 | }, 1118 | "funding": { 1119 | "url": "https://github.com/chalk/chalk?sponsor=1" 1120 | } 1121 | }, 1122 | "node_modules/brace-expansion": { 1123 | "version": "1.1.11", 1124 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1125 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1126 | "dependencies": { 1127 | "balanced-match": "^1.0.0", 1128 | "concat-map": "0.0.1" 1129 | } 1130 | }, 1131 | "node_modules/braces": { 1132 | "version": "3.0.2", 1133 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1134 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1135 | "dev": true, 1136 | "dependencies": { 1137 | "fill-range": "^7.0.1" 1138 | }, 1139 | "engines": { 1140 | "node": ">=8" 1141 | } 1142 | }, 1143 | "node_modules/browserslist": { 1144 | "version": "4.21.9", 1145 | "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.9.tgz", 1146 | "integrity": "sha512-M0MFoZzbUrRU4KNfCrDLnvyE7gub+peetoTid3TBIqtunaDJyXlwhakT+/VkvSXcfIzFfK/nkCs4nmyTmxdNSg==", 1147 | "dev": true, 1148 | "funding": [ 1149 | { 1150 | "type": "opencollective", 1151 | "url": "https://opencollective.com/browserslist" 1152 | }, 1153 | { 1154 | "type": "tidelift", 1155 | "url": "https://tidelift.com/funding/github/npm/browserslist" 1156 | }, 1157 | { 1158 | "type": "github", 1159 | "url": "https://github.com/sponsors/ai" 1160 | } 1161 | ], 1162 | "dependencies": { 1163 | "caniuse-lite": "^1.0.30001503", 1164 | "electron-to-chromium": "^1.4.431", 1165 | "node-releases": "^2.0.12", 1166 | "update-browserslist-db": "^1.0.11" 1167 | }, 1168 | "bin": { 1169 | "browserslist": "cli.js" 1170 | }, 1171 | "engines": { 1172 | "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" 1173 | } 1174 | }, 1175 | "node_modules/bytes": { 1176 | "version": "3.0.0", 1177 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 1178 | "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", 1179 | "engines": { 1180 | "node": ">= 0.8" 1181 | } 1182 | }, 1183 | "node_modules/camelcase": { 1184 | "version": "7.0.1", 1185 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", 1186 | "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", 1187 | "engines": { 1188 | "node": ">=14.16" 1189 | }, 1190 | "funding": { 1191 | "url": "https://github.com/sponsors/sindresorhus" 1192 | } 1193 | }, 1194 | "node_modules/camelcase-css": { 1195 | "version": "2.0.1", 1196 | "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", 1197 | "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", 1198 | "dev": true, 1199 | "engines": { 1200 | "node": ">= 6" 1201 | } 1202 | }, 1203 | "node_modules/caniuse-lite": { 1204 | "version": "1.0.30001512", 1205 | "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001512.tgz", 1206 | "integrity": "sha512-2S9nK0G/mE+jasCUsMPlARhRCts1ebcp2Ji8Y8PWi4NDE1iRdLCnEPHkEfeBrGC45L4isBx5ur3IQ6yTE2mRZw==", 1207 | "dev": true, 1208 | "funding": [ 1209 | { 1210 | "type": "opencollective", 1211 | "url": "https://opencollective.com/browserslist" 1212 | }, 1213 | { 1214 | "type": "tidelift", 1215 | "url": "https://tidelift.com/funding/github/npm/caniuse-lite" 1216 | }, 1217 | { 1218 | "type": "github", 1219 | "url": "https://github.com/sponsors/ai" 1220 | } 1221 | ] 1222 | }, 1223 | "node_modules/chalk": { 1224 | "version": "2.4.2", 1225 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1226 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1227 | "dev": true, 1228 | "dependencies": { 1229 | "ansi-styles": "^3.2.1", 1230 | "escape-string-regexp": "^1.0.5", 1231 | "supports-color": "^5.3.0" 1232 | }, 1233 | "engines": { 1234 | "node": ">=4" 1235 | } 1236 | }, 1237 | "node_modules/chalk-template": { 1238 | "version": "0.4.0", 1239 | "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", 1240 | "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", 1241 | "dependencies": { 1242 | "chalk": "^4.1.2" 1243 | }, 1244 | "engines": { 1245 | "node": ">=12" 1246 | }, 1247 | "funding": { 1248 | "url": "https://github.com/chalk/chalk-template?sponsor=1" 1249 | } 1250 | }, 1251 | "node_modules/chalk-template/node_modules/ansi-styles": { 1252 | "version": "4.3.0", 1253 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1254 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1255 | "dependencies": { 1256 | "color-convert": "^2.0.1" 1257 | }, 1258 | "engines": { 1259 | "node": ">=8" 1260 | }, 1261 | "funding": { 1262 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1263 | } 1264 | }, 1265 | "node_modules/chalk-template/node_modules/chalk": { 1266 | "version": "4.1.2", 1267 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1268 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1269 | "dependencies": { 1270 | "ansi-styles": "^4.1.0", 1271 | "supports-color": "^7.1.0" 1272 | }, 1273 | "engines": { 1274 | "node": ">=10" 1275 | }, 1276 | "funding": { 1277 | "url": "https://github.com/chalk/chalk?sponsor=1" 1278 | } 1279 | }, 1280 | "node_modules/chalk-template/node_modules/color-convert": { 1281 | "version": "2.0.1", 1282 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1283 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1284 | "dependencies": { 1285 | "color-name": "~1.1.4" 1286 | }, 1287 | "engines": { 1288 | "node": ">=7.0.0" 1289 | } 1290 | }, 1291 | "node_modules/chalk-template/node_modules/color-name": { 1292 | "version": "1.1.4", 1293 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1294 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 1295 | }, 1296 | "node_modules/chalk-template/node_modules/has-flag": { 1297 | "version": "4.0.0", 1298 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1299 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1300 | "engines": { 1301 | "node": ">=8" 1302 | } 1303 | }, 1304 | "node_modules/chalk-template/node_modules/supports-color": { 1305 | "version": "7.2.0", 1306 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1307 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1308 | "dependencies": { 1309 | "has-flag": "^4.0.0" 1310 | }, 1311 | "engines": { 1312 | "node": ">=8" 1313 | } 1314 | }, 1315 | "node_modules/chokidar": { 1316 | "version": "3.5.3", 1317 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1318 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1319 | "dev": true, 1320 | "funding": [ 1321 | { 1322 | "type": "individual", 1323 | "url": "https://paulmillr.com/funding/" 1324 | } 1325 | ], 1326 | "dependencies": { 1327 | "anymatch": "~3.1.2", 1328 | "braces": "~3.0.2", 1329 | "glob-parent": "~5.1.2", 1330 | "is-binary-path": "~2.1.0", 1331 | "is-glob": "~4.0.1", 1332 | "normalize-path": "~3.0.0", 1333 | "readdirp": "~3.6.0" 1334 | }, 1335 | "engines": { 1336 | "node": ">= 8.10.0" 1337 | }, 1338 | "optionalDependencies": { 1339 | "fsevents": "~2.3.2" 1340 | } 1341 | }, 1342 | "node_modules/chokidar/node_modules/glob-parent": { 1343 | "version": "5.1.2", 1344 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1345 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1346 | "dev": true, 1347 | "dependencies": { 1348 | "is-glob": "^4.0.1" 1349 | }, 1350 | "engines": { 1351 | "node": ">= 6" 1352 | } 1353 | }, 1354 | "node_modules/cli-boxes": { 1355 | "version": "3.0.0", 1356 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", 1357 | "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", 1358 | "engines": { 1359 | "node": ">=10" 1360 | }, 1361 | "funding": { 1362 | "url": "https://github.com/sponsors/sindresorhus" 1363 | } 1364 | }, 1365 | "node_modules/clipboardy": { 1366 | "version": "3.0.0", 1367 | "resolved": "https://registry.npmjs.org/clipboardy/-/clipboardy-3.0.0.tgz", 1368 | "integrity": "sha512-Su+uU5sr1jkUy1sGRpLKjKrvEOVXgSgiSInwa/qeID6aJ07yh+5NWc3h2QfjHjBnfX4LhtFcuAWKUsJ3r+fjbg==", 1369 | "dependencies": { 1370 | "arch": "^2.2.0", 1371 | "execa": "^5.1.1", 1372 | "is-wsl": "^2.2.0" 1373 | }, 1374 | "engines": { 1375 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1376 | }, 1377 | "funding": { 1378 | "url": "https://github.com/sponsors/sindresorhus" 1379 | } 1380 | }, 1381 | "node_modules/color-convert": { 1382 | "version": "1.9.3", 1383 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1384 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1385 | "dev": true, 1386 | "dependencies": { 1387 | "color-name": "1.1.3" 1388 | } 1389 | }, 1390 | "node_modules/color-name": { 1391 | "version": "1.1.3", 1392 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1393 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", 1394 | "dev": true 1395 | }, 1396 | "node_modules/combined-stream": { 1397 | "version": "1.0.8", 1398 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1399 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1400 | "dependencies": { 1401 | "delayed-stream": "~1.0.0" 1402 | }, 1403 | "engines": { 1404 | "node": ">= 0.8" 1405 | } 1406 | }, 1407 | "node_modules/commander": { 1408 | "version": "4.1.1", 1409 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 1410 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 1411 | "dev": true, 1412 | "engines": { 1413 | "node": ">= 6" 1414 | } 1415 | }, 1416 | "node_modules/compressible": { 1417 | "version": "2.0.18", 1418 | "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", 1419 | "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", 1420 | "dependencies": { 1421 | "mime-db": ">= 1.43.0 < 2" 1422 | }, 1423 | "engines": { 1424 | "node": ">= 0.6" 1425 | } 1426 | }, 1427 | "node_modules/compression": { 1428 | "version": "1.7.4", 1429 | "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", 1430 | "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", 1431 | "dependencies": { 1432 | "accepts": "~1.3.5", 1433 | "bytes": "3.0.0", 1434 | "compressible": "~2.0.16", 1435 | "debug": "2.6.9", 1436 | "on-headers": "~1.0.2", 1437 | "safe-buffer": "5.1.2", 1438 | "vary": "~1.1.2" 1439 | }, 1440 | "engines": { 1441 | "node": ">= 0.8.0" 1442 | } 1443 | }, 1444 | "node_modules/compression/node_modules/debug": { 1445 | "version": "2.6.9", 1446 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1447 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1448 | "dependencies": { 1449 | "ms": "2.0.0" 1450 | } 1451 | }, 1452 | "node_modules/compression/node_modules/ms": { 1453 | "version": "2.0.0", 1454 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1455 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1456 | }, 1457 | "node_modules/concat-map": { 1458 | "version": "0.0.1", 1459 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1460 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 1461 | }, 1462 | "node_modules/content-disposition": { 1463 | "version": "0.5.2", 1464 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 1465 | "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", 1466 | "engines": { 1467 | "node": ">= 0.6" 1468 | } 1469 | }, 1470 | "node_modules/convert-source-map": { 1471 | "version": "1.9.0", 1472 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", 1473 | "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", 1474 | "dev": true 1475 | }, 1476 | "node_modules/cross-spawn": { 1477 | "version": "7.0.3", 1478 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1479 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1480 | "dependencies": { 1481 | "path-key": "^3.1.0", 1482 | "shebang-command": "^2.0.0", 1483 | "which": "^2.0.1" 1484 | }, 1485 | "engines": { 1486 | "node": ">= 8" 1487 | } 1488 | }, 1489 | "node_modules/cssesc": { 1490 | "version": "3.0.0", 1491 | "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", 1492 | "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", 1493 | "dev": true, 1494 | "bin": { 1495 | "cssesc": "bin/cssesc" 1496 | }, 1497 | "engines": { 1498 | "node": ">=4" 1499 | } 1500 | }, 1501 | "node_modules/csstype": { 1502 | "version": "3.1.2", 1503 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.2.tgz", 1504 | "integrity": "sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==", 1505 | "dev": true 1506 | }, 1507 | "node_modules/debug": { 1508 | "version": "4.3.4", 1509 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1510 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1511 | "dev": true, 1512 | "dependencies": { 1513 | "ms": "2.1.2" 1514 | }, 1515 | "engines": { 1516 | "node": ">=6.0" 1517 | }, 1518 | "peerDependenciesMeta": { 1519 | "supports-color": { 1520 | "optional": true 1521 | } 1522 | } 1523 | }, 1524 | "node_modules/deep-extend": { 1525 | "version": "0.6.0", 1526 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 1527 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 1528 | "engines": { 1529 | "node": ">=4.0.0" 1530 | } 1531 | }, 1532 | "node_modules/delayed-stream": { 1533 | "version": "1.0.0", 1534 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1535 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 1536 | "engines": { 1537 | "node": ">=0.4.0" 1538 | } 1539 | }, 1540 | "node_modules/didyoumean": { 1541 | "version": "1.2.2", 1542 | "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", 1543 | "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", 1544 | "dev": true 1545 | }, 1546 | "node_modules/dlv": { 1547 | "version": "1.1.3", 1548 | "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", 1549 | "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", 1550 | "dev": true 1551 | }, 1552 | "node_modules/eastasianwidth": { 1553 | "version": "0.2.0", 1554 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1555 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 1556 | }, 1557 | "node_modules/electron-to-chromium": { 1558 | "version": "1.4.449", 1559 | "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.449.tgz", 1560 | "integrity": "sha512-TxLRpRUj/107ATefeP8VIUWNOv90xJxZZbCW/eIbSZQiuiFANCx2b7u+GbVc9X4gU+xnbvypNMYVM/WArE1DNQ==", 1561 | "dev": true 1562 | }, 1563 | "node_modules/emoji-regex": { 1564 | "version": "9.2.2", 1565 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1566 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" 1567 | }, 1568 | "node_modules/esbuild": { 1569 | "version": "0.17.19", 1570 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", 1571 | "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", 1572 | "dev": true, 1573 | "hasInstallScript": true, 1574 | "bin": { 1575 | "esbuild": "bin/esbuild" 1576 | }, 1577 | "engines": { 1578 | "node": ">=12" 1579 | }, 1580 | "optionalDependencies": { 1581 | "@esbuild/android-arm": "0.17.19", 1582 | "@esbuild/android-arm64": "0.17.19", 1583 | "@esbuild/android-x64": "0.17.19", 1584 | "@esbuild/darwin-arm64": "0.17.19", 1585 | "@esbuild/darwin-x64": "0.17.19", 1586 | "@esbuild/freebsd-arm64": "0.17.19", 1587 | "@esbuild/freebsd-x64": "0.17.19", 1588 | "@esbuild/linux-arm": "0.17.19", 1589 | "@esbuild/linux-arm64": "0.17.19", 1590 | "@esbuild/linux-ia32": "0.17.19", 1591 | "@esbuild/linux-loong64": "0.17.19", 1592 | "@esbuild/linux-mips64el": "0.17.19", 1593 | "@esbuild/linux-ppc64": "0.17.19", 1594 | "@esbuild/linux-riscv64": "0.17.19", 1595 | "@esbuild/linux-s390x": "0.17.19", 1596 | "@esbuild/linux-x64": "0.17.19", 1597 | "@esbuild/netbsd-x64": "0.17.19", 1598 | "@esbuild/openbsd-x64": "0.17.19", 1599 | "@esbuild/sunos-x64": "0.17.19", 1600 | "@esbuild/win32-arm64": "0.17.19", 1601 | "@esbuild/win32-ia32": "0.17.19", 1602 | "@esbuild/win32-x64": "0.17.19" 1603 | } 1604 | }, 1605 | "node_modules/escalade": { 1606 | "version": "3.1.1", 1607 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", 1608 | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", 1609 | "dev": true, 1610 | "engines": { 1611 | "node": ">=6" 1612 | } 1613 | }, 1614 | "node_modules/escape-string-regexp": { 1615 | "version": "1.0.5", 1616 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1617 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 1618 | "dev": true, 1619 | "engines": { 1620 | "node": ">=0.8.0" 1621 | } 1622 | }, 1623 | "node_modules/execa": { 1624 | "version": "5.1.1", 1625 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 1626 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 1627 | "dependencies": { 1628 | "cross-spawn": "^7.0.3", 1629 | "get-stream": "^6.0.0", 1630 | "human-signals": "^2.1.0", 1631 | "is-stream": "^2.0.0", 1632 | "merge-stream": "^2.0.0", 1633 | "npm-run-path": "^4.0.1", 1634 | "onetime": "^5.1.2", 1635 | "signal-exit": "^3.0.3", 1636 | "strip-final-newline": "^2.0.0" 1637 | }, 1638 | "engines": { 1639 | "node": ">=10" 1640 | }, 1641 | "funding": { 1642 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1643 | } 1644 | }, 1645 | "node_modules/fast-deep-equal": { 1646 | "version": "3.1.3", 1647 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1648 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" 1649 | }, 1650 | "node_modules/fast-glob": { 1651 | "version": "3.3.0", 1652 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.0.tgz", 1653 | "integrity": "sha512-ChDuvbOypPuNjO8yIDf36x7BlZX1smcUMTTcyoIjycexOxd6DFsKsg21qVBzEmr3G7fUKIRy2/psii+CIUt7FA==", 1654 | "dev": true, 1655 | "dependencies": { 1656 | "@nodelib/fs.stat": "^2.0.2", 1657 | "@nodelib/fs.walk": "^1.2.3", 1658 | "glob-parent": "^5.1.2", 1659 | "merge2": "^1.3.0", 1660 | "micromatch": "^4.0.4" 1661 | }, 1662 | "engines": { 1663 | "node": ">=8.6.0" 1664 | } 1665 | }, 1666 | "node_modules/fast-glob/node_modules/glob-parent": { 1667 | "version": "5.1.2", 1668 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1669 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1670 | "dev": true, 1671 | "dependencies": { 1672 | "is-glob": "^4.0.1" 1673 | }, 1674 | "engines": { 1675 | "node": ">= 6" 1676 | } 1677 | }, 1678 | "node_modules/fast-url-parser": { 1679 | "version": "1.1.3", 1680 | "resolved": "https://registry.npmjs.org/fast-url-parser/-/fast-url-parser-1.1.3.tgz", 1681 | "integrity": "sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==", 1682 | "dependencies": { 1683 | "punycode": "^1.3.2" 1684 | } 1685 | }, 1686 | "node_modules/fastq": { 1687 | "version": "1.15.0", 1688 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1689 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1690 | "dev": true, 1691 | "dependencies": { 1692 | "reusify": "^1.0.4" 1693 | } 1694 | }, 1695 | "node_modules/fill-range": { 1696 | "version": "7.0.1", 1697 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1698 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1699 | "dev": true, 1700 | "dependencies": { 1701 | "to-regex-range": "^5.0.1" 1702 | }, 1703 | "engines": { 1704 | "node": ">=8" 1705 | } 1706 | }, 1707 | "node_modules/follow-redirects": { 1708 | "version": "1.15.2", 1709 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", 1710 | "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", 1711 | "funding": [ 1712 | { 1713 | "type": "individual", 1714 | "url": "https://github.com/sponsors/RubenVerborgh" 1715 | } 1716 | ], 1717 | "engines": { 1718 | "node": ">=4.0" 1719 | }, 1720 | "peerDependenciesMeta": { 1721 | "debug": { 1722 | "optional": true 1723 | } 1724 | } 1725 | }, 1726 | "node_modules/form-data": { 1727 | "version": "4.0.0", 1728 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 1729 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 1730 | "dependencies": { 1731 | "asynckit": "^0.4.0", 1732 | "combined-stream": "^1.0.8", 1733 | "mime-types": "^2.1.12" 1734 | }, 1735 | "engines": { 1736 | "node": ">= 6" 1737 | } 1738 | }, 1739 | "node_modules/fraction.js": { 1740 | "version": "4.2.0", 1741 | "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", 1742 | "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", 1743 | "dev": true, 1744 | "engines": { 1745 | "node": "*" 1746 | }, 1747 | "funding": { 1748 | "type": "patreon", 1749 | "url": "https://www.patreon.com/infusion" 1750 | } 1751 | }, 1752 | "node_modules/fs.realpath": { 1753 | "version": "1.0.0", 1754 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1755 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1756 | "dev": true 1757 | }, 1758 | "node_modules/fsevents": { 1759 | "version": "2.3.2", 1760 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 1761 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 1762 | "dev": true, 1763 | "hasInstallScript": true, 1764 | "optional": true, 1765 | "os": [ 1766 | "darwin" 1767 | ], 1768 | "engines": { 1769 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1770 | } 1771 | }, 1772 | "node_modules/function-bind": { 1773 | "version": "1.1.1", 1774 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1775 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1776 | "dev": true 1777 | }, 1778 | "node_modules/gensync": { 1779 | "version": "1.0.0-beta.2", 1780 | "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", 1781 | "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", 1782 | "dev": true, 1783 | "engines": { 1784 | "node": ">=6.9.0" 1785 | } 1786 | }, 1787 | "node_modules/get-stream": { 1788 | "version": "6.0.1", 1789 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 1790 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 1791 | "engines": { 1792 | "node": ">=10" 1793 | }, 1794 | "funding": { 1795 | "url": "https://github.com/sponsors/sindresorhus" 1796 | } 1797 | }, 1798 | "node_modules/glob": { 1799 | "version": "7.1.6", 1800 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1801 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1802 | "dev": true, 1803 | "dependencies": { 1804 | "fs.realpath": "^1.0.0", 1805 | "inflight": "^1.0.4", 1806 | "inherits": "2", 1807 | "minimatch": "^3.0.4", 1808 | "once": "^1.3.0", 1809 | "path-is-absolute": "^1.0.0" 1810 | }, 1811 | "engines": { 1812 | "node": "*" 1813 | }, 1814 | "funding": { 1815 | "url": "https://github.com/sponsors/isaacs" 1816 | } 1817 | }, 1818 | "node_modules/glob-parent": { 1819 | "version": "6.0.2", 1820 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1821 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1822 | "dev": true, 1823 | "dependencies": { 1824 | "is-glob": "^4.0.3" 1825 | }, 1826 | "engines": { 1827 | "node": ">=10.13.0" 1828 | } 1829 | }, 1830 | "node_modules/globals": { 1831 | "version": "11.12.0", 1832 | "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", 1833 | "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", 1834 | "dev": true, 1835 | "engines": { 1836 | "node": ">=4" 1837 | } 1838 | }, 1839 | "node_modules/has": { 1840 | "version": "1.0.3", 1841 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1842 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1843 | "dev": true, 1844 | "dependencies": { 1845 | "function-bind": "^1.1.1" 1846 | }, 1847 | "engines": { 1848 | "node": ">= 0.4.0" 1849 | } 1850 | }, 1851 | "node_modules/has-flag": { 1852 | "version": "3.0.0", 1853 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1854 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1855 | "dev": true, 1856 | "engines": { 1857 | "node": ">=4" 1858 | } 1859 | }, 1860 | "node_modules/human-signals": { 1861 | "version": "2.1.0", 1862 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 1863 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 1864 | "engines": { 1865 | "node": ">=10.17.0" 1866 | } 1867 | }, 1868 | "node_modules/inflight": { 1869 | "version": "1.0.6", 1870 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1871 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1872 | "dev": true, 1873 | "dependencies": { 1874 | "once": "^1.3.0", 1875 | "wrappy": "1" 1876 | } 1877 | }, 1878 | "node_modules/inherits": { 1879 | "version": "2.0.4", 1880 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1881 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1882 | "dev": true 1883 | }, 1884 | "node_modules/ini": { 1885 | "version": "1.3.8", 1886 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1887 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" 1888 | }, 1889 | "node_modules/is-binary-path": { 1890 | "version": "2.1.0", 1891 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1892 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1893 | "dev": true, 1894 | "dependencies": { 1895 | "binary-extensions": "^2.0.0" 1896 | }, 1897 | "engines": { 1898 | "node": ">=8" 1899 | } 1900 | }, 1901 | "node_modules/is-core-module": { 1902 | "version": "2.12.1", 1903 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", 1904 | "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", 1905 | "dev": true, 1906 | "dependencies": { 1907 | "has": "^1.0.3" 1908 | }, 1909 | "funding": { 1910 | "url": "https://github.com/sponsors/ljharb" 1911 | } 1912 | }, 1913 | "node_modules/is-docker": { 1914 | "version": "2.2.1", 1915 | "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", 1916 | "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", 1917 | "bin": { 1918 | "is-docker": "cli.js" 1919 | }, 1920 | "engines": { 1921 | "node": ">=8" 1922 | }, 1923 | "funding": { 1924 | "url": "https://github.com/sponsors/sindresorhus" 1925 | } 1926 | }, 1927 | "node_modules/is-extglob": { 1928 | "version": "2.1.1", 1929 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1930 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1931 | "dev": true, 1932 | "engines": { 1933 | "node": ">=0.10.0" 1934 | } 1935 | }, 1936 | "node_modules/is-fullwidth-code-point": { 1937 | "version": "3.0.0", 1938 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1939 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1940 | "engines": { 1941 | "node": ">=8" 1942 | } 1943 | }, 1944 | "node_modules/is-glob": { 1945 | "version": "4.0.3", 1946 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1947 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1948 | "dev": true, 1949 | "dependencies": { 1950 | "is-extglob": "^2.1.1" 1951 | }, 1952 | "engines": { 1953 | "node": ">=0.10.0" 1954 | } 1955 | }, 1956 | "node_modules/is-number": { 1957 | "version": "7.0.0", 1958 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1959 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1960 | "dev": true, 1961 | "engines": { 1962 | "node": ">=0.12.0" 1963 | } 1964 | }, 1965 | "node_modules/is-port-reachable": { 1966 | "version": "4.0.0", 1967 | "resolved": "https://registry.npmjs.org/is-port-reachable/-/is-port-reachable-4.0.0.tgz", 1968 | "integrity": "sha512-9UoipoxYmSk6Xy7QFgRv2HDyaysmgSG75TFQs6S+3pDM7ZhKTF/bskZV+0UlABHzKjNVhPjYCLfeZUEg1wXxig==", 1969 | "engines": { 1970 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1971 | }, 1972 | "funding": { 1973 | "url": "https://github.com/sponsors/sindresorhus" 1974 | } 1975 | }, 1976 | "node_modules/is-stream": { 1977 | "version": "2.0.1", 1978 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1979 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 1980 | "engines": { 1981 | "node": ">=8" 1982 | }, 1983 | "funding": { 1984 | "url": "https://github.com/sponsors/sindresorhus" 1985 | } 1986 | }, 1987 | "node_modules/is-wsl": { 1988 | "version": "2.2.0", 1989 | "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", 1990 | "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", 1991 | "dependencies": { 1992 | "is-docker": "^2.0.0" 1993 | }, 1994 | "engines": { 1995 | "node": ">=8" 1996 | } 1997 | }, 1998 | "node_modules/isexe": { 1999 | "version": "2.0.0", 2000 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2001 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 2002 | }, 2003 | "node_modules/jiti": { 2004 | "version": "1.19.1", 2005 | "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", 2006 | "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", 2007 | "dev": true, 2008 | "bin": { 2009 | "jiti": "bin/jiti.js" 2010 | } 2011 | }, 2012 | "node_modules/js-cookie": { 2013 | "version": "3.0.5", 2014 | "resolved": "https://registry.npmjs.org/js-cookie/-/js-cookie-3.0.5.tgz", 2015 | "integrity": "sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==", 2016 | "engines": { 2017 | "node": ">=14" 2018 | } 2019 | }, 2020 | "node_modules/js-tokens": { 2021 | "version": "4.0.0", 2022 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2023 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" 2024 | }, 2025 | "node_modules/jsesc": { 2026 | "version": "2.5.2", 2027 | "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", 2028 | "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", 2029 | "dev": true, 2030 | "bin": { 2031 | "jsesc": "bin/jsesc" 2032 | }, 2033 | "engines": { 2034 | "node": ">=4" 2035 | } 2036 | }, 2037 | "node_modules/json-schema-traverse": { 2038 | "version": "1.0.0", 2039 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", 2040 | "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" 2041 | }, 2042 | "node_modules/json5": { 2043 | "version": "2.2.3", 2044 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 2045 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 2046 | "dev": true, 2047 | "bin": { 2048 | "json5": "lib/cli.js" 2049 | }, 2050 | "engines": { 2051 | "node": ">=6" 2052 | } 2053 | }, 2054 | "node_modules/lilconfig": { 2055 | "version": "2.1.0", 2056 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", 2057 | "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", 2058 | "dev": true, 2059 | "engines": { 2060 | "node": ">=10" 2061 | } 2062 | }, 2063 | "node_modules/lines-and-columns": { 2064 | "version": "1.2.4", 2065 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 2066 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 2067 | "dev": true 2068 | }, 2069 | "node_modules/loose-envify": { 2070 | "version": "1.4.0", 2071 | "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", 2072 | "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", 2073 | "dependencies": { 2074 | "js-tokens": "^3.0.0 || ^4.0.0" 2075 | }, 2076 | "bin": { 2077 | "loose-envify": "cli.js" 2078 | } 2079 | }, 2080 | "node_modules/lru-cache": { 2081 | "version": "5.1.1", 2082 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", 2083 | "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", 2084 | "dev": true, 2085 | "dependencies": { 2086 | "yallist": "^3.0.2" 2087 | } 2088 | }, 2089 | "node_modules/magic-string": { 2090 | "version": "0.27.0", 2091 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", 2092 | "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", 2093 | "dev": true, 2094 | "dependencies": { 2095 | "@jridgewell/sourcemap-codec": "^1.4.13" 2096 | }, 2097 | "engines": { 2098 | "node": ">=12" 2099 | } 2100 | }, 2101 | "node_modules/merge-stream": { 2102 | "version": "2.0.0", 2103 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2104 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" 2105 | }, 2106 | "node_modules/merge2": { 2107 | "version": "1.4.1", 2108 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2109 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2110 | "dev": true, 2111 | "engines": { 2112 | "node": ">= 8" 2113 | } 2114 | }, 2115 | "node_modules/micromatch": { 2116 | "version": "4.0.5", 2117 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2118 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2119 | "dev": true, 2120 | "dependencies": { 2121 | "braces": "^3.0.2", 2122 | "picomatch": "^2.3.1" 2123 | }, 2124 | "engines": { 2125 | "node": ">=8.6" 2126 | } 2127 | }, 2128 | "node_modules/mime-db": { 2129 | "version": "1.52.0", 2130 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2131 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2132 | "engines": { 2133 | "node": ">= 0.6" 2134 | } 2135 | }, 2136 | "node_modules/mime-types": { 2137 | "version": "2.1.35", 2138 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2139 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2140 | "dependencies": { 2141 | "mime-db": "1.52.0" 2142 | }, 2143 | "engines": { 2144 | "node": ">= 0.6" 2145 | } 2146 | }, 2147 | "node_modules/mimic-fn": { 2148 | "version": "2.1.0", 2149 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2150 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2151 | "engines": { 2152 | "node": ">=6" 2153 | } 2154 | }, 2155 | "node_modules/minimatch": { 2156 | "version": "3.1.2", 2157 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2158 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2159 | "dependencies": { 2160 | "brace-expansion": "^1.1.7" 2161 | }, 2162 | "engines": { 2163 | "node": "*" 2164 | } 2165 | }, 2166 | "node_modules/minimist": { 2167 | "version": "1.2.8", 2168 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 2169 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 2170 | "funding": { 2171 | "url": "https://github.com/sponsors/ljharb" 2172 | } 2173 | }, 2174 | "node_modules/ms": { 2175 | "version": "2.1.2", 2176 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2177 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2178 | "dev": true 2179 | }, 2180 | "node_modules/mz": { 2181 | "version": "2.7.0", 2182 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 2183 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 2184 | "dev": true, 2185 | "dependencies": { 2186 | "any-promise": "^1.0.0", 2187 | "object-assign": "^4.0.1", 2188 | "thenify-all": "^1.0.0" 2189 | } 2190 | }, 2191 | "node_modules/nanoid": { 2192 | "version": "3.3.6", 2193 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", 2194 | "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", 2195 | "dev": true, 2196 | "funding": [ 2197 | { 2198 | "type": "github", 2199 | "url": "https://github.com/sponsors/ai" 2200 | } 2201 | ], 2202 | "bin": { 2203 | "nanoid": "bin/nanoid.cjs" 2204 | }, 2205 | "engines": { 2206 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2207 | } 2208 | }, 2209 | "node_modules/negotiator": { 2210 | "version": "0.6.3", 2211 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 2212 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 2213 | "engines": { 2214 | "node": ">= 0.6" 2215 | } 2216 | }, 2217 | "node_modules/node-releases": { 2218 | "version": "2.0.12", 2219 | "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.12.tgz", 2220 | "integrity": "sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==", 2221 | "dev": true 2222 | }, 2223 | "node_modules/normalize-path": { 2224 | "version": "3.0.0", 2225 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2226 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2227 | "dev": true, 2228 | "engines": { 2229 | "node": ">=0.10.0" 2230 | } 2231 | }, 2232 | "node_modules/normalize-range": { 2233 | "version": "0.1.2", 2234 | "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", 2235 | "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", 2236 | "dev": true, 2237 | "engines": { 2238 | "node": ">=0.10.0" 2239 | } 2240 | }, 2241 | "node_modules/npm-run-path": { 2242 | "version": "4.0.1", 2243 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 2244 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 2245 | "dependencies": { 2246 | "path-key": "^3.0.0" 2247 | }, 2248 | "engines": { 2249 | "node": ">=8" 2250 | } 2251 | }, 2252 | "node_modules/object-assign": { 2253 | "version": "4.1.1", 2254 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2255 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 2256 | "dev": true, 2257 | "engines": { 2258 | "node": ">=0.10.0" 2259 | } 2260 | }, 2261 | "node_modules/object-hash": { 2262 | "version": "3.0.0", 2263 | "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", 2264 | "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", 2265 | "dev": true, 2266 | "engines": { 2267 | "node": ">= 6" 2268 | } 2269 | }, 2270 | "node_modules/on-headers": { 2271 | "version": "1.0.2", 2272 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", 2273 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", 2274 | "engines": { 2275 | "node": ">= 0.8" 2276 | } 2277 | }, 2278 | "node_modules/once": { 2279 | "version": "1.4.0", 2280 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2281 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2282 | "dev": true, 2283 | "dependencies": { 2284 | "wrappy": "1" 2285 | } 2286 | }, 2287 | "node_modules/onetime": { 2288 | "version": "5.1.2", 2289 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2290 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2291 | "dependencies": { 2292 | "mimic-fn": "^2.1.0" 2293 | }, 2294 | "engines": { 2295 | "node": ">=6" 2296 | }, 2297 | "funding": { 2298 | "url": "https://github.com/sponsors/sindresorhus" 2299 | } 2300 | }, 2301 | "node_modules/path-is-absolute": { 2302 | "version": "1.0.1", 2303 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2304 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2305 | "dev": true, 2306 | "engines": { 2307 | "node": ">=0.10.0" 2308 | } 2309 | }, 2310 | "node_modules/path-is-inside": { 2311 | "version": "1.0.2", 2312 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", 2313 | "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==" 2314 | }, 2315 | "node_modules/path-key": { 2316 | "version": "3.1.1", 2317 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2318 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2319 | "engines": { 2320 | "node": ">=8" 2321 | } 2322 | }, 2323 | "node_modules/path-parse": { 2324 | "version": "1.0.7", 2325 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2326 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2327 | "dev": true 2328 | }, 2329 | "node_modules/path-to-regexp": { 2330 | "version": "2.2.1", 2331 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-2.2.1.tgz", 2332 | "integrity": "sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==" 2333 | }, 2334 | "node_modules/picocolors": { 2335 | "version": "1.0.0", 2336 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 2337 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 2338 | "dev": true 2339 | }, 2340 | "node_modules/picomatch": { 2341 | "version": "2.3.1", 2342 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2343 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2344 | "dev": true, 2345 | "engines": { 2346 | "node": ">=8.6" 2347 | }, 2348 | "funding": { 2349 | "url": "https://github.com/sponsors/jonschlinkert" 2350 | } 2351 | }, 2352 | "node_modules/pify": { 2353 | "version": "2.3.0", 2354 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 2355 | "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", 2356 | "dev": true, 2357 | "engines": { 2358 | "node": ">=0.10.0" 2359 | } 2360 | }, 2361 | "node_modules/pirates": { 2362 | "version": "4.0.6", 2363 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 2364 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 2365 | "dev": true, 2366 | "engines": { 2367 | "node": ">= 6" 2368 | } 2369 | }, 2370 | "node_modules/postcss": { 2371 | "version": "8.4.24", 2372 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", 2373 | "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", 2374 | "dev": true, 2375 | "funding": [ 2376 | { 2377 | "type": "opencollective", 2378 | "url": "https://opencollective.com/postcss/" 2379 | }, 2380 | { 2381 | "type": "tidelift", 2382 | "url": "https://tidelift.com/funding/github/npm/postcss" 2383 | }, 2384 | { 2385 | "type": "github", 2386 | "url": "https://github.com/sponsors/ai" 2387 | } 2388 | ], 2389 | "dependencies": { 2390 | "nanoid": "^3.3.6", 2391 | "picocolors": "^1.0.0", 2392 | "source-map-js": "^1.0.2" 2393 | }, 2394 | "engines": { 2395 | "node": "^10 || ^12 || >=14" 2396 | } 2397 | }, 2398 | "node_modules/postcss-import": { 2399 | "version": "15.1.0", 2400 | "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", 2401 | "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", 2402 | "dev": true, 2403 | "dependencies": { 2404 | "postcss-value-parser": "^4.0.0", 2405 | "read-cache": "^1.0.0", 2406 | "resolve": "^1.1.7" 2407 | }, 2408 | "engines": { 2409 | "node": ">=14.0.0" 2410 | }, 2411 | "peerDependencies": { 2412 | "postcss": "^8.0.0" 2413 | } 2414 | }, 2415 | "node_modules/postcss-js": { 2416 | "version": "4.0.1", 2417 | "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", 2418 | "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", 2419 | "dev": true, 2420 | "dependencies": { 2421 | "camelcase-css": "^2.0.1" 2422 | }, 2423 | "engines": { 2424 | "node": "^12 || ^14 || >= 16" 2425 | }, 2426 | "funding": { 2427 | "type": "opencollective", 2428 | "url": "https://opencollective.com/postcss/" 2429 | }, 2430 | "peerDependencies": { 2431 | "postcss": "^8.4.21" 2432 | } 2433 | }, 2434 | "node_modules/postcss-load-config": { 2435 | "version": "4.0.1", 2436 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.1.tgz", 2437 | "integrity": "sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==", 2438 | "dev": true, 2439 | "dependencies": { 2440 | "lilconfig": "^2.0.5", 2441 | "yaml": "^2.1.1" 2442 | }, 2443 | "engines": { 2444 | "node": ">= 14" 2445 | }, 2446 | "funding": { 2447 | "type": "opencollective", 2448 | "url": "https://opencollective.com/postcss/" 2449 | }, 2450 | "peerDependencies": { 2451 | "postcss": ">=8.0.9", 2452 | "ts-node": ">=9.0.0" 2453 | }, 2454 | "peerDependenciesMeta": { 2455 | "postcss": { 2456 | "optional": true 2457 | }, 2458 | "ts-node": { 2459 | "optional": true 2460 | } 2461 | } 2462 | }, 2463 | "node_modules/postcss-nested": { 2464 | "version": "6.0.1", 2465 | "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", 2466 | "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", 2467 | "dev": true, 2468 | "dependencies": { 2469 | "postcss-selector-parser": "^6.0.11" 2470 | }, 2471 | "engines": { 2472 | "node": ">=12.0" 2473 | }, 2474 | "funding": { 2475 | "type": "opencollective", 2476 | "url": "https://opencollective.com/postcss/" 2477 | }, 2478 | "peerDependencies": { 2479 | "postcss": "^8.2.14" 2480 | } 2481 | }, 2482 | "node_modules/postcss-selector-parser": { 2483 | "version": "6.0.13", 2484 | "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", 2485 | "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", 2486 | "dev": true, 2487 | "dependencies": { 2488 | "cssesc": "^3.0.0", 2489 | "util-deprecate": "^1.0.2" 2490 | }, 2491 | "engines": { 2492 | "node": ">=4" 2493 | } 2494 | }, 2495 | "node_modules/postcss-value-parser": { 2496 | "version": "4.2.0", 2497 | "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", 2498 | "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", 2499 | "dev": true 2500 | }, 2501 | "node_modules/proxy-from-env": { 2502 | "version": "1.1.0", 2503 | "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", 2504 | "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" 2505 | }, 2506 | "node_modules/punycode": { 2507 | "version": "1.4.1", 2508 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", 2509 | "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" 2510 | }, 2511 | "node_modules/queue-microtask": { 2512 | "version": "1.2.3", 2513 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2514 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2515 | "dev": true, 2516 | "funding": [ 2517 | { 2518 | "type": "github", 2519 | "url": "https://github.com/sponsors/feross" 2520 | }, 2521 | { 2522 | "type": "patreon", 2523 | "url": "https://www.patreon.com/feross" 2524 | }, 2525 | { 2526 | "type": "consulting", 2527 | "url": "https://feross.org/support" 2528 | } 2529 | ] 2530 | }, 2531 | "node_modules/range-parser": { 2532 | "version": "1.2.0", 2533 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 2534 | "integrity": "sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==", 2535 | "engines": { 2536 | "node": ">= 0.6" 2537 | } 2538 | }, 2539 | "node_modules/rc": { 2540 | "version": "1.2.8", 2541 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", 2542 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", 2543 | "dependencies": { 2544 | "deep-extend": "^0.6.0", 2545 | "ini": "~1.3.0", 2546 | "minimist": "^1.2.0", 2547 | "strip-json-comments": "~2.0.1" 2548 | }, 2549 | "bin": { 2550 | "rc": "cli.js" 2551 | } 2552 | }, 2553 | "node_modules/react": { 2554 | "version": "18.2.0", 2555 | "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", 2556 | "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", 2557 | "dependencies": { 2558 | "loose-envify": "^1.1.0" 2559 | }, 2560 | "engines": { 2561 | "node": ">=0.10.0" 2562 | } 2563 | }, 2564 | "node_modules/react-dom": { 2565 | "version": "18.2.0", 2566 | "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", 2567 | "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", 2568 | "dependencies": { 2569 | "loose-envify": "^1.1.0", 2570 | "scheduler": "^0.23.0" 2571 | }, 2572 | "peerDependencies": { 2573 | "react": "^18.2.0" 2574 | } 2575 | }, 2576 | "node_modules/react-hook-form": { 2577 | "version": "7.45.1", 2578 | "resolved": "https://registry.npmjs.org/react-hook-form/-/react-hook-form-7.45.1.tgz", 2579 | "integrity": "sha512-6dWoFJwycbuFfw/iKMcl+RdAOAOHDiF11KWYhNDRN/OkUt+Di5qsZHwA0OwsVnu9y135gkHpTw9DJA+WzCeR9w==", 2580 | "engines": { 2581 | "node": ">=12.22.0" 2582 | }, 2583 | "funding": { 2584 | "type": "opencollective", 2585 | "url": "https://opencollective.com/react-hook-form" 2586 | }, 2587 | "peerDependencies": { 2588 | "react": "^16.8.0 || ^17 || ^18" 2589 | } 2590 | }, 2591 | "node_modules/react-icons": { 2592 | "version": "4.10.1", 2593 | "resolved": "https://registry.npmjs.org/react-icons/-/react-icons-4.10.1.tgz", 2594 | "integrity": "sha512-/ngzDP/77tlCfqthiiGNZeYFACw85fUjZtLbedmJ5DTlNDIwETxhwBzdOJ21zj4iJdvc0J3y7yOsX3PpxAJzrw==", 2595 | "peerDependencies": { 2596 | "react": "*" 2597 | } 2598 | }, 2599 | "node_modules/react-refresh": { 2600 | "version": "0.14.0", 2601 | "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", 2602 | "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", 2603 | "dev": true, 2604 | "engines": { 2605 | "node": ">=0.10.0" 2606 | } 2607 | }, 2608 | "node_modules/react-router": { 2609 | "version": "6.14.1", 2610 | "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.14.1.tgz", 2611 | "integrity": "sha512-U4PfgvG55LdvbQjg5Y9QRWyVxIdO1LlpYT7x+tMAxd9/vmiPuJhIwdxZuIQLN/9e3O4KFDHYfR9gzGeYMasW8g==", 2612 | "dependencies": { 2613 | "@remix-run/router": "1.7.1" 2614 | }, 2615 | "engines": { 2616 | "node": ">=14" 2617 | }, 2618 | "peerDependencies": { 2619 | "react": ">=16.8" 2620 | } 2621 | }, 2622 | "node_modules/react-router-dom": { 2623 | "version": "6.14.1", 2624 | "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.14.1.tgz", 2625 | "integrity": "sha512-ssF6M5UkQjHK70fgukCJyjlda0Dgono2QGwqGvuk7D+EDGHdacEN3Yke2LTMjkrpHuFwBfDFsEjGVXBDmL+bWw==", 2626 | "dependencies": { 2627 | "@remix-run/router": "1.7.1", 2628 | "react-router": "6.14.1" 2629 | }, 2630 | "engines": { 2631 | "node": ">=14" 2632 | }, 2633 | "peerDependencies": { 2634 | "react": ">=16.8", 2635 | "react-dom": ">=16.8" 2636 | } 2637 | }, 2638 | "node_modules/read-cache": { 2639 | "version": "1.0.0", 2640 | "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", 2641 | "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", 2642 | "dev": true, 2643 | "dependencies": { 2644 | "pify": "^2.3.0" 2645 | } 2646 | }, 2647 | "node_modules/readdirp": { 2648 | "version": "3.6.0", 2649 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2650 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2651 | "dev": true, 2652 | "dependencies": { 2653 | "picomatch": "^2.2.1" 2654 | }, 2655 | "engines": { 2656 | "node": ">=8.10.0" 2657 | } 2658 | }, 2659 | "node_modules/registry-auth-token": { 2660 | "version": "3.3.2", 2661 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.2.tgz", 2662 | "integrity": "sha512-JL39c60XlzCVgNrO+qq68FoNb56w/m7JYvGR2jT5iR1xBrUA3Mfx5Twk5rqTThPmQKMWydGmq8oFtDlxfrmxnQ==", 2663 | "dependencies": { 2664 | "rc": "^1.1.6", 2665 | "safe-buffer": "^5.0.1" 2666 | } 2667 | }, 2668 | "node_modules/registry-url": { 2669 | "version": "3.1.0", 2670 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 2671 | "integrity": "sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA==", 2672 | "dependencies": { 2673 | "rc": "^1.0.1" 2674 | }, 2675 | "engines": { 2676 | "node": ">=0.10.0" 2677 | } 2678 | }, 2679 | "node_modules/require-from-string": { 2680 | "version": "2.0.2", 2681 | "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", 2682 | "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", 2683 | "engines": { 2684 | "node": ">=0.10.0" 2685 | } 2686 | }, 2687 | "node_modules/resolve": { 2688 | "version": "1.22.2", 2689 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", 2690 | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", 2691 | "dev": true, 2692 | "dependencies": { 2693 | "is-core-module": "^2.11.0", 2694 | "path-parse": "^1.0.7", 2695 | "supports-preserve-symlinks-flag": "^1.0.0" 2696 | }, 2697 | "bin": { 2698 | "resolve": "bin/resolve" 2699 | }, 2700 | "funding": { 2701 | "url": "https://github.com/sponsors/ljharb" 2702 | } 2703 | }, 2704 | "node_modules/reusify": { 2705 | "version": "1.0.4", 2706 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2707 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2708 | "dev": true, 2709 | "engines": { 2710 | "iojs": ">=1.0.0", 2711 | "node": ">=0.10.0" 2712 | } 2713 | }, 2714 | "node_modules/rollup": { 2715 | "version": "3.26.0", 2716 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.26.0.tgz", 2717 | "integrity": "sha512-YzJH0eunH2hr3knvF3i6IkLO/jTjAEwU4HoMUbQl4//Tnl3ou0e7P5SjxdDr8HQJdeUJShlbEHXrrnEHy1l7Yg==", 2718 | "dev": true, 2719 | "bin": { 2720 | "rollup": "dist/bin/rollup" 2721 | }, 2722 | "engines": { 2723 | "node": ">=14.18.0", 2724 | "npm": ">=8.0.0" 2725 | }, 2726 | "optionalDependencies": { 2727 | "fsevents": "~2.3.2" 2728 | } 2729 | }, 2730 | "node_modules/run-parallel": { 2731 | "version": "1.2.0", 2732 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2733 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2734 | "dev": true, 2735 | "funding": [ 2736 | { 2737 | "type": "github", 2738 | "url": "https://github.com/sponsors/feross" 2739 | }, 2740 | { 2741 | "type": "patreon", 2742 | "url": "https://www.patreon.com/feross" 2743 | }, 2744 | { 2745 | "type": "consulting", 2746 | "url": "https://feross.org/support" 2747 | } 2748 | ], 2749 | "dependencies": { 2750 | "queue-microtask": "^1.2.2" 2751 | } 2752 | }, 2753 | "node_modules/safe-buffer": { 2754 | "version": "5.1.2", 2755 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 2756 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 2757 | }, 2758 | "node_modules/scheduler": { 2759 | "version": "0.23.0", 2760 | "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", 2761 | "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", 2762 | "dependencies": { 2763 | "loose-envify": "^1.1.0" 2764 | } 2765 | }, 2766 | "node_modules/semver": { 2767 | "version": "6.3.0", 2768 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 2769 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", 2770 | "dev": true, 2771 | "bin": { 2772 | "semver": "bin/semver.js" 2773 | } 2774 | }, 2775 | "node_modules/serve": { 2776 | "version": "14.2.0", 2777 | "resolved": "https://registry.npmjs.org/serve/-/serve-14.2.0.tgz", 2778 | "integrity": "sha512-+HOw/XK1bW8tw5iBilBz/mJLWRzM8XM6MPxL4J/dKzdxq1vfdEWSwhaR7/yS8EJp5wzvP92p1qirysJvnEtjXg==", 2779 | "dependencies": { 2780 | "@zeit/schemas": "2.29.0", 2781 | "ajv": "8.11.0", 2782 | "arg": "5.0.2", 2783 | "boxen": "7.0.0", 2784 | "chalk": "5.0.1", 2785 | "chalk-template": "0.4.0", 2786 | "clipboardy": "3.0.0", 2787 | "compression": "1.7.4", 2788 | "is-port-reachable": "4.0.0", 2789 | "serve-handler": "6.1.5", 2790 | "update-check": "1.5.4" 2791 | }, 2792 | "bin": { 2793 | "serve": "build/main.js" 2794 | }, 2795 | "engines": { 2796 | "node": ">= 14" 2797 | } 2798 | }, 2799 | "node_modules/serve-handler": { 2800 | "version": "6.1.5", 2801 | "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.5.tgz", 2802 | "integrity": "sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==", 2803 | "dependencies": { 2804 | "bytes": "3.0.0", 2805 | "content-disposition": "0.5.2", 2806 | "fast-url-parser": "1.1.3", 2807 | "mime-types": "2.1.18", 2808 | "minimatch": "3.1.2", 2809 | "path-is-inside": "1.0.2", 2810 | "path-to-regexp": "2.2.1", 2811 | "range-parser": "1.2.0" 2812 | } 2813 | }, 2814 | "node_modules/serve-handler/node_modules/mime-db": { 2815 | "version": "1.33.0", 2816 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 2817 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", 2818 | "engines": { 2819 | "node": ">= 0.6" 2820 | } 2821 | }, 2822 | "node_modules/serve-handler/node_modules/mime-types": { 2823 | "version": "2.1.18", 2824 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 2825 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 2826 | "dependencies": { 2827 | "mime-db": "~1.33.0" 2828 | }, 2829 | "engines": { 2830 | "node": ">= 0.6" 2831 | } 2832 | }, 2833 | "node_modules/serve/node_modules/chalk": { 2834 | "version": "5.0.1", 2835 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.0.1.tgz", 2836 | "integrity": "sha512-Fo07WOYGqMfCWHOzSXOt2CxDbC6skS/jO9ynEcmpANMoPrD+W1r1K6Vx7iNm+AQmETU1Xr2t+n8nzkV9t6xh3w==", 2837 | "engines": { 2838 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 2839 | }, 2840 | "funding": { 2841 | "url": "https://github.com/chalk/chalk?sponsor=1" 2842 | } 2843 | }, 2844 | "node_modules/shebang-command": { 2845 | "version": "2.0.0", 2846 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2847 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2848 | "dependencies": { 2849 | "shebang-regex": "^3.0.0" 2850 | }, 2851 | "engines": { 2852 | "node": ">=8" 2853 | } 2854 | }, 2855 | "node_modules/shebang-regex": { 2856 | "version": "3.0.0", 2857 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2858 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2859 | "engines": { 2860 | "node": ">=8" 2861 | } 2862 | }, 2863 | "node_modules/signal-exit": { 2864 | "version": "3.0.7", 2865 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2866 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 2867 | }, 2868 | "node_modules/source-map-js": { 2869 | "version": "1.0.2", 2870 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 2871 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 2872 | "dev": true, 2873 | "engines": { 2874 | "node": ">=0.10.0" 2875 | } 2876 | }, 2877 | "node_modules/string-width": { 2878 | "version": "5.1.2", 2879 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 2880 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 2881 | "dependencies": { 2882 | "eastasianwidth": "^0.2.0", 2883 | "emoji-regex": "^9.2.2", 2884 | "strip-ansi": "^7.0.1" 2885 | }, 2886 | "engines": { 2887 | "node": ">=12" 2888 | }, 2889 | "funding": { 2890 | "url": "https://github.com/sponsors/sindresorhus" 2891 | } 2892 | }, 2893 | "node_modules/strip-ansi": { 2894 | "version": "7.1.0", 2895 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 2896 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 2897 | "dependencies": { 2898 | "ansi-regex": "^6.0.1" 2899 | }, 2900 | "engines": { 2901 | "node": ">=12" 2902 | }, 2903 | "funding": { 2904 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 2905 | } 2906 | }, 2907 | "node_modules/strip-final-newline": { 2908 | "version": "2.0.0", 2909 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2910 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 2911 | "engines": { 2912 | "node": ">=6" 2913 | } 2914 | }, 2915 | "node_modules/strip-json-comments": { 2916 | "version": "2.0.1", 2917 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2918 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 2919 | "engines": { 2920 | "node": ">=0.10.0" 2921 | } 2922 | }, 2923 | "node_modules/sucrase": { 2924 | "version": "3.32.0", 2925 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.32.0.tgz", 2926 | "integrity": "sha512-ydQOU34rpSyj2TGyz4D2p8rbktIOZ8QY9s+DGLvFU1i5pWJE8vkpruCjGCMHsdXwnD7JDcS+noSwM/a7zyNFDQ==", 2927 | "dev": true, 2928 | "dependencies": { 2929 | "@jridgewell/gen-mapping": "^0.3.2", 2930 | "commander": "^4.0.0", 2931 | "glob": "7.1.6", 2932 | "lines-and-columns": "^1.1.6", 2933 | "mz": "^2.7.0", 2934 | "pirates": "^4.0.1", 2935 | "ts-interface-checker": "^0.1.9" 2936 | }, 2937 | "bin": { 2938 | "sucrase": "bin/sucrase", 2939 | "sucrase-node": "bin/sucrase-node" 2940 | }, 2941 | "engines": { 2942 | "node": ">=8" 2943 | } 2944 | }, 2945 | "node_modules/supports-color": { 2946 | "version": "5.5.0", 2947 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2948 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2949 | "dev": true, 2950 | "dependencies": { 2951 | "has-flag": "^3.0.0" 2952 | }, 2953 | "engines": { 2954 | "node": ">=4" 2955 | } 2956 | }, 2957 | "node_modules/supports-preserve-symlinks-flag": { 2958 | "version": "1.0.0", 2959 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2960 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2961 | "dev": true, 2962 | "engines": { 2963 | "node": ">= 0.4" 2964 | }, 2965 | "funding": { 2966 | "url": "https://github.com/sponsors/ljharb" 2967 | } 2968 | }, 2969 | "node_modules/tailwind-merge": { 2970 | "version": "1.14.0", 2971 | "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz", 2972 | "integrity": "sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==", 2973 | "funding": { 2974 | "type": "github", 2975 | "url": "https://github.com/sponsors/dcastil" 2976 | } 2977 | }, 2978 | "node_modules/tailwindcss": { 2979 | "version": "3.3.2", 2980 | "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.3.2.tgz", 2981 | "integrity": "sha512-9jPkMiIBXvPc2KywkraqsUfbfj+dHDb+JPWtSJa9MLFdrPyazI7q6WX2sUrm7R9eVR7qqv3Pas7EvQFzxKnI6w==", 2982 | "dev": true, 2983 | "dependencies": { 2984 | "@alloc/quick-lru": "^5.2.0", 2985 | "arg": "^5.0.2", 2986 | "chokidar": "^3.5.3", 2987 | "didyoumean": "^1.2.2", 2988 | "dlv": "^1.1.3", 2989 | "fast-glob": "^3.2.12", 2990 | "glob-parent": "^6.0.2", 2991 | "is-glob": "^4.0.3", 2992 | "jiti": "^1.18.2", 2993 | "lilconfig": "^2.1.0", 2994 | "micromatch": "^4.0.5", 2995 | "normalize-path": "^3.0.0", 2996 | "object-hash": "^3.0.0", 2997 | "picocolors": "^1.0.0", 2998 | "postcss": "^8.4.23", 2999 | "postcss-import": "^15.1.0", 3000 | "postcss-js": "^4.0.1", 3001 | "postcss-load-config": "^4.0.1", 3002 | "postcss-nested": "^6.0.1", 3003 | "postcss-selector-parser": "^6.0.11", 3004 | "postcss-value-parser": "^4.2.0", 3005 | "resolve": "^1.22.2", 3006 | "sucrase": "^3.32.0" 3007 | }, 3008 | "bin": { 3009 | "tailwind": "lib/cli.js", 3010 | "tailwindcss": "lib/cli.js" 3011 | }, 3012 | "engines": { 3013 | "node": ">=14.0.0" 3014 | } 3015 | }, 3016 | "node_modules/thenify": { 3017 | "version": "3.3.1", 3018 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 3019 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 3020 | "dev": true, 3021 | "dependencies": { 3022 | "any-promise": "^1.0.0" 3023 | } 3024 | }, 3025 | "node_modules/thenify-all": { 3026 | "version": "1.6.0", 3027 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 3028 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 3029 | "dev": true, 3030 | "dependencies": { 3031 | "thenify": ">= 3.1.0 < 4" 3032 | }, 3033 | "engines": { 3034 | "node": ">=0.8" 3035 | } 3036 | }, 3037 | "node_modules/to-fast-properties": { 3038 | "version": "2.0.0", 3039 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 3040 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 3041 | "dev": true, 3042 | "engines": { 3043 | "node": ">=4" 3044 | } 3045 | }, 3046 | "node_modules/to-regex-range": { 3047 | "version": "5.0.1", 3048 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3049 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3050 | "dev": true, 3051 | "dependencies": { 3052 | "is-number": "^7.0.0" 3053 | }, 3054 | "engines": { 3055 | "node": ">=8.0" 3056 | } 3057 | }, 3058 | "node_modules/ts-interface-checker": { 3059 | "version": "0.1.13", 3060 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 3061 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", 3062 | "dev": true 3063 | }, 3064 | "node_modules/type-fest": { 3065 | "version": "2.19.0", 3066 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", 3067 | "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", 3068 | "engines": { 3069 | "node": ">=12.20" 3070 | }, 3071 | "funding": { 3072 | "url": "https://github.com/sponsors/sindresorhus" 3073 | } 3074 | }, 3075 | "node_modules/update-browserslist-db": { 3076 | "version": "1.0.11", 3077 | "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", 3078 | "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", 3079 | "dev": true, 3080 | "funding": [ 3081 | { 3082 | "type": "opencollective", 3083 | "url": "https://opencollective.com/browserslist" 3084 | }, 3085 | { 3086 | "type": "tidelift", 3087 | "url": "https://tidelift.com/funding/github/npm/browserslist" 3088 | }, 3089 | { 3090 | "type": "github", 3091 | "url": "https://github.com/sponsors/ai" 3092 | } 3093 | ], 3094 | "dependencies": { 3095 | "escalade": "^3.1.1", 3096 | "picocolors": "^1.0.0" 3097 | }, 3098 | "bin": { 3099 | "update-browserslist-db": "cli.js" 3100 | }, 3101 | "peerDependencies": { 3102 | "browserslist": ">= 4.21.0" 3103 | } 3104 | }, 3105 | "node_modules/update-check": { 3106 | "version": "1.5.4", 3107 | "resolved": "https://registry.npmjs.org/update-check/-/update-check-1.5.4.tgz", 3108 | "integrity": "sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==", 3109 | "dependencies": { 3110 | "registry-auth-token": "3.3.2", 3111 | "registry-url": "3.1.0" 3112 | } 3113 | }, 3114 | "node_modules/uri-js": { 3115 | "version": "4.4.1", 3116 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3117 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3118 | "dependencies": { 3119 | "punycode": "^2.1.0" 3120 | } 3121 | }, 3122 | "node_modules/uri-js/node_modules/punycode": { 3123 | "version": "2.3.0", 3124 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", 3125 | "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", 3126 | "engines": { 3127 | "node": ">=6" 3128 | } 3129 | }, 3130 | "node_modules/util-deprecate": { 3131 | "version": "1.0.2", 3132 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 3133 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", 3134 | "dev": true 3135 | }, 3136 | "node_modules/vary": { 3137 | "version": "1.1.2", 3138 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 3139 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 3140 | "engines": { 3141 | "node": ">= 0.8" 3142 | } 3143 | }, 3144 | "node_modules/vite": { 3145 | "version": "4.3.9", 3146 | "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", 3147 | "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", 3148 | "dev": true, 3149 | "dependencies": { 3150 | "esbuild": "^0.17.5", 3151 | "postcss": "^8.4.23", 3152 | "rollup": "^3.21.0" 3153 | }, 3154 | "bin": { 3155 | "vite": "bin/vite.js" 3156 | }, 3157 | "engines": { 3158 | "node": "^14.18.0 || >=16.0.0" 3159 | }, 3160 | "optionalDependencies": { 3161 | "fsevents": "~2.3.2" 3162 | }, 3163 | "peerDependencies": { 3164 | "@types/node": ">= 14", 3165 | "less": "*", 3166 | "sass": "*", 3167 | "stylus": "*", 3168 | "sugarss": "*", 3169 | "terser": "^5.4.0" 3170 | }, 3171 | "peerDependenciesMeta": { 3172 | "@types/node": { 3173 | "optional": true 3174 | }, 3175 | "less": { 3176 | "optional": true 3177 | }, 3178 | "sass": { 3179 | "optional": true 3180 | }, 3181 | "stylus": { 3182 | "optional": true 3183 | }, 3184 | "sugarss": { 3185 | "optional": true 3186 | }, 3187 | "terser": { 3188 | "optional": true 3189 | } 3190 | } 3191 | }, 3192 | "node_modules/which": { 3193 | "version": "2.0.2", 3194 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3195 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3196 | "dependencies": { 3197 | "isexe": "^2.0.0" 3198 | }, 3199 | "bin": { 3200 | "node-which": "bin/node-which" 3201 | }, 3202 | "engines": { 3203 | "node": ">= 8" 3204 | } 3205 | }, 3206 | "node_modules/widest-line": { 3207 | "version": "4.0.1", 3208 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", 3209 | "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", 3210 | "dependencies": { 3211 | "string-width": "^5.0.1" 3212 | }, 3213 | "engines": { 3214 | "node": ">=12" 3215 | }, 3216 | "funding": { 3217 | "url": "https://github.com/sponsors/sindresorhus" 3218 | } 3219 | }, 3220 | "node_modules/wrap-ansi": { 3221 | "version": "8.1.0", 3222 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 3223 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 3224 | "dependencies": { 3225 | "ansi-styles": "^6.1.0", 3226 | "string-width": "^5.0.1", 3227 | "strip-ansi": "^7.0.1" 3228 | }, 3229 | "engines": { 3230 | "node": ">=12" 3231 | }, 3232 | "funding": { 3233 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 3234 | } 3235 | }, 3236 | "node_modules/wrap-ansi/node_modules/ansi-styles": { 3237 | "version": "6.2.1", 3238 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 3239 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 3240 | "engines": { 3241 | "node": ">=12" 3242 | }, 3243 | "funding": { 3244 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 3245 | } 3246 | }, 3247 | "node_modules/wrappy": { 3248 | "version": "1.0.2", 3249 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3250 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 3251 | "dev": true 3252 | }, 3253 | "node_modules/yallist": { 3254 | "version": "3.1.1", 3255 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", 3256 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", 3257 | "dev": true 3258 | }, 3259 | "node_modules/yaml": { 3260 | "version": "2.3.1", 3261 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.1.tgz", 3262 | "integrity": "sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==", 3263 | "dev": true, 3264 | "engines": { 3265 | "node": ">= 14" 3266 | } 3267 | } 3268 | } 3269 | } 3270 | --------------------------------------------------------------------------------