├── fe ├── src │ ├── App.css │ ├── pages │ │ ├── login │ │ │ ├── index.jsx │ │ │ └── login.jsx │ │ ├── home │ │ │ ├── index.jsx │ │ │ └── home.jsx │ │ ├── error │ │ │ ├── index.jsx │ │ │ └── error.jsx │ │ └── register │ │ │ ├── index.jsx │ │ │ └── register.jsx │ ├── App.jsx │ ├── components │ │ ├── Layout.jsx │ │ ├── Title.jsx │ │ ├── HeroContainer.jsx │ │ ├── Notify.jsx │ │ ├── AddTaskForm.jsx │ │ ├── flexi_button.jsx.bckp │ │ └── features_form.jsx.bckp │ ├── utils │ │ ├── time.js │ │ └── router.jsx │ ├── main.jsx │ ├── index.css │ ├── hooks │ │ └── useNotification.jsx │ ├── actions │ │ ├── features.action.js │ │ └── users.action.js │ └── assets │ │ └── react.svg ├── .env.example ├── postcss.config.js ├── vite.config.js ├── tailwind.config.js ├── .gitignore ├── index.html ├── README.md ├── .eslintrc.cjs ├── package.json └── public │ └── vite.svg ├── .gitignore ├── api ├── src │ ├── type │ │ ├── users.type.ts │ │ ├── features.type.ts │ │ └── query.type.ts │ ├── config │ │ ├── database.config.ts │ │ └── response.config.ts │ ├── controllers │ │ ├── features.controller.ts │ │ └── users.controller.ts │ ├── routes │ │ ├── main.route.ts │ │ ├── features.route.ts │ │ ├── users.route.ts │ │ └── features.route.ts_ │ ├── middleware.ts │ ├── server.ts │ ├── libs │ │ └── token-creation.libs.ts │ └── models │ │ └── mapping.ts ├── .env.example ├── globals.d.ts ├── docker-compose.yaml ├── tsconfig.json ├── package.json ├── tsconfig.tsbuildinfo └── package-lock.json ├── app.sh ├── app.cmd ├── cuymodoro.sql └── README.md /fe/src/App.css: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /fe/.env.example: -------------------------------------------------------------------------------- 1 | VITE_API_URL="http://localhost:3002" 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | fe/node_m* 2 | api/node_m* 3 | fe/.env 4 | api/.env 5 | dist 6 | build -------------------------------------------------------------------------------- /fe/src/pages/login/index.jsx: -------------------------------------------------------------------------------- 1 | import Login from "./login"; 2 | 3 | export default Login; 4 | -------------------------------------------------------------------------------- /fe/src/pages/home/index.jsx: -------------------------------------------------------------------------------- 1 | import HomePage from "./home"; 2 | 3 | export default HomePage; 4 | -------------------------------------------------------------------------------- /fe/src/pages/error/index.jsx: -------------------------------------------------------------------------------- 1 | import ErrorPage from "./error"; 2 | 3 | export default ErrorPage; 4 | -------------------------------------------------------------------------------- /fe/src/pages/register/index.jsx: -------------------------------------------------------------------------------- 1 | import Register from "./register"; 2 | 3 | export default Register; 4 | -------------------------------------------------------------------------------- /api/src/type/users.type.ts: -------------------------------------------------------------------------------- 1 | export type UserFormParams = { 2 | username: string; 3 | password: string; 4 | }; -------------------------------------------------------------------------------- /fe/postcss.config.js: -------------------------------------------------------------------------------- 1 | export default { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /api/.env.example: -------------------------------------------------------------------------------- 1 | DATABASE_HOST="127.0.0.1" 2 | DATABASE_USER="sqluser" 3 | DATABASE_NAME="cuymodoro" 4 | DATABASE_PASSWORD="1234" 5 | PORT=8080 -------------------------------------------------------------------------------- /fe/src/pages/error/error.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | function ErrorPage() { 4 | return
ErrorPage
; 5 | } 6 | 7 | export default ErrorPage; 8 | -------------------------------------------------------------------------------- /api/src/type/features.type.ts: -------------------------------------------------------------------------------- 1 | export type FeatureFormParams = { 2 | username: string, 3 | title: string, 4 | level: "newcomers" | "reguler" | "enthusiast" 5 | } -------------------------------------------------------------------------------- /fe/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 | -------------------------------------------------------------------------------- /fe/src/App.jsx: -------------------------------------------------------------------------------- 1 | import { RouterProvider } from "react-router-dom"; 2 | import { router } from "./utils/router"; 3 | 4 | export default function App() { 5 | return ; 6 | } 7 | -------------------------------------------------------------------------------- /fe/src/components/Layout.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | function Layouts({ children }) { 4 | return
{children}
; 5 | } 6 | 7 | export default Layouts; 8 | -------------------------------------------------------------------------------- /fe/src/utils/time.js: -------------------------------------------------------------------------------- 1 | export function timeNow() { 2 | const date = new Date(); 3 | const hours = date.getHours(); 4 | const minutes = date.getMinutes(); 5 | const time = `${hours}:${minutes}`; 6 | return time; 7 | } -------------------------------------------------------------------------------- /fe/src/components/Title.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | function Title({ title }) { 4 | return ( 5 |
6 |

{title}

7 |
8 |
9 | ); 10 | } 11 | 12 | export default Title; 13 | -------------------------------------------------------------------------------- /fe/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | export default { 3 | content: ["./src/**/*.{html,jsx, js}"], 4 | theme: { 5 | extend: {}, 6 | }, 7 | daisyui: { 8 | themes: ["dark"], 9 | }, 10 | plugins: [require('daisyui')], 11 | } 12 | 13 | -------------------------------------------------------------------------------- /fe/src/main.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom/client"; 3 | import App from "./App.jsx"; 4 | import "./index.css"; 5 | 6 | ReactDOM.createRoot(document.getElementById("root")).render( 7 | 8 | 9 | 10 | ); 11 | -------------------------------------------------------------------------------- /api/globals.d.ts: -------------------------------------------------------------------------------- 1 | declare global { 2 | namespace NodeJS { 3 | interface ProcessEnv { 4 | DATABASE_HOST: string; 5 | DATABASE_USER: string; 6 | DATABASE_NAME: string; 7 | DATABASE_PASSWORD: string; 8 | PORT: string; 9 | } 10 | } 11 | } 12 | 13 | export { }; 14 | -------------------------------------------------------------------------------- /api/docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: "3.8" 2 | services: 3 | db: 4 | image: mysql:8.0 5 | cap_add: 6 | - SYS_NICE 7 | restart: always 8 | environment: 9 | - MYSQL_DATABASE=cuy 10 | - MYSQL_ROOT_PASSWORD=1234 11 | ports: 12 | - "3306:3306" 13 | volumes: 14 | db: 15 | driver: local 16 | -------------------------------------------------------------------------------- /fe/src/components/HeroContainer.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | function HeroContainer({ children }) { 4 | return ( 5 |
6 |
7 | {children} 8 |
9 |
10 | ); 11 | } 12 | 13 | export default HeroContainer; 14 | -------------------------------------------------------------------------------- /fe/.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 | -------------------------------------------------------------------------------- /api/src/config/database.config.ts: -------------------------------------------------------------------------------- 1 | import mysql, { Pool } from "mysql"; 2 | import dotenv from "dotenv"; 3 | dotenv.config(); 4 | 5 | export const connection: Pool = mysql.createPool({ 6 | connectionLimit: 10, 7 | host: process.env.DATABASE_HOST, 8 | user: process.env.DATABASE_USER, 9 | password: process.env.DATABASE_PASSWORD, 10 | database: process.env.DATABASE_NAME, 11 | }); 12 | -------------------------------------------------------------------------------- /fe/src/index.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; 4 | 5 | body { 6 | margin: 0; 7 | font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 8 | 'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', 9 | sans-serif; 10 | -webkit-font-smoothing: antialiased; 11 | -moz-osx-font-smoothing: grayscale; 12 | } -------------------------------------------------------------------------------- /fe/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /fe/README.md: -------------------------------------------------------------------------------- 1 | # React + Vite 2 | 3 | This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. 4 | 5 | Currently, two official plugins are available: 6 | 7 | - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh 8 | - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh 9 | -------------------------------------------------------------------------------- /api/src/type/query.type.ts: -------------------------------------------------------------------------------- 1 | interface Query { 2 | tableName: string; 3 | } 4 | 5 | export interface ReadQuery extends Query { 6 | searchData: Record; 7 | selectedColumn: Array; 8 | } 9 | 10 | export interface WriteQuery extends Query { 11 | data: Record; 12 | conditions?: Record; 13 | } 14 | 15 | export interface ReadQueryParams extends Query { 16 | params: Record 17 | columns?: Array 18 | } 19 | 20 | export interface WriteQueryParams extends Query { 21 | data: Record 22 | conditions?: Record 23 | } -------------------------------------------------------------------------------- /fe/src/hooks/useNotification.jsx: -------------------------------------------------------------------------------- 1 | import { useEffect, useState } from "react"; 2 | import { useActionData } from "react-router-dom"; 3 | 4 | export default function useNotification() { 5 | const action = useActionData(); 6 | const [notify, setNotify] = useState(false); 7 | const [notifyMessage, setNotifyMessage] = useState(""); 8 | 9 | useEffect(() => { 10 | if (action?.data) { 11 | setNotify(true); 12 | setNotifyMessage(action?.data?.message); 13 | setTimeout(() => { 14 | setNotify(false); 15 | }, 3000); 16 | } 17 | }, [action]); 18 | 19 | return { notify, notifyMessage }; 20 | } 21 | -------------------------------------------------------------------------------- /api/src/controllers/features.controller.ts: -------------------------------------------------------------------------------- 1 | import { create } from "@models/mapping" 2 | import { FeatureFormParams } from "../type/features.type"; 3 | import { WriteQuery } from "../type/query.type"; 4 | 5 | async function addNewTask({ username, title, level }: FeatureFormParams) { 6 | try { 7 | const q: WriteQuery = { 8 | tableName: "features", 9 | data: { username, title, level } 10 | } 11 | 12 | const createFeature = await create({ tableName: q.tableName, data: q.data }); 13 | 14 | return createFeature; 15 | } catch (error) { 16 | return error as string; 17 | } 18 | } 19 | 20 | export = { addNewTask }; 21 | -------------------------------------------------------------------------------- /api/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "paths": { 4 | "@routes/*": ["./src/routes/*"], 5 | "@config/*": ["./src/config/*"], 6 | "@models/*": ["./src/models/*"], 7 | "@libs/*": ["./src/libs/*"], 8 | "@type/*": ["./src/types/*"], 9 | "@controllers/*": ["./src/controllers/*"] 10 | }, 11 | "target": "es2016", 12 | "module": "commonjs", 13 | "outDir": "./build", 14 | "esModuleInterop": true, 15 | "forceConsistentCasingInFileNames": true, 16 | "strict": true, 17 | "noImplicitAny": true, 18 | "skipLibCheck": true, 19 | }, 20 | "exclude": ["node_modules"], 21 | } 22 | -------------------------------------------------------------------------------- /api/src/routes/main.route.ts: -------------------------------------------------------------------------------- 1 | import HyperE, { Request, Response, Router } from "hyper-express"; 2 | import { OK } from "@config/response.config"; 3 | 4 | const main_router: Router = new HyperE.Router(); 5 | 6 | main_router.get("/", (_: Request, response: Response): void => { 7 | OK(response, { 8 | message: "cuymodoro API", 9 | data: { 10 | api_version: "1.0.0" 11 | }, 12 | }); 13 | }); 14 | 15 | main_router.get("/status", (_: Request, response: Response): void => { 16 | OK(response, { 17 | message: "cuymodoro API STATUS", 18 | data: { 19 | status: "OK" 20 | }, 21 | }); 22 | }); 23 | 24 | export default main_router; 25 | -------------------------------------------------------------------------------- /fe/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { browser: true, es2020: true }, 4 | extends: [ 5 | 'eslint:recommended', 6 | 'plugin:react/recommended', 7 | 'plugin:react/jsx-runtime', 8 | 'plugin:react-hooks/recommended', 9 | ], 10 | ignorePatterns: ['dist', '.eslintrc.cjs'], 11 | parserOptions: { ecmaVersion: 'latest', sourceType: 'module' }, 12 | settings: { react: { version: '18.2' } }, 13 | plugins: ['react-refresh'], 14 | rules: { 15 | 'react/jsx-no-target-blank': 'off', 16 | 'react-refresh/only-export-components': [ 17 | 'warn', 18 | { allowConstantExport: true }, 19 | ], 20 | }, 21 | } 22 | -------------------------------------------------------------------------------- /api/src/middleware.ts: -------------------------------------------------------------------------------- 1 | import { 2 | Request, 3 | Response, 4 | } from "hyper-express"; 5 | import { FAIL } from "@config/response.config"; 6 | import UserController from "@controllers/users.controller"; 7 | 8 | export const authMiddleware = async ( 9 | request: Request, 10 | response: Response, 11 | ) => { 12 | const { username } = await request.json() 13 | const token = request.headers["cuytoken"]; 14 | 15 | if (!token) FAIL(response, "cuytoken required for authorization"); 16 | 17 | const isTokenVerify = await UserController.isTokenVerified({ username, token }) 18 | 19 | if (!isTokenVerify) { 20 | FAIL(response, "cuytoken missmatched"); 21 | } 22 | }; 23 | -------------------------------------------------------------------------------- /api/src/server.ts: -------------------------------------------------------------------------------- 1 | import HyperE from "hyper-express"; 2 | import dotenv from "dotenv"; 3 | import cors from "cors"; 4 | import main_router from "@routes/main.route"; 5 | import user_router from "@routes/users.route"; 6 | import features_route from "@routes/features.route"; 7 | 8 | const PORT: number = Number(process.env.PORT) || 3002; 9 | const hyper = new HyperE.Server(); 10 | dotenv.config(); 11 | 12 | hyper.use(cors()); 13 | 14 | hyper.use("/", main_router); 15 | hyper.use("/users", user_router); 16 | hyper.use('/features', features_route); 17 | 18 | hyper 19 | .listen(PORT) 20 | .then(() => console.log(`server running at ${PORT}`)) 21 | .catch(() => console.warn(`something wrong in the server`)); 22 | -------------------------------------------------------------------------------- /fe/src/actions/features.action.js: -------------------------------------------------------------------------------- 1 | import axios from "axios" 2 | 3 | export const addFeatureAction = async ({ request }) => { 4 | const form = await request.formData(); 5 | try { 6 | const addFeature = await axios.post( 7 | `${import.meta.env.VITE_API_URL}/features/add`, 8 | { 9 | username: localStorage.getItem("username"), 10 | title: form.get("title"), 11 | level: form.get("level"), 12 | }, 13 | { headers: { cuytoken: localStorage.getItem("token") } } 14 | ); 15 | return addFeature; 16 | } catch (err) { 17 | console.error(`[ACTION ADD FEATURE ERROR]: ${err}`); 18 | } 19 | }; -------------------------------------------------------------------------------- /api/src/config/response.config.ts: -------------------------------------------------------------------------------- 1 | import { Response } from 'hyper-express'; 2 | 3 | interface ApiResponse { 4 | is_success?: boolean; 5 | message?: string; 6 | data?: Type; 7 | } 8 | 9 | export function OK(response: Response, payload: ApiResponse): void { 10 | const apiResponse: ApiResponse = { 11 | is_success: true, 12 | message: payload.message || 'Success', 13 | data: payload.data, 14 | }; 15 | response.json(apiResponse); 16 | } 17 | 18 | export function FAIL(response: Response, message: string): void { 19 | const apiResponse: ApiResponse = { 20 | is_success: false, 21 | message: message || 'Internal Server Error', 22 | }; 23 | response.json(apiResponse); 24 | } -------------------------------------------------------------------------------- /fe/src/utils/router.jsx: -------------------------------------------------------------------------------- 1 | import { createBrowserRouter } from "react-router-dom"; 2 | import { loginAction, registerAction } from "../actions/users.action"; 3 | import { addFeatureAction } from "../actions/features.action"; 4 | import ErrorPage from "../pages/error"; 5 | import HomePage from "../pages/home"; 6 | import Login from "../pages/login"; 7 | import Register from "../pages/register"; 8 | 9 | export const router = createBrowserRouter([ 10 | { 11 | path: "/apps", 12 | element: , 13 | errorElement: , 14 | action: addFeatureAction, 15 | }, 16 | { 17 | path: "/", 18 | element: , 19 | errorElement: , 20 | action: loginAction, 21 | }, 22 | { 23 | path: "/register", 24 | element: , 25 | errorElement: , 26 | action: registerAction, 27 | }, 28 | ]); 29 | -------------------------------------------------------------------------------- /app.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # for unix environtment 3 | # use git bash if you are using windows operating system 4 | # [app.sh start] - starting new app instance fe & be 5 | # [app.sh stop] - stoping all app instance 6 | # [app.sh install] - install all required packages 7 | 8 | COMMAND=$1 9 | 10 | if [ "$COMMAND" = "start" ]; then 11 | echo "Starting the npm project..." 12 | cd api 13 | start "" npm run dev 14 | cd ../fe 15 | start "" npm run dev 16 | echo "check another terminal window please..." 17 | elif [ "$COMMAND" = "stop" ]; then 18 | echo "Stopping all running instance..." 19 | pkill -f "node" 20 | elif [ "$COMMAND" = "install" ]; then 21 | echo "preparing cuymodoro project..." 22 | cd api 23 | start "" npm install -y 24 | cd ../fe 25 | start "" npm install -y 26 | else 27 | echo "Invalid COMMAND. Please provide either 'start' or 'stop'." 28 | fi -------------------------------------------------------------------------------- /app.cmd: -------------------------------------------------------------------------------- 1 | @REM running all app level instance 2 | @REM run app.cmd in your windows terminal 3 | @REM [app.cmd start] - starting new app instance fe & be 4 | @REM [app.cmd stop] - stoping all app instance 5 | @REM [app.cmd install] - install all required packages 6 | 7 | @echo off 8 | 9 | set COMMAND=%1 10 | 11 | if "%COMMAND%"=="start" ( 12 | echo Starting the npm project... 13 | cd api 14 | start "" npm run dev 15 | cd ../fe 16 | start "" npm run dev 17 | echo check another terminal window please... 18 | ) else if "%COMMAND%"=="stop" ( 19 | echo Stopping all running instance... 20 | taskkill /f /im node.exe > nul 2>&1 21 | ) else if "%COMMAND%"=="install" ( 22 | echo Preparing to install cuymodoro dependencies... 23 | cd api 24 | start "" npm install -y 25 | cd ../fe 26 | start "" npm install -y 27 | ) else ( 28 | echo Invalid COMMAND. Please provide either "start" or "stop". 29 | ) -------------------------------------------------------------------------------- /fe/src/components/Notify.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { useNavigate } from "react-router-dom"; 3 | 4 | function Notify({ message, goto = "/" }) { 5 | const navigate = useNavigate(); 6 | 7 | return ( 8 |
9 |
10 | {message} 11 |
navigate(goto)} className="cursor-pointer"> 12 | 18 | 24 | 25 |
26 |
27 |
28 | ); 29 | } 30 | 31 | export default Notify; 32 | -------------------------------------------------------------------------------- /api/src/libs/token-creation.libs.ts: -------------------------------------------------------------------------------- 1 | type Token = { 2 | key: string, 3 | keyLength: number, 4 | builder: string, 5 | prefix: string, 6 | prefixPosition: number 7 | } 8 | 9 | export function tokenCreation(): string { 10 | const token: Token = { 11 | key: "cuy", 12 | builder: "asdfghjklqwertyuiopzxcvbnm1234567890!@#$%^&*()", 13 | keyLength: 16, 14 | prefix: "-", 15 | prefixPosition: 4 16 | } 17 | 18 | for (let index = 0; index < token.keyLength; index++) { 19 | const isPrefixFirstPosition: boolean = index === token.prefixPosition - 3 20 | const isPrefixLastPosition: boolean = index == token.keyLength - token.prefixPosition 21 | 22 | if (isPrefixFirstPosition || isPrefixLastPosition) token.key += token.prefix 23 | 24 | const generator: number = ~~(Math.random() * token.builder.length) 25 | token.key += token.builder[generator] 26 | } 27 | 28 | return token.key 29 | } -------------------------------------------------------------------------------- /fe/src/pages/home/home.jsx: -------------------------------------------------------------------------------- 1 | import { QueryClientProvider, QueryClient } from "@tanstack/react-query"; 2 | import Layout from "../../components/Layout"; 3 | import HeroContainer from "../../components/HeroContainer"; 4 | import AddTaskForm from "../../components/AddTaskForm"; 5 | import Title from "../../components/Title"; 6 | import Notify from "../../components/Notify"; 7 | import useNotification from "../../hooks/useNotification"; 8 | 9 | import "../../App.css"; 10 | 11 | const queryClient = new QueryClient(); 12 | 13 | function HomePage() { 14 | const { notify, notifyMessage } = useNotification(); 15 | 16 | return ( 17 | 18 | 19 | 20 | {notify && } 21 | 22 | <AddTaskForm /> 23 | </HeroContainer> 24 | </Layout> 25 | </QueryClientProvider> 26 | ); 27 | } 28 | 29 | export default HomePage; 30 | -------------------------------------------------------------------------------- /fe/src/components/AddTaskForm.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import { Form } from "react-router-dom"; 3 | 4 | function AddTaskForm() { 5 | return ( 6 | <Form method="post" action="/apps"> 7 | <div className="flex flex-col gap-4"> 8 | <input 9 | type="text" 10 | name="title" 11 | placeholder="Fitur apa yang kamu kerjain" 12 | className="input input-bordered w-full rounded-md" 13 | /> 14 | <select className="select select-bordered w-full" name="level"> 15 | <option defaultValue={"reguler"}>Pilih Break Level</option> 16 | <option value={"newcomers"}>New Comers</option> 17 | <option value={"reguler"}>Reguler</option> 18 | <option value={"enthusiast"}>Enthusiast</option> 19 | </select> 20 | <button type="submit" className="btn btn-primary rounded-md"> 21 | Mulai 22 | </button> 23 | </div> 24 | </Form> 25 | ); 26 | } 27 | 28 | export default AddTaskForm; 29 | -------------------------------------------------------------------------------- /api/src/routes/features.route.ts: -------------------------------------------------------------------------------- 1 | import HyperE, { Request, Response } from "hyper-express"; 2 | import { FAIL, OK } from "@config/response.config"; 3 | import { authMiddleware } from "../middleware"; 4 | import FeatureController from "@controllers/features.controller"; 5 | 6 | const feature_router = new HyperE.Router(); 7 | 8 | feature_router.post("/add", async (request: Request, response: Response) => { 9 | try { 10 | // !Route Authorized 11 | await authMiddleware(request, response) 12 | 13 | const { username, title, level } = await request.json() 14 | 15 | const addNewTask = await FeatureController.addNewTask({ username, title, level }) 16 | 17 | if (!addNewTask) FAIL(response, "Feature gagal ditambahkan") 18 | 19 | return OK(response, { 20 | message: "Feature baru berhasil ditambahkan", 21 | }) 22 | } catch (err) { 23 | return FAIL(response, "Feature gagal ditambahkan") 24 | } 25 | 26 | }) 27 | 28 | export default feature_router -------------------------------------------------------------------------------- /fe/src/components/flexi_button.jsx.bckp: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import { redirect } from "react-router-dom"; 3 | 4 | function Button({ status, addFeature, breakFeature, resumeFeature }) { 5 | const [buttonText, setButtonText] = useState(""); 6 | 7 | useEffect(() => { 8 | switch (status) { 9 | case "ongoing": 10 | setButtonText("break dulu"); 11 | break; 12 | case "break": 13 | setButtonText("Lanjutin"); 14 | break; 15 | default: 16 | setButtonText("Mulai"); 17 | break; 18 | } 19 | }, [status]); 20 | 21 | const handleSubmit = () => { 22 | if (status == "ongoing") return breakFeature.mutate(); 23 | if (status == "break") return resumeFeature.mutate(); 24 | addFeature.mutate(); 25 | return redirect("/"); 26 | }; 27 | 28 | return ( 29 | <button 30 | className="btn btn-primary rounded-md" 31 | onClick={() => handleSubmit()} 32 | > 33 | {buttonText} 34 | </button> 35 | ); 36 | } 37 | 38 | export default Button; 39 | -------------------------------------------------------------------------------- /fe/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "fe", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "vite build", 9 | "lint": "eslint . --ext js,jsx --report-unused-disable-directives --max-warnings 0", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "@tanstack/react-query": "^5.28.0", 14 | "axios": "^1.6.7", 15 | "bcrypt": "^5.1.1", 16 | "bcryptjs-react": "^2.4.6", 17 | "react": "^18.2.0", 18 | "react-dom": "^18.2.0", 19 | "react-query": "^3.39.3", 20 | "react-router-dom": "^6.22.3" 21 | }, 22 | "devDependencies": { 23 | "@types/react": "^18.2.64", 24 | "@types/react-dom": "^18.2.21", 25 | "@vitejs/plugin-react": "^4.2.1", 26 | "autoprefixer": "^10.4.18", 27 | "daisyui": "^4.7.3", 28 | "eslint": "^8.57.0", 29 | "eslint-plugin-react": "^7.34.0", 30 | "eslint-plugin-react-hooks": "^4.6.0", 31 | "eslint-plugin-react-refresh": "^0.4.5", 32 | "postcss": "^8.4.35", 33 | "tailwindcss": "^3.4.1", 34 | "vite": "^5.1.6" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /api/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api-cuymodoro", 3 | "version": "1.0.0", 4 | "description": "cuymodoro api", 5 | "main": "src/server.ts", 6 | "scripts": { 7 | "build": "npx tsc", 8 | "dev": "ts-node-dev -r tsconfig-paths/register src/server.ts", 9 | "start": "ts-node -r tsconfig-paths/register src/index.ts", 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "keywords": [ 13 | "cuymodoro" 14 | ], 15 | "author": "deaafrizal", 16 | "license": "ISC", 17 | "dependencies": { 18 | "@types/bcrypt": "^5.0.2", 19 | "@types/cors": "^2.8.17", 20 | "bcrypt": "^5.1.1", 21 | "cors": "^2.8.5", 22 | "dotenv": "^16.4.5", 23 | "express": "^4.19.1", 24 | "hyper-express": "^6.14.12", 25 | "moment": "^2.30.1", 26 | "mysql": "^2.18.1", 27 | "ts-node": "^10.9.2" 28 | }, 29 | "devDependencies": { 30 | "@types/express": "^4.17.21", 31 | "@types/mysql": "^2.15.26", 32 | "@types/node": "^20.11.30", 33 | "nodemon": "^3.1.0", 34 | "ts-node-dev": "^2.0.0", 35 | "tsconfig-paths": "^4.2.0", 36 | "tslib": "^2.6.2", 37 | "typescript": "^5.4.3" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /fe/public/vite.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg> -------------------------------------------------------------------------------- /fe/src/pages/login/login.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Layout from "../../components/Layout"; 3 | import HeroContainer from "../../components/HeroContainer"; 4 | import Title from "../../components/Title"; 5 | import { Form, Link } from "react-router-dom"; 6 | import useNotification from "../../hooks/useNotification"; 7 | import Notify from "../../components/Notify"; 8 | 9 | function Login() { 10 | const { notify, notifyMessage } = useNotification(); 11 | return ( 12 | <Layout> 13 | <HeroContainer> 14 | {notify && <Notify message={notifyMessage} />} 15 | <Title title={"Login Akun"} /> 16 | <Form method="post" action="/"> 17 | <div className="flex flex-col gap-4"> 18 | <input 19 | type="text" 20 | name="username" 21 | placeholder="username" 22 | className="input input-bordered w-full rounded-md" 23 | required 24 | /> 25 | <input 26 | type="password" 27 | name="password" 28 | placeholder="******" 29 | className="input input-bordered w-full rounded-md" 30 | required 31 | /> 32 | <button type="submit" className="btn btn-primary rounded-md"> 33 | Login 34 | </button> 35 | </div> 36 | </Form> 37 | <Link to={"/register"} className="text-center"> 38 | Or Register Here 39 | </Link> 40 | </HeroContainer> 41 | </Layout> 42 | ); 43 | } 44 | 45 | export default Login; 46 | -------------------------------------------------------------------------------- /fe/src/pages/register/register.jsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import Layout from "../../components/Layout"; 3 | import HeroContainer from "../../components/HeroContainer"; 4 | import Title from "../../components/Title"; 5 | import { Form, Link } from "react-router-dom"; 6 | import useNotification from "../../hooks/useNotification"; 7 | import Notify from "../../components/Notify"; 8 | 9 | function Register() { 10 | const { notify, notifyMessage } = useNotification(); 11 | 12 | return ( 13 | <Layout> 14 | <HeroContainer> 15 | <Title title={"Register Akun"} /> 16 | {notify && <Notify message={notifyMessage} goto="/" />} 17 | <Form method="post" action="/register"> 18 | <div className="flex flex-col gap-4"> 19 | <input 20 | type="text" 21 | name="username" 22 | placeholder="username" 23 | className="input input-bordered w-full rounded-md" 24 | required 25 | /> 26 | <input 27 | type="password" 28 | name="password" 29 | placeholder="******" 30 | className="input input-bordered w-full rounded-md" 31 | required 32 | /> 33 | <button type="submit" className="btn btn-primary rounded-md"> 34 | Register 35 | </button> 36 | </div> 37 | </Form> 38 | <Link to={"/"} className="text-center"> 39 | Or Login Here 40 | </Link> 41 | </HeroContainer> 42 | </Layout> 43 | ); 44 | } 45 | 46 | export default Register; 47 | -------------------------------------------------------------------------------- /fe/src/actions/users.action.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | import { redirect } from "react-router-dom"; 3 | import { hash } from "bcryptjs-react"; 4 | const saltRounds = 10; 5 | 6 | export const loginAction = async ({ request }) => { 7 | const form = await request.formData(); 8 | const username = form.get("username"); 9 | const password = form.get("password"); 10 | 11 | if (!username || !password) return { data: { message: "Silahkan input data" } } 12 | 13 | try { 14 | const response = await axios.post( 15 | `${import.meta.env.VITE_API_URL}/users/login`, 16 | { 17 | username, password, 18 | } 19 | ); 20 | 21 | if (!response.data.is_success) return response 22 | 23 | localStorage.setItem("username", username); 24 | localStorage.setItem("token", response.data.data); 25 | 26 | return redirect("/apps"); 27 | } catch (err) { 28 | console.error(`[ACTION LOGIN ERROR]: ${err}`); 29 | return; 30 | } 31 | }; 32 | 33 | export const registerAction = async ({ request }) => { 34 | const form = await request.formData(); 35 | const username = form.get("username"); 36 | const password = form.get("password"); 37 | const hashPassword = await hash(password, saltRounds); 38 | 39 | try { 40 | const register = await axios.post( 41 | `${import.meta.env.VITE_API_URL}/users/register`, 42 | { username, password: hashPassword } 43 | ); 44 | return register; 45 | } catch (err) { 46 | console.error(`[ACTION REGISTER ERROR]: ${err}`); 47 | } 48 | }; 49 | -------------------------------------------------------------------------------- /api/src/routes/users.route.ts: -------------------------------------------------------------------------------- 1 | import HyperE, { Request, Response } from "hyper-express"; 2 | import { FAIL, OK } from "@config/response.config"; 3 | import UserController from "@controllers/users.controller"; 4 | 5 | const user_router = new HyperE.Router(); 6 | 7 | user_router.post("/login", async (request: Request, response: Response) => { 8 | const { username, password } = await request.json() 9 | 10 | // !Validate input 11 | if (!username || !password) FAIL(response, "input tidak valid") 12 | 13 | // !Check username in database 14 | const isUsernameExist = await UserController.isUsernameExist({ username }) 15 | 16 | // !Create token user data 17 | const token = await UserController.userLogin({ username, password }) 18 | if (!isUsernameExist || !token) FAIL(response, "Akun tidak ditemukan") 19 | 20 | OK(response, { 21 | message: "login berhasil", 22 | data: token 23 | }) 24 | }) 25 | 26 | user_router.post("/register", async (request: Request, response: Response) => { 27 | const { username, password } = await request.json() 28 | 29 | // !Validate input 30 | if (!username || !password) FAIL(response, "silahkan isi data terlebih dahulu") 31 | if (username.length < 4) FAIL(response, "username harus lebih dari 4 karakter") 32 | if (!/^[a-zA-Z0-9_]+$/.test(username)) FAIL(response, "Username tidak valid. Gunakan huruf, angka, dan garis bawah (_) saja") 33 | 34 | // !Check username in database 35 | const isUsernameExist = await UserController.isUsernameExist({ username }) 36 | if (isUsernameExist) FAIL(response, "username sudah terdaftar") 37 | 38 | // !Register new user to database 39 | const userRegistration = await UserController.userRegistration({ username, password }) 40 | if (!userRegistration) FAIL(response, "registrasi gagal, coba nanti.") 41 | 42 | OK(response, { 43 | message: "registrasi berhasil" 44 | }) 45 | }); 46 | 47 | export default user_router; 48 | -------------------------------------------------------------------------------- /api/src/models/mapping.ts: -------------------------------------------------------------------------------- 1 | import { connection as db } from "@config/database.config"; 2 | import { ReadQueryParams, WriteQueryParams } from '../type/query.type'; 3 | 4 | export const find = ({ tableName, params, columns }: ReadQueryParams): Promise<any | undefined> => { 5 | return new Promise((resolve, reject) => { 6 | const keys = Object.keys(params); 7 | const values = Object.values(params); 8 | 9 | const columnString = columns?.join(", "); 10 | const query = `SELECT ${columnString} FROM ${tableName} WHERE ${keys.map(key => `${key}=?`).join(" AND ")}`; 11 | 12 | return db.query(query, values, (err, result) => { 13 | if (err) return reject(false); 14 | return resolve(result[0]); 15 | }); 16 | }); 17 | }; 18 | 19 | export const count = ({ tableName, params, columns }: ReadQueryParams): Promise<any | undefined> => { 20 | return new Promise((resolve, reject) => { 21 | const keys = Object.keys(params); 22 | const values = Object.values(params); 23 | 24 | const columnString = columns?.join(", "); 25 | const query = `SELECT COUNT(${columnString}) AS count FROM ${tableName} WHERE ${keys.map(key => `${key}=?`).join(" AND ")}`; 26 | 27 | return db.query(query, values, (err, result) => { 28 | if (err) return reject(false); 29 | return resolve(result[0].count); 30 | }); 31 | }); 32 | }; 33 | 34 | export const update = ({ tableName, data, conditions }: WriteQueryParams): Promise<boolean> => { 35 | return new Promise((resolve, reject) => { 36 | const updateKeys = Object.keys(data); 37 | const updateValues = Object.values(data); 38 | const conditionKeys = Object.keys(conditions || {}); 39 | const conditionValues = Object.values(conditions || {}); 40 | 41 | const keyMap = updateKeys.map((key, _) => `${key} = ?`).join(", "); 42 | const conditionMap = conditionKeys.map(key => `${key} = ?`).join(" AND "); 43 | 44 | const query = `UPDATE ${tableName} SET ${keyMap} WHERE ${conditionMap}`; 45 | const queryValues = [...updateValues, ...conditionValues]; 46 | 47 | return db.query(query, queryValues, (err, _) => { 48 | if (err) return reject(err); 49 | return resolve(true); 50 | }); 51 | }); 52 | }; 53 | 54 | export const create = ({ tableName, data }: WriteQueryParams): Promise<boolean> => { 55 | return new Promise((resolve, reject) => { 56 | const keys = Object.keys(data); 57 | const values = Object.values(data); 58 | 59 | const columnNames = keys.join(", "); 60 | const valuePlaceholders = keys.map(() => "?").join(", "); 61 | 62 | const query = `INSERT INTO ${tableName} (${columnNames}) VALUES (${valuePlaceholders})`; 63 | 64 | return db.query(query, values, (err, _) => { 65 | if (err) return reject(false); 66 | return resolve(true); 67 | }); 68 | }); 69 | }; 70 | -------------------------------------------------------------------------------- /api/src/controllers/users.controller.ts: -------------------------------------------------------------------------------- 1 | import { tokenCreation } from "@libs/token-creation.libs"; 2 | import { count, create, find, update } from "@models/mapping"; 3 | import { compare } from "bcrypt"; 4 | import { ReadQuery, WriteQuery } from "../type/query.type"; 5 | import { UserFormParams } from "../type/users.type"; 6 | 7 | async function isUsernameExist({ username }: { username: string; }): Promise<boolean> { 8 | try { 9 | const q: ReadQuery = { 10 | tableName: "users", 11 | searchData: { username }, 12 | selectedColumn: ['username'] 13 | }; 14 | 15 | const userCount = await count({ tableName: q.tableName, params: q.searchData, columns: q.selectedColumn }); 16 | 17 | return userCount; 18 | } catch (error) { 19 | return error as boolean; 20 | } 21 | } 22 | 23 | async function isTokenVerified({ username, token }: { username: string; token: string }): Promise<boolean> { 24 | try { 25 | const q: ReadQuery = { 26 | tableName: "users", 27 | searchData: { username, token }, 28 | selectedColumn: ['token'] 29 | }; 30 | const userCount = await count({ tableName: q.tableName, params: q.searchData, columns: q.selectedColumn }); 31 | 32 | return userCount; 33 | } catch (error) { 34 | return error as boolean; 35 | } 36 | } 37 | 38 | async function userRegistration({ 39 | username, 40 | password, 41 | }: UserFormParams): Promise<boolean> { 42 | try { 43 | const q: WriteQuery = { 44 | tableName: "users", 45 | data: { username, password } 46 | } 47 | const createUser = await create({ tableName: q.tableName, data: q.data }); 48 | 49 | return createUser; 50 | } catch (error) { 51 | return error as boolean; 52 | } 53 | } 54 | 55 | async function userLogin({ 56 | username, 57 | password, 58 | }: UserFormParams): Promise<string> { 59 | try { 60 | const q: ReadQuery = { 61 | tableName: "users", 62 | searchData: { username }, 63 | selectedColumn: ['password'] 64 | }; 65 | 66 | const user = await find({ tableName: q.tableName, params: q.searchData, columns: q.selectedColumn }); 67 | 68 | const isPasswordMatch = await compare(password, user.password); 69 | if (!isPasswordMatch) return "" 70 | 71 | const qq: WriteQuery = { 72 | tableName: "users", 73 | data: { token: tokenCreation() }, 74 | conditions: { username } 75 | } 76 | 77 | const createToken = await update({ tableName: qq.tableName, data: qq.data, conditions: qq.conditions }); 78 | if (!createToken) return "token not created"; 79 | 80 | return qq.data.token; 81 | } catch (error) { 82 | return error as string; 83 | } 84 | } 85 | 86 | export = { isUsernameExist, userRegistration, userLogin, isTokenVerified }; 87 | -------------------------------------------------------------------------------- /cuymodoro.sql: -------------------------------------------------------------------------------- 1 | -- -------------------------------------------------------- 2 | -- Host: 127.0.0.1 3 | -- Server version: 8.0.30 - MySQL Community Server - GPL 4 | -- Server OS: Win64 5 | -- HeidiSQL Version: 12.1.0.6537 6 | -- -------------------------------------------------------- 7 | 8 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; 9 | /*!40101 SET NAMES utf8 */; 10 | /*!50503 SET NAMES utf8mb4 */; 11 | /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; 12 | /*!40103 SET TIME_ZONE='+00:00' */; 13 | /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; 14 | /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; 15 | /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; 16 | 17 | 18 | -- Dumping database structure for cuymodoro 19 | DROP DATABASE IF EXISTS `cuymodoro`; 20 | CREATE DATABASE IF NOT EXISTS `cuymodoro` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */; 21 | USE `cuymodoro`; 22 | 23 | -- Dumping structure for table cuymodoro.features 24 | DROP TABLE IF EXISTS `features`; 25 | CREATE TABLE IF NOT EXISTS `features` ( 26 | `id` int NOT NULL AUTO_INCREMENT, 27 | `username` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, 28 | `title` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, 29 | `started_time` time DEFAULT (curtime()), 30 | `break_time` time DEFAULT NULL, 31 | `end_time` time DEFAULT NULL, 32 | `status` enum('ongoing','done','break','') COLLATE utf8mb4_general_ci DEFAULT 'ongoing', 33 | `level` enum('newcomers','reguler','enthusiast','') COLLATE utf8mb4_general_ci NOT NULL DEFAULT 'reguler', 34 | `cycle` int DEFAULT NULL, 35 | PRIMARY KEY (`id`), 36 | KEY `username` (`username`), 37 | CONSTRAINT `features_ibfk_1` FOREIGN KEY (`username`) REFERENCES `users` (`username`) ON DELETE CASCADE ON UPDATE CASCADE 38 | ) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; 39 | 40 | -- Data exporting was unselected. 41 | 42 | -- Dumping structure for table cuymodoro.feature_history 43 | DROP TABLE IF EXISTS `feature_history`; 44 | CREATE TABLE IF NOT EXISTS `feature_history` ( 45 | `id` int NOT NULL AUTO_INCREMENT, 46 | `feature_id` int NOT NULL, 47 | `total_hours` time NOT NULL, 48 | `username` varchar(255) COLLATE utf8mb4_general_ci NOT NULL, 49 | `created_at` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, 50 | PRIMARY KEY (`id`), 51 | KEY `feature_id` (`feature_id`), 52 | KEY `username` (`username`), 53 | CONSTRAINT `feature_history_ibfk_1` FOREIGN KEY (`feature_id`) REFERENCES `features` (`id`) ON DELETE CASCADE ON UPDATE CASCADE, 54 | CONSTRAINT `feature_history_ibfk_2` FOREIGN KEY (`username`) REFERENCES `features` (`username`) ON DELETE CASCADE ON UPDATE CASCADE 55 | ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; 56 | 57 | -- Data exporting was unselected. 58 | 59 | -- Dumping structure for table cuymodoro.users 60 | DROP TABLE IF EXISTS `users`; 61 | CREATE TABLE IF NOT EXISTS `users` ( 62 | `id` int NOT NULL AUTO_INCREMENT, 63 | `username` varchar(235) COLLATE utf8mb4_general_ci NOT NULL, 64 | `password` varchar(222) COLLATE utf8mb4_general_ci NOT NULL, 65 | `token` text COLLATE utf8mb4_general_ci, 66 | PRIMARY KEY (`id`), 67 | UNIQUE KEY `username` (`username`) 68 | ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; 69 | 70 | -- Data exporting was unselected. 71 | 72 | /*!40103 SET TIME_ZONE=IFNULL(@OLD_TIME_ZONE, 'system') */; 73 | /*!40101 SET SQL_MODE=IFNULL(@OLD_SQL_MODE, '') */; 74 | /*!40014 SET FOREIGN_KEY_CHECKS=IFNULL(@OLD_FOREIGN_KEY_CHECKS, 1) */; 75 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; 76 | /*!40111 SET SQL_NOTES=IFNULL(@OLD_SQL_NOTES, 1) */; 77 | -------------------------------------------------------------------------------- /fe/src/assets/react.svg: -------------------------------------------------------------------------------- 1 | <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="35.93" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 228"><path fill="#00D8FF" d="M210.483 73.824a171.49 171.49 0 0 0-8.24-2.597c.465-1.9.893-3.777 1.273-5.621c6.238-30.281 2.16-54.676-11.769-62.708c-13.355-7.7-35.196.329-57.254 19.526a171.23 171.23 0 0 0-6.375 5.848a155.866 155.866 0 0 0-4.241-3.917C100.759 3.829 77.587-4.822 63.673 3.233C50.33 10.957 46.379 33.89 51.995 62.588a170.974 170.974 0 0 0 1.892 8.48c-3.28.932-6.445 1.924-9.474 2.98C17.309 83.498 0 98.307 0 113.668c0 15.865 18.582 31.778 46.812 41.427a145.52 145.52 0 0 0 6.921 2.165a167.467 167.467 0 0 0-2.01 9.138c-5.354 28.2-1.173 50.591 12.134 58.266c13.744 7.926 36.812-.22 59.273-19.855a145.567 145.567 0 0 0 5.342-4.923a168.064 168.064 0 0 0 6.92 6.314c21.758 18.722 43.246 26.282 56.54 18.586c13.731-7.949 18.194-32.003 12.4-61.268a145.016 145.016 0 0 0-1.535-6.842c1.62-.48 3.21-.974 4.76-1.488c29.348-9.723 48.443-25.443 48.443-41.52c0-15.417-17.868-30.326-45.517-39.844Zm-6.365 70.984c-1.4.463-2.836.91-4.3 1.345c-3.24-10.257-7.612-21.163-12.963-32.432c5.106-11 9.31-21.767 12.459-31.957c2.619.758 5.16 1.557 7.61 2.4c23.69 8.156 38.14 20.213 38.14 29.504c0 9.896-15.606 22.743-40.946 31.14Zm-10.514 20.834c2.562 12.94 2.927 24.64 1.23 33.787c-1.524 8.219-4.59 13.698-8.382 15.893c-8.067 4.67-25.32-1.4-43.927-17.412a156.726 156.726 0 0 1-6.437-5.87c7.214-7.889 14.423-17.06 21.459-27.246c12.376-1.098 24.068-2.894 34.671-5.345a134.17 134.17 0 0 1 1.386 6.193ZM87.276 214.515c-7.882 2.783-14.16 2.863-17.955.675c-8.075-4.657-11.432-22.636-6.853-46.752a156.923 156.923 0 0 1 1.869-8.499c10.486 2.32 22.093 3.988 34.498 4.994c7.084 9.967 14.501 19.128 21.976 27.15a134.668 134.668 0 0 1-4.877 4.492c-9.933 8.682-19.886 14.842-28.658 17.94ZM50.35 144.747c-12.483-4.267-22.792-9.812-29.858-15.863c-6.35-5.437-9.555-10.836-9.555-15.216c0-9.322 13.897-21.212 37.076-29.293c2.813-.98 5.757-1.905 8.812-2.773c3.204 10.42 7.406 21.315 12.477 32.332c-5.137 11.18-9.399 22.249-12.634 32.792a134.718 134.718 0 0 1-6.318-1.979Zm12.378-84.26c-4.811-24.587-1.616-43.134 6.425-47.789c8.564-4.958 27.502 2.111 47.463 19.835a144.318 144.318 0 0 1 3.841 3.545c-7.438 7.987-14.787 17.08-21.808 26.988c-12.04 1.116-23.565 2.908-34.161 5.309a160.342 160.342 0 0 1-1.76-7.887Zm110.427 27.268a347.8 347.8 0 0 0-7.785-12.803c8.168 1.033 15.994 2.404 23.343 4.08c-2.206 7.072-4.956 14.465-8.193 22.045a381.151 381.151 0 0 0-7.365-13.322Zm-45.032-43.861c5.044 5.465 10.096 11.566 15.065 18.186a322.04 322.04 0 0 0-30.257-.006c4.974-6.559 10.069-12.652 15.192-18.18ZM82.802 87.83a323.167 323.167 0 0 0-7.227 13.238c-3.184-7.553-5.909-14.98-8.134-22.152c7.304-1.634 15.093-2.97 23.209-3.984a321.524 321.524 0 0 0-7.848 12.897Zm8.081 65.352c-8.385-.936-16.291-2.203-23.593-3.793c2.26-7.3 5.045-14.885 8.298-22.6a321.187 321.187 0 0 0 7.257 13.246c2.594 4.48 5.28 8.868 8.038 13.147Zm37.542 31.03c-5.184-5.592-10.354-11.779-15.403-18.433c4.902.192 9.899.29 14.978.29c5.218 0 10.376-.117 15.453-.343c-4.985 6.774-10.018 12.97-15.028 18.486Zm52.198-57.817c3.422 7.8 6.306 15.345 8.596 22.52c-7.422 1.694-15.436 3.058-23.88 4.071a382.417 382.417 0 0 0 7.859-13.026a347.403 347.403 0 0 0 7.425-13.565Zm-16.898 8.101a358.557 358.557 0 0 1-12.281 19.815a329.4 329.4 0 0 1-23.444.823c-7.967 0-15.716-.248-23.178-.732a310.202 310.202 0 0 1-12.513-19.846h.001a307.41 307.41 0 0 1-10.923-20.627a310.278 310.278 0 0 1 10.89-20.637l-.001.001a307.318 307.318 0 0 1 12.413-19.761c7.613-.576 15.42-.876 23.31-.876H128c7.926 0 15.743.303 23.354.883a329.357 329.357 0 0 1 12.335 19.695a358.489 358.489 0 0 1 11.036 20.54a329.472 329.472 0 0 1-11 20.722Zm22.56-122.124c8.572 4.944 11.906 24.881 6.52 51.026c-.344 1.668-.73 3.367-1.15 5.09c-10.622-2.452-22.155-4.275-34.23-5.408c-7.034-10.017-14.323-19.124-21.64-27.008a160.789 160.789 0 0 1 5.888-5.4c18.9-16.447 36.564-22.941 44.612-18.3ZM128 90.808c12.625 0 22.86 10.235 22.86 22.86s-10.235 22.86-22.86 22.86s-22.86-10.235-22.86-22.86s10.235-22.86 22.86-22.86Z"></path></svg> -------------------------------------------------------------------------------- /api/src/routes/features.route.ts_: -------------------------------------------------------------------------------- 1 | import HyperE, { Request, Response } from "hyper-express"; 2 | import moment from "moment"; 3 | 4 | import { connection as db } from "../config/database.config"; 5 | import { 6 | addNewTask, 7 | checkFeatureStatus, 8 | createFeatureHistory, 9 | getLastDataByUsername, 10 | updateFeatureCycle, 11 | } from "../models/mapping"; 12 | 13 | const features_route = new HyperE.Router(); 14 | 15 | features_route.get("/last/:username", async (req, res) => { 16 | const { username } = req.params; 17 | const result = await getLastDataByUsername(username); 18 | res.json({ features: result }); 19 | }); 20 | 21 | features_route.post("/add", async (req, res) => { 22 | try { 23 | console.log("TRYING 🙌") 24 | 25 | const { username, title, level }: TAddNewTask = await req.json(); 26 | 27 | const result = await addNewTask({ username, title, level }); 28 | 29 | console.log("🚀 ~ features_route.post ~ result:", result) 30 | 31 | res.json({ 32 | id: result.insertId, 33 | message: "Feature added successfully!" 34 | }); 35 | 36 | } catch (error) { 37 | res.status(400).json({ 38 | message: error?.sqlMessage ?? "Failed add new task", 39 | }); 40 | } 41 | }); 42 | 43 | async function timeCalculation({ 44 | started_time, 45 | break_time, 46 | status, 47 | incrementCycle, 48 | level, 49 | username, 50 | id, 51 | }: TTimeCalculation) { 52 | const startedMoment = moment(started_time, "HH:mm:ss"); 53 | const breakMoment = moment(break_time, "HH:mm:ss"); 54 | 55 | const duration = moment.duration(breakMoment.diff(startedMoment)); 56 | const total_hours = moment.utc(duration.asMilliseconds()).format("HH:mm:ss"); 57 | 58 | try { 59 | if (started_time && break_time && status == "break") { 60 | const newCycle = await updateFeatureCycle({ 61 | id, 62 | username, 63 | level, 64 | incrementCycle, 65 | }); 66 | 67 | if (newCycle) await createFeatureHistory({ id, username, total_hours }); 68 | return newCycle; 69 | } 70 | return null; 71 | } catch (error) { 72 | throw error; 73 | } 74 | } 75 | 76 | features_route.put("/resume", async (req: Request, res: Response) => { 77 | try { 78 | const { id, username, level }: ITask = await req.json(); 79 | const { started_time, break_time, status, cycle } = 80 | await checkFeatureStatus({ id, username }); 81 | 82 | console.log(started_time, break_time); 83 | if (status !== "break") { 84 | return res.status(400).json({ 85 | message: `You are still ${status}`, 86 | status: 400, 87 | data: null, 88 | }); 89 | } 90 | 91 | const incrementCycle = Number(cycle) + 1; 92 | 93 | const newTime = await timeCalculation({ 94 | started_time, 95 | break_time, 96 | status, 97 | incrementCycle, 98 | level, 99 | username, 100 | id, 101 | }); 102 | console.log("newTime", newTime); 103 | if (newTime) { 104 | return res.status(200).json({ message: "Success Resume task" }); 105 | } 106 | return res.status(400).json({ message: "Failed Resume task" }); 107 | } catch (error) { 108 | console.log(error); 109 | return res.status(400).json({ message: error?.sqlMessage ?? "Failed" }); 110 | } 111 | }); 112 | 113 | features_route.put("/finish", async (req, res) => { 114 | const { id, username } = await req.json(); 115 | db.query( 116 | `UPDATE features SET end_time=NOW(), status='done' WHERE id='${id}' AND username='${username}'`, 117 | (err, _) => { 118 | if (err) 119 | return res.status(400).json({ 120 | id, 121 | message: "updating feature end_time failed, sorry!", 122 | }); 123 | return res.status(200).json({ 124 | id, 125 | message: "Sucess finish your task!!", 126 | }); 127 | } 128 | ); 129 | }); 130 | 131 | features_route.put("/break", async (req, res) => { 132 | const { id, username } = await req.json(); 133 | db.query( 134 | `UPDATE features SET break_time=NOW(), status='break' WHERE id='${id}' AND username='${username}'`, 135 | (err, _) => { 136 | if (err) 137 | return res.status(200).json({ 138 | id, 139 | message: 140 | err?.sqlMessage ?? "updating feature end_time failed, sorry!", 141 | }); 142 | return res.status(200).json({ id, message: "Success Break!!" }); 143 | } 144 | ); 145 | }); 146 | 147 | export default features_route; 148 | -------------------------------------------------------------------------------- /fe/src/components/features_form.jsx.bckp: -------------------------------------------------------------------------------- 1 | import React, { useEffect, useState } from "react"; 2 | import axios from "axios"; 3 | import { useMutation, useQuery } from "@tanstack/react-query"; 4 | import Button from "./flexi_button.jsx.bckp"; 5 | import AddTaskForm from "./AddTaskForm"; 6 | 7 | function useFeatures() { 8 | return useQuery({ 9 | queryKey: ["get_last_features"], 10 | queryFn: async () => { 11 | const { data } = await axios.get( 12 | `${import.meta.env.VITE_API_URL}/features/last/${localStorage.getItem( 13 | "username" 14 | )}` 15 | ); 16 | return data; 17 | }, 18 | }); 19 | } 20 | 21 | function Hero() { 22 | const [title, setTitle] = useState(""); 23 | const [level, setLevel] = useState(""); 24 | const { data, error, isFetching } = useFeatures(); 25 | 26 | const addFeature = useMutation({ 27 | mutationFn: () => { 28 | return axios.post(`${import.meta.env.VITE_API_URL}/features/add`, { 29 | username: localStorage.getItem("username"), 30 | title, 31 | level, 32 | }); 33 | }, 34 | }); 35 | 36 | const breakFeature = useMutation({ 37 | mutationFn: () => { 38 | return axios.put(`${import.meta.env.VITE_API_URL}/features/break`, { 39 | id: data?.features?.id, 40 | username: localStorage.getItem("username"), 41 | }); 42 | }, 43 | }); 44 | 45 | const resumeFeature = useMutation({ 46 | mutationFn: () => { 47 | return axios.put(`${import.meta.env.VITE_API_URL}/features/resume`, { 48 | id: data?.features?.id, 49 | username: localStorage.getItem("username"), 50 | level: level || data?.features?.level, 51 | }); 52 | }, 53 | }); 54 | 55 | const finishFeature = useMutation({ 56 | mutationFn: () => { 57 | return axios.put(`${import.meta.env.VITE_API_URL}/features/finish`, { 58 | id: data?.features?.id, 59 | username: localStorage.getItem("username"), 60 | }); 61 | }, 62 | }); 63 | 64 | useEffect(() => { 65 | localStorage.setItem("username", "admin"); 66 | }, []); 67 | 68 | if (isFetching) return <div>please wait...</div>; 69 | if (error) return <div>error, reload the page please :|</div>; 70 | 71 | return ( 72 | <div className="hero"> 73 | <div className="flex flex-col gap-4 w-full p-8"> 74 | <h1 className="text-4xl text-center font-bold"> Cuymodoro</h1> 75 | <hr /> 76 | <AddTaskForm /> 77 | {/* <div> 78 | {addFeature.isError || breakFeature.isError ? ( 79 | <p>An error occurred</p> 80 | ) : null} 81 | {data?.features?.status && <i>status: {data?.features?.status}</i>} 82 | {data?.features?.status && data?.features?.status == "break" ? ( 83 | <p>take a break for xx:xx minutes</p> 84 | ) : null} 85 | </div> 86 | <div className="flex flex-col gap-4"> 87 | <input 88 | type="text" 89 | onChange={(e) => 90 | !data?.features?.status ? setTitle(e.target.value) : null 91 | } 92 | placeholder="Fitur apa yang kamu kerjain" 93 | className="input input-bordered w-full rounded-md" 94 | defaultValue={data?.features?.title} 95 | disabled={ 96 | data?.features?.status && data?.features?.status !== "done" 97 | } 98 | /> 99 | <select 100 | className="select select-bordered w-full" 101 | onChange={(e) => setLevel(e.target.value)} 102 | value={level || data?.features?.level} 103 | disabled={ 104 | data?.features?.status && data?.features?.status !== "break" 105 | } 106 | > 107 | <option defaultValue={"reguler"}>Pilih Break Level</option> 108 | <option value={"newcomers"}>New Comers</option> 109 | <option value={"reguler"}>Reguler</option> 110 | <option value={"enthusiast"}>Enthusiast</option> 111 | </select> 112 | <Button 113 | status={data?.features?.status} 114 | addFeature={addFeature} 115 | breakFeature={breakFeature} 116 | resumeFeature={resumeFeature} 117 | /> 118 | {data?.features?.status == "break" ? ( 119 | <button onClick={() => finishFeature.mutate()}>Selesai</button> 120 | ) : null} 121 | </div> */} 122 | </div> 123 | </div> 124 | ); 125 | } 126 | 127 | export default Hero; 128 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | <div align="center"> 2 | 3 | [![Contributors][contributors-shield]][contributors-url] 4 | [![Forks][forks-shield]][forks-url] 5 | [![Stargazers][stars-shield]][stars-url] 6 | [![Issues][issues-shield]][issues-url] 7 | 8 | <br /> 9 | 10 | <h1 style="font-weight:900" align="center">🕒 CUYMODORO 🕒</h1> 11 | 12 | ![underconstruction][underconstruction] 13 | 14 | </div> 15 | 16 | ## ✨ Apasih Cuymodoro Itu? ✨ 17 | 18 | Cuymodoro adalah aplikasi produktivitas dalam bentuk website. Sering kali dalam mengerjakan tugas kita mengatur waktu yang harus kita luangkan dan tak jarang menggunakan timer untuk hal tersebut. Tetapi dalam pengerjaan pada kurun waktu yang ditentukan tersebut terasa sangat lama dan melelahkan, belum lagi jika tugasnya belum rampung yang berdampak pada burnout karena lama mengerjakan ataupun penundaan pekerjaan yang berakhir pada lupa. Dari permasalahan tersebut, bagaimana jika kita membuat suatu aplikasi dengan timer interaktif serta memungkinkan untuk melacak tugas yang kita kerjakan? 19 | 20 | ### 🚀 Fitur Utama Cuymodoro 21 | 22 | Merupakan implementasi dengan improvisasi dari teknik _Pomodoro_, Cuymodoro mampu mengubah pengalaman bekerkamenjadi lebih efektif, produktif, dan menyenangkan sehingga terhindar dari burnout. berikut adalah fitur utamanya: 23 | 24 | - **Setel Sesuai Kebutuhan**: 25 | Cuymodoro menawarkan timer Pomodoro interaktif yang akan menentukan waktu istirahat didasarkan dari waktu pengerjaan serta seberapa niat kamu dalam mengerjakan tugas. Pembagian niatnya sebagai berikut: 26 | - New Comer: 35% dari waktu kerja 27 | - Reguler : 28% dari waktu kerja 28 | - Enthusiast : 20% dari waktu kerja 29 | - **Kerjakan Lagi** : Cuymodoro akan membantumu menampilkan tugas terakhir yang belum kamu selesaikan saat kamu buka kembali, tidak perlu khawatir akan kehilangan tugas yang belum selesai. 30 | - **Lacak Tugasmu** : Ingin tahu berapa banyak waktu **yang** kamu kerjakan untuk satu tugas? Cuymodoro mencatat sebearapa banyak kamu memerlukan sesi Pomodoro serta waktu yang kamu luangkan untuk mengerjakannya. 31 | 32 | ### ⚙️ Teknologi Pengembangan 33 | 34 | - Frontend : 35 | 36 | ![javascript][javascript] 37 | [![React][React.js]][React-url] 38 | [![Tailwind][TailwindCSS]][Tailwind-url] 39 | 40 | - Backend : 41 | 42 | ![javascript][javascript] 43 | ![Hyper-Express][Express-logo] 44 | [![Node.js][NodeJS]][NodeJS-url] 45 | 46 | - Database : 47 | 48 | [![MySQL][MySQL]][MySQL-url] 49 | 50 | ## 📙 Panduan Penggunaan 📙 51 | 52 | ### 📝 Prerequisites 53 | 54 | - Node Package Manager (NPM) 55 | - MySQL 56 | - Node JS 18+ 57 | - Hyper Express 58 | - Niat 59 | 60 | ### 👣 Langkah Instalasi 61 | 62 | 1. Instalasi package 63 | 64 | Untuk menginstall package, kamu perlu menjalankan perintah: 65 | 66 | ``` 67 | ./app.sh install 68 | ``` 69 | 70 | 2. Import Database 71 | 72 | Untuk struktur database dapat kamu unduh di [sini](cuymodoro.sql) 73 | 74 | 3. Menjalankan aplikasi 75 | 76 | Untuk menjalankan aplikasi di perangkat, kamu daperlupat menjalankan perintah: 77 | 78 | ``` 79 | ./app.sh start 80 | ``` 81 | 82 | 4. Untuk mulai menggunakan aplikasi kita kamu dapat mengunjungi [http:/localhost:5371](http:/localhost:5371) 83 | 84 | ## 🤝 Kontribusi 85 | 86 | Kontribusi merupakan hal yang dapat memberikan ruang belajar serta inspirasi dari proyek ini. Setiap kontribusi yang kamu berikan **Sangat Dihargai** 87 | 88 | Jika kamu memiliki saran untuk membuat proyek ini jadi lebih baik, kamu bisa melakukan fork dan membuat pull request atau kamu juga bisa membuat issue baru. Jangan lupa bintangya ya kak! Terima Kasih! 89 | 90 | ## 📙 Referensi 91 | 92 | Berikut adalah beberapa referensi yang dapat kamu baca: 93 | 94 | - [React.js](https://reactjs.org/) 95 | - [Tailwind CSS](https://tailwindcss.com/) 96 | - [Node.js](https://nodejs.org/en) 97 | - [MySQL](https://www.mysql.com/) 98 | - [Hyper-Express](https://github.com/kartikk221/hyper-express) 99 | 100 | ## Jangan Lupa Mampir 101 | 102 | [![instagram][instagram]](instagram.com/dea.afrizal) 103 | [![youtube][youtube]](https://www.youtube.com/@deaafrizal) 104 | [![website][website]](https://www.deaafrizal.com) 105 | 106 | <!-- MARKDOWN LINKS & IMAGES --> 107 | 108 | [Hyper-Express]: https://github.com/kartikk221/hyper-express 109 | [Daisy-ui]: https://daisyui.com/ 110 | [React-url]: https://reactjs.org/ 111 | [React.js]: https://img.shields.io/badge/React-20232A?style=for-the-badge&logo=react&logoColor=61DAFB 112 | [Express-logo]: https://img.shields.io/badge/Express.js-404D59?style=for-the-badge 113 | [Tailwind-url]: https://tailwindcss.com/ 114 | [TailwindCSS]: https://img.shields.io/badge/tailwindcss-0F172A?&style=for-the-badge&logo=tailwindcss&logoColor=61DAFB 115 | [MySQL-url]: https://www.mysql.com/ 116 | [MySQL]: https://img.shields.io/badge/MySQL-00000F?style=for-the-badge&logo=mysql&logoColor=white 117 | [NodeJS-url]: https://nodejs.org/en 118 | [NodeJS]: https://img.shields.io/badge/Node.js-43853D?style=for-the-badge&logo=node.js&logoColor=white 119 | [javascript]: https://img.shields.io/badge/JavaScript-F7DF1E?style=for-the-badge&logo=javascript&logoColor=black 120 | [instagram]: https://img.shields.io/badge/Instagram-E4405F?style=for-the-badge&logo=instagram&logoColor=white 121 | [youtube]: https://img.shields.io/badge/YouTube-FF0000?style=for-the-badge&logo=youtube&logoColor=white 122 | [website]: https://img.shields.io/badge/website-000000?style=for-the-badge&logo=About.me&logoColor=white 123 | [underconstruction]: https://img.shields.io/badge/Status-WIP-FFFF00?style=for-the-badge&logoColor=FFFF00 124 | [contributors-shield]: https://img.shields.io/github/contributors/deaaprizal/cuymodoro.svg?style=for-the-badge 125 | [contributors-url]: https://github.com/deaaprizal/cuymodoro/graphs/contributors 126 | [forks-shield]: https://img.shields.io/github/forks/deaaprizal/cuymodoro.svg?style=for-the-badge 127 | [forks-url]: https://github.com/deaaprizal/cuymodoro/network/members 128 | [stars-shield]: https://img.shields.io/github/stars/deaaprizal/cuymodoro.svg?style=for-the-badge 129 | [stars-url]: https://github.com/deaaprizal/cuymodoro/stargazers 130 | [issues-shield]: https://img.shields.io/github/issues/deaaprizal/cuymodoro.svg?style=for-the-badge 131 | [issues-url]: https://github.com/deaaprizal/cuymodoro/issues 132 | -------------------------------------------------------------------------------- /api/tsconfig.tsbuildinfo: -------------------------------------------------------------------------------- 1 | {"program":{"fileNames":["./node_modules/typescript/lib/lib.es5.d.ts","./node_modules/typescript/lib/lib.es2015.d.ts","./node_modules/typescript/lib/lib.es2016.d.ts","./node_modules/typescript/lib/lib.es2017.d.ts","./node_modules/typescript/lib/lib.es2018.d.ts","./node_modules/typescript/lib/lib.es2019.d.ts","./node_modules/typescript/lib/lib.es2020.d.ts","./node_modules/typescript/lib/lib.es2021.d.ts","./node_modules/typescript/lib/lib.es2022.d.ts","./node_modules/typescript/lib/lib.es2023.d.ts","./node_modules/typescript/lib/lib.esnext.d.ts","./node_modules/typescript/lib/lib.dom.d.ts","./node_modules/typescript/lib/lib.dom.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.core.d.ts","./node_modules/typescript/lib/lib.es2015.collection.d.ts","./node_modules/typescript/lib/lib.es2015.generator.d.ts","./node_modules/typescript/lib/lib.es2015.iterable.d.ts","./node_modules/typescript/lib/lib.es2015.promise.d.ts","./node_modules/typescript/lib/lib.es2015.proxy.d.ts","./node_modules/typescript/lib/lib.es2015.reflect.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.d.ts","./node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2016.array.include.d.ts","./node_modules/typescript/lib/lib.es2016.intl.d.ts","./node_modules/typescript/lib/lib.es2017.date.d.ts","./node_modules/typescript/lib/lib.es2017.object.d.ts","./node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2017.string.d.ts","./node_modules/typescript/lib/lib.es2017.intl.d.ts","./node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","./node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","./node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","./node_modules/typescript/lib/lib.es2018.intl.d.ts","./node_modules/typescript/lib/lib.es2018.promise.d.ts","./node_modules/typescript/lib/lib.es2018.regexp.d.ts","./node_modules/typescript/lib/lib.es2019.array.d.ts","./node_modules/typescript/lib/lib.es2019.object.d.ts","./node_modules/typescript/lib/lib.es2019.string.d.ts","./node_modules/typescript/lib/lib.es2019.symbol.d.ts","./node_modules/typescript/lib/lib.es2019.intl.d.ts","./node_modules/typescript/lib/lib.es2020.bigint.d.ts","./node_modules/typescript/lib/lib.es2020.date.d.ts","./node_modules/typescript/lib/lib.es2020.promise.d.ts","./node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2020.string.d.ts","./node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","./node_modules/typescript/lib/lib.es2020.intl.d.ts","./node_modules/typescript/lib/lib.es2020.number.d.ts","./node_modules/typescript/lib/lib.es2021.promise.d.ts","./node_modules/typescript/lib/lib.es2021.string.d.ts","./node_modules/typescript/lib/lib.es2021.weakref.d.ts","./node_modules/typescript/lib/lib.es2021.intl.d.ts","./node_modules/typescript/lib/lib.es2022.array.d.ts","./node_modules/typescript/lib/lib.es2022.error.d.ts","./node_modules/typescript/lib/lib.es2022.intl.d.ts","./node_modules/typescript/lib/lib.es2022.object.d.ts","./node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","./node_modules/typescript/lib/lib.es2022.string.d.ts","./node_modules/typescript/lib/lib.es2022.regexp.d.ts","./node_modules/typescript/lib/lib.es2023.array.d.ts","./node_modules/typescript/lib/lib.es2023.collection.d.ts","./node_modules/typescript/lib/lib.esnext.collection.d.ts","./node_modules/typescript/lib/lib.esnext.intl.d.ts","./node_modules/typescript/lib/lib.esnext.disposable.d.ts","./node_modules/typescript/lib/lib.esnext.promise.d.ts","./node_modules/typescript/lib/lib.esnext.decorators.d.ts","./node_modules/typescript/lib/lib.esnext.object.d.ts","./node_modules/typescript/lib/lib.decorators.d.ts","./node_modules/typescript/lib/lib.decorators.legacy.d.ts","./globals.d.ts","./node_modules/@types/node/assert.d.ts","./node_modules/@types/node/assert/strict.d.ts","./node_modules/undici-types/header.d.ts","./node_modules/undici-types/readable.d.ts","./node_modules/undici-types/file.d.ts","./node_modules/undici-types/fetch.d.ts","./node_modules/undici-types/formdata.d.ts","./node_modules/undici-types/connector.d.ts","./node_modules/undici-types/client.d.ts","./node_modules/undici-types/errors.d.ts","./node_modules/undici-types/dispatcher.d.ts","./node_modules/undici-types/global-dispatcher.d.ts","./node_modules/undici-types/global-origin.d.ts","./node_modules/undici-types/pool-stats.d.ts","./node_modules/undici-types/pool.d.ts","./node_modules/undici-types/handlers.d.ts","./node_modules/undici-types/balanced-pool.d.ts","./node_modules/undici-types/agent.d.ts","./node_modules/undici-types/mock-interceptor.d.ts","./node_modules/undici-types/mock-agent.d.ts","./node_modules/undici-types/mock-client.d.ts","./node_modules/undici-types/mock-pool.d.ts","./node_modules/undici-types/mock-errors.d.ts","./node_modules/undici-types/proxy-agent.d.ts","./node_modules/undici-types/api.d.ts","./node_modules/undici-types/cookies.d.ts","./node_modules/undici-types/patch.d.ts","./node_modules/undici-types/filereader.d.ts","./node_modules/undici-types/diagnostics-channel.d.ts","./node_modules/undici-types/websocket.d.ts","./node_modules/undici-types/content-type.d.ts","./node_modules/undici-types/cache.d.ts","./node_modules/undici-types/interceptors.d.ts","./node_modules/undici-types/index.d.ts","./node_modules/@types/node/globals.d.ts","./node_modules/@types/node/async_hooks.d.ts","./node_modules/@types/node/buffer.d.ts","./node_modules/@types/node/child_process.d.ts","./node_modules/@types/node/cluster.d.ts","./node_modules/@types/node/console.d.ts","./node_modules/@types/node/constants.d.ts","./node_modules/@types/node/crypto.d.ts","./node_modules/@types/node/dgram.d.ts","./node_modules/@types/node/diagnostics_channel.d.ts","./node_modules/@types/node/dns.d.ts","./node_modules/@types/node/dns/promises.d.ts","./node_modules/@types/node/domain.d.ts","./node_modules/@types/node/dom-events.d.ts","./node_modules/@types/node/events.d.ts","./node_modules/@types/node/fs.d.ts","./node_modules/@types/node/fs/promises.d.ts","./node_modules/@types/node/http.d.ts","./node_modules/@types/node/http2.d.ts","./node_modules/@types/node/https.d.ts","./node_modules/@types/node/inspector.d.ts","./node_modules/@types/node/module.d.ts","./node_modules/@types/node/net.d.ts","./node_modules/@types/node/os.d.ts","./node_modules/@types/node/path.d.ts","./node_modules/@types/node/perf_hooks.d.ts","./node_modules/@types/node/process.d.ts","./node_modules/@types/node/punycode.d.ts","./node_modules/@types/node/querystring.d.ts","./node_modules/@types/node/readline.d.ts","./node_modules/@types/node/readline/promises.d.ts","./node_modules/@types/node/repl.d.ts","./node_modules/@types/node/stream.d.ts","./node_modules/@types/node/stream/promises.d.ts","./node_modules/@types/node/stream/consumers.d.ts","./node_modules/@types/node/stream/web.d.ts","./node_modules/@types/node/string_decoder.d.ts","./node_modules/@types/node/test.d.ts","./node_modules/@types/node/timers.d.ts","./node_modules/@types/node/timers/promises.d.ts","./node_modules/@types/node/tls.d.ts","./node_modules/@types/node/trace_events.d.ts","./node_modules/@types/node/tty.d.ts","./node_modules/@types/node/url.d.ts","./node_modules/@types/node/util.d.ts","./node_modules/@types/node/v8.d.ts","./node_modules/@types/node/vm.d.ts","./node_modules/@types/node/wasi.d.ts","./node_modules/@types/node/worker_threads.d.ts","./node_modules/@types/node/zlib.d.ts","./node_modules/@types/node/globals.global.d.ts","./node_modules/@types/node/index.d.ts","./node_modules/@types/mysql/index.d.ts","./node_modules/dotenv/lib/main.d.ts","./src/config/database.ts","./src/types/features/task.ts","./src/model.ts","./node_modules/uwebsockets.js/index.d.ts","./node_modules/hyper-express/types/components/plugins/livefile.d.ts","./node_modules/hyper-express/types/components/http/response.d.ts","./node_modules/hyper-express/types/components/plugins/multipartfield.d.ts","./node_modules/hyper-express/types/components/http/request.d.ts","./node_modules/typed-emitter/index.d.ts","./node_modules/hyper-express/types/components/ws/websocket.d.ts","./node_modules/hyper-express/types/components/middleware/middlewarenext.d.ts","./node_modules/hyper-express/types/components/middleware/middlewarehandler.d.ts","./node_modules/hyper-express/types/components/router/router.d.ts","./node_modules/hyper-express/types/components/plugins/hostmanager.d.ts","./node_modules/hyper-express/types/components/server.d.ts","./node_modules/hyper-express/types/components/plugins/sseventstream.d.ts","./node_modules/hyper-express/types/index.d.ts","./src/config/middleware.ts","./node_modules/moment/ts3.1-typings/moment.d.ts","./src/routes/features.ts","./src/routes/users.ts","./src/routes/main.ts","./node_modules/@types/cors/index.d.ts","./src/server.ts"],"fileInfos":[{"version":"824cb491a40f7e8fdeb56f1df5edf91b23f3e3ee6b4cde84d4a99be32338faee","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","1c0cdb8dc619bc549c3e5020643e7cf7ae7940058e8c7e5aefa5871b6d86f44b","886e50ef125efb7878f744e86908884c0133e7a6d9d80013f421b0cd8fb2af94",{"version":"87d693a4920d794a73384b3c779cadcb8548ac6945aa7a925832fe2418c9527a","affectsGlobalScope":true},{"version":"76f838d5d49b65de83bc345c04aa54c62a3cfdb72a477dc0c0fce89a30596c30","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"ea011c76963fb15ef1cdd7ce6a6808b46322c527de2077b6cfdf23ae6f5f9ec7","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"b20fe0eca9a4e405f1a5ae24a2b3290b37cf7f21eba6cbe4fc3fab979237d4f3","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"5e07ed3809d48205d5b985642a59f2eba47c402374a7cf8006b686f79efadcbd","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"8073890e29d2f46fdbc19b8d6d2eb9ea58db9a2052f8640af20baff9afbc8640","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"956d27abdea9652e8368ce029bb1e0b9174e9678a273529f426df4b3d90abd60","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"d8670852241d4c6e03f2b89d67497a4bbefe29ecaa5a444e2c11a9b05e6fccc6","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"b1cb28af0c891c8c96b2d6b7be76bd394fddcfdb4709a20ba05a7c1605eea0f9","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"15b98a533864d324e5f57cd3cfc0579b231df58c1c0f6063ea0fcb13c3c74ff9","affectsGlobalScope":true},{"version":"ac77cb3e8c6d3565793eb90a8373ee8033146315a3dbead3bde8db5eaf5e5ec6","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"2fef54945a13095fdb9b84f705f2b5994597640c46afeb2ce78352fab4cb3279","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},{"version":"b512d88adcf92e5a2ab93b72a967a96e8875a0e5d6ec822503dc5cb0aeb065b7","affectsGlobalScope":true},"efc7d584a33fe3422847783d228f315c4cd1afe74bd7cf8e3f0e4c1125129fef","7394959e5a741b185456e1ef5d64599c36c60a323207450991e7a42e08911419","5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","7180c03fd3cb6e22f911ce9ba0f8a7008b1a6ddbe88ccf16a9c8140ef9ac1686","25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","54cb85a47d760da1c13c00add10d26b5118280d44d58e6908d8e89abbd9d7725","3e4825171442666d31c845aeb47fcd34b62e14041bb353ae2b874285d78482aa","c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","a967bfe3ad4e62243eb604bf956101e4c740f5921277c60debaf325c1320bf88","e9775e97ac4877aebf963a0289c81abe76d1ec9a2a7778dbe637e5151f25c5f3","471e1da5a78350bc55ef8cef24eb3aca6174143c281b8b214ca2beda51f5e04a","cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","db3435f3525cd785bf21ec6769bf8da7e8a776be1a99e2e7efb5f244a2ef5fee","c3b170c45fc031db31f782e612adf7314b167e60439d304b49e704010e7bafe5","40383ebef22b943d503c6ce2cb2e060282936b952a01bea5f9f493d5fb487cc7","4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","3a84b7cb891141824bd00ef8a50b6a44596aded4075da937f180c90e362fe5f6","13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","33203609eba548914dc83ddf6cadbc0bcb6e8ef89f6d648ca0908ae887f9fcc5","0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","e53a3c2a9f624d90f24bf4588aacd223e7bec1b9d0d479b68d2f4a9e6011147f","339dc5265ee5ed92e536a93a04c4ebbc2128f45eeec6ed29f379e0085283542c","9f0a92164925aa37d4a5d9dd3e0134cff8177208dba55fd2310cd74beea40ee2","8bfdb79bf1a9d435ec48d9372dc93291161f152c0865b81fc0b2694aedb4578d","2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","d32275be3546f252e3ad33976caf8c5e842c09cb87d468cb40d5f4cf092d1acc","4a0c3504813a3289f7fb1115db13967c8e004aa8e4f8a9021b95285502221bd1",{"version":"a14ed46fa3f5ffc7a8336b497cd07b45c2084213aaca933a22443fcb2eef0d07","affectsGlobalScope":true},"cce1f5f86974c1e916ec4a8cab6eec9aa8e31e8148845bf07fbaa8e1d97b1a2c",{"version":"7fd7fcbf021a5845bdd9397d4649fcf2fe17152d2098140fc723099a215d19ad","affectsGlobalScope":true},"df3389f71a71a38bc931aaf1ef97a65fada98f0a27f19dd12f8b8de2b0f4e461","7b43160a49cf2c6082da0465876c4a0b164e160b81187caeb0a6ca7a281e85ba",{"version":"41fb2a1c108fbf46609ce5a451b7ec78eb9b5ada95fd5b94643e4b26397de0b3","affectsGlobalScope":true},"a40826e8476694e90da94aa008283a7de50d1dafd37beada623863f1901cb7fb",{"version":"8b809082dfeffc8cc4f3b9c59f55c0ff52ba12f5ae0766cb5c35deee83b8552e","affectsGlobalScope":true},"bd3f5d05b6b5e4bfcea7739a45f3ffb4a7f4a3442ba7baf93e0200799285b8f1","4c775c2fccabf49483c03cd5e3673f87c1ffb6079d98e7b81089c3def79e29c6","8806ae97308ef26363bd7ec8071bca4d07fb575f905ee3d8a91aff226df6d618","af5bf1db6f1804fb0069039ae77a05d60133c77a2158d9635ea27b6bb2828a8f","b7fe70be794e13d1b7940e318b8770cd1fb3eced7707805318a2e3aaac2c3e9e",{"version":"2c71199d1fc83bf17636ad5bf63a945633406b7b94887612bba4ef027c662b3e","affectsGlobalScope":true},{"version":"674168aa3db414ea0a19b2a31d901b2d49705c7a495e43ffdc96928543010f8c","affectsGlobalScope":true},"fe1fd6afdfe77976d4c702f3746c05fb05a7e566845c890e0e970fe9376d6a90","313a0b063f5188037db113509de1b934a0e286f14e9479af24fada241435e707","afb1701fd4be413a8a5a88df6befdd4510c30a31372c07a4138facf61594c66d","87ef1a23caa071b07157c72077fa42b86d30568f9dc9e31eed24d5d14fc30ba8","396a8939b5e177542bdf9b5262b4eee85d29851b2d57681fa9d7eae30e225830","21773f5ac69ddf5a05636ba1f50b5239f4f2d27e4420db147fc2f76a5ae598ac",{"version":"ea455cc68871b049bcecd9f56d4cf27b852d6dafd5e3b54468ca87cc11604e4d","affectsGlobalScope":true},"c07146dbbbd8b347241b5df250a51e48f2d7bef19b1e187b1a3f20c849988ff1","45b1053e691c5af9bfe85060a3e1542835f8d84a7e6e2e77ca305251eda0cb3c","0f05c06ff6196958d76b865ae17245b52d8fe01773626ac3c43214a2458ea7b7",{"version":"ae5507fc333d637dec9f37c6b3f4d423105421ea2820a64818de55db85214d66","affectsGlobalScope":true},{"version":"0666f4c99b8688c7be5956df8fecf5d1779d3b22f8f2a88258ae7072c7b6026f","affectsGlobalScope":true},"8abd0566d2854c4bd1c5e48e05df5c74927187f1541e6770001d9637ac41542e","54e854615c4eafbdd3fd7688bd02a3aafd0ccf0e87c98f79d3e9109f047ce6b8","d8dba11dc34d50cb4202de5effa9a1b296d7a2f4a029eec871f894bddfb6430d","8b71dd18e7e63b6f991b511a201fad7c3bf8d1e0dd98acb5e3d844f335a73634","01d8e1419c84affad359cc240b2b551fb9812b450b4d3d456b64cda8102d4f60","8221b00f271cf7f535a8eeec03b0f80f0929c7a16116e2d2df089b41066de69b","269929a24b2816343a178008ac9ae9248304d92a8ba8e233055e0ed6dbe6ef71","93452d394fdd1dc551ec62f5042366f011a00d342d36d50793b3529bfc9bd633","7fa32887f8a97909fca35ebba3740f8caf8df146618d8fff957a3f89f67a2f6a","9a9634296cca836c3308923ba7aa094fa6ed76bb1e366d8ddcf5c65888ab1024",{"version":"bddce945d552a963c9733db106b17a25474eefcab7fc990157a2134ef55d4954","affectsGlobalScope":true},{"version":"7052b7b0c3829df3b4985bab2fd74531074b4835d5a7b263b75c82f0916ad62f","affectsGlobalScope":true},"aa34c3aa493d1c699601027c441b9664547c3024f9dbab1639df7701d63d18fa","4b55240c2a03b2c71e98a7fc528b16136faa762211c92e781a01c37821915ea6","7c651f8dce91a927ab62925e73f190763574c46098f2b11fb8ddc1b147a6709a","7440ab60f4cb031812940cc38166b8bb6fbf2540cfe599f87c41c08011f0c1df",{"version":"94c086dff8dbc5998749326bc69b520e8e4273fb5b7b58b50e0210e0885dfcde","affectsGlobalScope":true},{"version":"f5b5dc128973498b75f52b1b8c2d5f8629869104899733ae485100c2309b4c12","affectsGlobalScope":true},"ebe5facd12fd7745cda5f4bc3319f91fb29dc1f96e57e9c6f8b260a7cc5b67ee","79bad8541d5779c85e82a9fb119c1fe06af77a71cc40f869d62ad379473d4b75","37dc027f781c75f0f546e329cfac7cf92a6b289f42458f47a9adc25e516b6839",{"version":"629d20681ca284d9e38c0a019f647108f5fe02f9c59ac164d56f5694fc3faf4d","affectsGlobalScope":true},"e7dbf5716d76846c7522e910896c5747b6df1abd538fee8f5291bdc843461795",{"version":"ab9b9a36e5284fd8d3bf2f7d5fcbc60052f25f27e4d20954782099282c60d23e","affectsGlobalScope":true},"b510d0a18e3db42ac9765d26711083ec1e8b4e21caaca6dc4d25ae6e8623f447","6eb639ffa89a206d4eb9e68270ba781caede9fe44aa5dc8f73600a2f6b166715","f634e4c7d5cdba8e092d98098033b311c8ef304038d815c63ffdb9f78f3f7bb7",{"version":"0dd73bad7605441dbcd05ca5ca51be95304a615578ac31e1318aa98a46ef422c","signature":"27a30e711bf927686e5f9e0af3ea0a5508a4b0a2d3d79ceebdbec252c0ab199b"},{"version":"a0568b737a952d136691f53a028a6b1a2711f73e2a92f69f528ba5bf56ae9da4","signature":"d1a9d742a698b83aaddb7dbbf381e81dd15ed1daf17823201524e5fb14206ea5"},{"version":"856e64a591fb6e9f0d9bb790e8cd39ee19135c5756dde410ad8f8c178e717af7","signature":"fb7100452c61ac56f0a02e9630fe203d407d12a0608b0d14eebc06221b4c09cb"},"2e51b618eaea0b61ee9cddbd6d26bf0f20424acbf867572b9eefdbb5fbc416f1","4c51e36c9004c2d14a0bba49beb91630da51b15a0c41f91b2b076038126a5806","2d50ee951073df4ad0529607b2261f2a8acec6c91f1f9ff0460b86323dc25d6c","af6e515790bebd2d99ab46c08a3570f9fd74cd8542a4ecd2ca54fc7356680d24","051d331223d7c4f0e10e85f6df76d94df28109d8f5bae34e981f445fa79476dc","6c27d4b5ba01295ef334456d9af4366aca789f228eee70fcb874b903a59b0e5b","64d7e1014c3328a86e7f421599d1a4b20328fb2aae5154d8e79f3bbfe8bf7cdd","78ae308b449f2a861b1b1fbdd4aa0ba371c5e9e66aed2c2acf3b851785e652a4","d9e5cffcb3a6159f0a1e6fc1ad13abfe496a86cb82e0f59a82c926f8dad9d869","01ca00ffcef621132620d01803f66eebdddea39a39bf50c73bc8cd35aa5e32b4","3800c5ce959fa102827db5cb875a461a05d43688ef4d85b76855c968a1573830","d8b6ce3e56744ff8e93ae82e4d76580bea4d5de176033f05ccb8f5badaa9599c","aca6ac8bf8de795cf3b67d450592d0f36356a3dcd0fb6425ac52c910aeb98ce4","e35bab4c4f2cb9fa5c235ae5fe4e0a233b14a4eea950f76f264442458def838f",{"version":"ce6892ef7fea86c129794f599f77bb6944847cecbc16cb880bac2b95df877d34","signature":"11c69b42dbab3a7f5e04ce9cdf5e1f9d81ef284aa88cac90b96801096acfbc96"},"4051f6311deb0ce6052329eeb1cd4b1b104378fe52f882f483130bea75f92197",{"version":"1c31e5815be619aa351b09ffa8cc78a793d1f6093eaf08445bc6acf76cfa3ed8","signature":"5066cd925aad121278d6ddccb9717fbb6b75bdb552a84dff5745f81c95dee9c7"},{"version":"ba2cc4afe61c56d2c62e68e37c3244227af575d7a79f56f75a7494c65d9fb198","signature":"e6e226da49a36d5bee627679004561d5c421915544277ad52918ad63601fce3e"},{"version":"af0e937edc10a91f524e07244c4b7aaf01e5350c0943d0e9baf940a8d86b9419","signature":"6d55b9ef9791daaacb257213d0c37922a9d2d4714dc22223470faf66620b44d2"},"3937b50a4de68f6d21614461e9d47af0d8421ca80fc2a72b667ca2151f492120",{"version":"068e250591da5b6b309b063cf82d1a3c3e9d2fec444a1aff6d83b73739cb07ca","signature":"8e609bb71c20b858c77f0e9f90bb1319db8477b13f9f965f1a1e18524bf50881"}],"root":[70,[159,161],176,[178,180],182],"options":{"allowJs":true,"esModuleInterop":true,"jsx":1,"module":99,"skipLibCheck":true,"strict":true,"target":1},"fileIdsList":[[122,156],[119,137,145,156],[71],[106],[107,112,140],[108,119,120,127,137,148],[108,109,119,127],[110,149],[111,112,120,128],[112,137,145],[113,115,119,127],[106,114],[115,116],[119],[117,119],[106,119],[119,120,121,137,148],[119,120,121,134,137,140],[104,107,153],[115,119,122,127,137,148],[119,120,122,123,127,137,145,148],[122,124,137,145,148],[71,72,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155],[119,125],[126,148,153],[115,119,127,137],[128],[129],[106,130],[131,147,153],[132],[133],[119,134,135],[134,136,149,151],[107,119,137,138,139,140],[107,137,139],[137,138],[140],[141],[106,137],[119,143,144],[143,144],[112,127,137,145],[146],[127,147],[107,122,133,148],[112,149],[137,150],[126,151],[152],[107,112,119,121,130,137,148,151,153],[137,154],[148,156],[137,162,165,173],[137,162,163,173],[164,166,169],[119,120],[137],[164],[137,164,166,168,170],[162,164,166,171,172],[119,137,162,164,167],[162,163,164,165,166,168,169,170,171,173,174],[81,85,148],[81,137,148],[76],[78,81,145,148],[127,145],[156],[76,156],[78,81,127,148],[73,74,77,80,107,119,137,148],[73,79],[77,81,107,140,148,156],[107,156],[97,107,156],[75,76,156],[81],[75,76,77,78,79,80,81,82,83,85,86,87,88,89,90,91,92,93,94,95,96,98,99,100,101,102,103],[81,88,89],[79,81,89,90],[80],[73,76,81],[81,85,89,90],[85],[79,81,84,148],[73,78,79,81,85,88],[107,137],[76,81,97,107,153,156],[157,158],[175],[157,159,160],[159,160,161,175,177],[159,175],[175,176,178,179,180,181],[157],[157,160]],"referencedMap":[[181,1],[157,2],[71,3],[72,3],[106,4],[107,5],[108,6],[109,7],[110,8],[111,9],[112,10],[113,11],[114,12],[115,13],[116,13],[118,14],[117,15],[119,16],[120,17],[121,18],[105,19],[122,20],[123,21],[124,22],[156,23],[125,24],[126,25],[127,26],[128,27],[129,28],[130,29],[131,30],[132,31],[133,32],[134,33],[135,33],[136,34],[137,35],[139,36],[138,37],[140,38],[141,39],[142,40],[143,41],[144,42],[145,43],[146,44],[147,45],[148,46],[149,47],[150,48],[151,49],[152,50],[153,51],[154,52],[158,53],[166,54],[164,55],[170,56],[172,14],[163,57],[165,58],[174,59],[171,60],[173,61],[168,62],[175,63],[88,64],[95,65],[87,64],[102,66],[79,67],[78,68],[101,69],[96,70],[99,71],[81,72],[80,73],[76,74],[75,75],[98,76],[77,77],[82,78],[86,78],[104,79],[103,78],[90,80],[91,81],[93,82],[89,83],[92,84],[97,69],[84,85],[85,86],[94,87],[74,88],[100,89],[159,90],[176,91],[161,92],[178,93],[180,91],[179,94],[182,95]],"exportedModulesMap":[[181,1],[157,2],[71,3],[72,3],[106,4],[107,5],[108,6],[109,7],[110,8],[111,9],[112,10],[113,11],[114,12],[115,13],[116,13],[118,14],[117,15],[119,16],[120,17],[121,18],[105,19],[122,20],[123,21],[124,22],[156,23],[125,24],[126,25],[127,26],[128,27],[129,28],[130,29],[131,30],[132,31],[133,32],[134,33],[135,33],[136,34],[137,35],[139,36],[138,37],[140,38],[141,39],[142,40],[143,41],[144,42],[145,43],[146,44],[147,45],[148,46],[149,47],[150,48],[151,49],[152,50],[153,51],[154,52],[158,53],[166,54],[164,55],[170,56],[172,14],[163,57],[165,58],[174,59],[171,60],[173,61],[168,62],[175,63],[88,64],[95,65],[87,64],[102,66],[79,67],[78,68],[101,69],[96,70],[99,71],[81,72],[80,73],[76,74],[75,75],[98,76],[77,77],[82,78],[86,78],[104,79],[103,78],[90,80],[91,81],[93,82],[89,83],[92,84],[97,69],[84,85],[85,86],[94,87],[74,88],[100,89],[159,96],[176,91],[161,97],[178,91],[180,91],[179,91]],"semanticDiagnosticsPerFile":[70,181,157,71,72,106,107,108,109,110,111,112,113,114,115,116,118,117,119,120,121,105,155,122,123,124,156,125,126,127,128,129,130,131,132,133,134,135,136,137,139,138,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,158,166,164,170,169,172,163,165,174,171,173,168,175,177,167,68,69,12,13,15,14,2,16,17,18,19,20,21,22,23,3,24,4,25,29,26,27,28,30,31,32,5,33,34,35,36,6,40,37,38,39,41,7,42,47,48,43,44,45,46,8,52,49,50,51,53,9,54,55,56,59,57,58,60,61,10,1,62,11,66,64,63,67,65,88,95,87,102,79,78,101,96,99,81,80,76,75,98,77,82,83,86,73,104,103,90,91,93,89,92,97,84,85,94,74,100,162,159,176,161,[178,[{"file":"./src/routes/features.ts","start":932,"length":6,"messageText":"'result' is of type 'unknown'.","category":1,"code":18046}]],180,179,182,160],"affectedFilesPendingEmit":[159,176,161,178,180,179,182,160]},"version":"5.4.2"} -------------------------------------------------------------------------------- /api/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "api-cuymodoro", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "api-cuymodoro", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "@types/bcrypt": "^5.0.2", 13 | "@types/cors": "^2.8.17", 14 | "bcrypt": "^5.1.1", 15 | "cors": "^2.8.5", 16 | "dotenv": "^16.4.5", 17 | "express": "^4.19.1", 18 | "hyper-express": "^6.14.12", 19 | "moment": "^2.30.1", 20 | "mysql": "^2.18.1", 21 | "ts-node": "^10.9.2" 22 | }, 23 | "devDependencies": { 24 | "@types/express": "^4.17.21", 25 | "@types/mysql": "^2.15.26", 26 | "@types/node": "^20.11.30", 27 | "nodemon": "^3.1.0", 28 | "ts-node-dev": "^2.0.0", 29 | "tsconfig-paths": "^4.2.0", 30 | "tslib": "^2.6.2", 31 | "typescript": "^5.4.3" 32 | } 33 | }, 34 | "node_modules/@cspotcode/source-map-support": { 35 | "version": "0.8.1", 36 | "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", 37 | "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", 38 | "dependencies": { 39 | "@jridgewell/trace-mapping": "0.3.9" 40 | }, 41 | "engines": { 42 | "node": ">=12" 43 | } 44 | }, 45 | "node_modules/@jridgewell/resolve-uri": { 46 | "version": "3.1.2", 47 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", 48 | "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", 49 | "engines": { 50 | "node": ">=6.0.0" 51 | } 52 | }, 53 | "node_modules/@jridgewell/sourcemap-codec": { 54 | "version": "1.4.15", 55 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 56 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" 57 | }, 58 | "node_modules/@jridgewell/trace-mapping": { 59 | "version": "0.3.9", 60 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", 61 | "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", 62 | "dependencies": { 63 | "@jridgewell/resolve-uri": "^3.0.3", 64 | "@jridgewell/sourcemap-codec": "^1.4.10" 65 | } 66 | }, 67 | "node_modules/@mapbox/node-pre-gyp": { 68 | "version": "1.0.11", 69 | "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", 70 | "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", 71 | "dependencies": { 72 | "detect-libc": "^2.0.0", 73 | "https-proxy-agent": "^5.0.0", 74 | "make-dir": "^3.1.0", 75 | "node-fetch": "^2.6.7", 76 | "nopt": "^5.0.0", 77 | "npmlog": "^5.0.1", 78 | "rimraf": "^3.0.2", 79 | "semver": "^7.3.5", 80 | "tar": "^6.1.11" 81 | }, 82 | "bin": { 83 | "node-pre-gyp": "bin/node-pre-gyp" 84 | } 85 | }, 86 | "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { 87 | "version": "5.0.0", 88 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", 89 | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", 90 | "dependencies": { 91 | "abbrev": "1" 92 | }, 93 | "bin": { 94 | "nopt": "bin/nopt.js" 95 | }, 96 | "engines": { 97 | "node": ">=6" 98 | } 99 | }, 100 | "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { 101 | "version": "3.0.2", 102 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 103 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 104 | "dependencies": { 105 | "glob": "^7.1.3" 106 | }, 107 | "bin": { 108 | "rimraf": "bin.js" 109 | }, 110 | "funding": { 111 | "url": "https://github.com/sponsors/isaacs" 112 | } 113 | }, 114 | "node_modules/@tsconfig/node10": { 115 | "version": "1.0.9", 116 | "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", 117 | "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" 118 | }, 119 | "node_modules/@tsconfig/node12": { 120 | "version": "1.0.11", 121 | "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", 122 | "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" 123 | }, 124 | "node_modules/@tsconfig/node14": { 125 | "version": "1.0.3", 126 | "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", 127 | "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" 128 | }, 129 | "node_modules/@tsconfig/node16": { 130 | "version": "1.0.4", 131 | "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", 132 | "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" 133 | }, 134 | "node_modules/@types/bcrypt": { 135 | "version": "5.0.2", 136 | "resolved": "https://registry.npmjs.org/@types/bcrypt/-/bcrypt-5.0.2.tgz", 137 | "integrity": "sha512-6atioO8Y75fNcbmj0G7UjI9lXN2pQ/IGJ2FWT4a/btd0Lk9lQalHLKhkgKVZ3r+spnmWUKfbMi1GEe9wyHQfNQ==", 138 | "dependencies": { 139 | "@types/node": "*" 140 | } 141 | }, 142 | "node_modules/@types/body-parser": { 143 | "version": "1.19.5", 144 | "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", 145 | "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", 146 | "dev": true, 147 | "dependencies": { 148 | "@types/connect": "*", 149 | "@types/node": "*" 150 | } 151 | }, 152 | "node_modules/@types/connect": { 153 | "version": "3.4.38", 154 | "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", 155 | "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", 156 | "dev": true, 157 | "dependencies": { 158 | "@types/node": "*" 159 | } 160 | }, 161 | "node_modules/@types/cors": { 162 | "version": "2.8.17", 163 | "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz", 164 | "integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==", 165 | "dependencies": { 166 | "@types/node": "*" 167 | } 168 | }, 169 | "node_modules/@types/express": { 170 | "version": "4.17.21", 171 | "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", 172 | "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", 173 | "dev": true, 174 | "dependencies": { 175 | "@types/body-parser": "*", 176 | "@types/express-serve-static-core": "^4.17.33", 177 | "@types/qs": "*", 178 | "@types/serve-static": "*" 179 | } 180 | }, 181 | "node_modules/@types/express-serve-static-core": { 182 | "version": "4.17.43", 183 | "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.43.tgz", 184 | "integrity": "sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==", 185 | "dev": true, 186 | "dependencies": { 187 | "@types/node": "*", 188 | "@types/qs": "*", 189 | "@types/range-parser": "*", 190 | "@types/send": "*" 191 | } 192 | }, 193 | "node_modules/@types/http-errors": { 194 | "version": "2.0.4", 195 | "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", 196 | "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", 197 | "dev": true 198 | }, 199 | "node_modules/@types/mime": { 200 | "version": "1.3.5", 201 | "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", 202 | "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", 203 | "dev": true 204 | }, 205 | "node_modules/@types/mysql": { 206 | "version": "2.15.26", 207 | "resolved": "https://registry.npmjs.org/@types/mysql/-/mysql-2.15.26.tgz", 208 | "integrity": "sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==", 209 | "dev": true, 210 | "dependencies": { 211 | "@types/node": "*" 212 | } 213 | }, 214 | "node_modules/@types/node": { 215 | "version": "20.11.30", 216 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", 217 | "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", 218 | "dependencies": { 219 | "undici-types": "~5.26.4" 220 | } 221 | }, 222 | "node_modules/@types/qs": { 223 | "version": "6.9.14", 224 | "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.14.tgz", 225 | "integrity": "sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA==", 226 | "dev": true 227 | }, 228 | "node_modules/@types/range-parser": { 229 | "version": "1.2.7", 230 | "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", 231 | "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", 232 | "dev": true 233 | }, 234 | "node_modules/@types/send": { 235 | "version": "0.17.4", 236 | "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", 237 | "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", 238 | "dev": true, 239 | "dependencies": { 240 | "@types/mime": "^1", 241 | "@types/node": "*" 242 | } 243 | }, 244 | "node_modules/@types/serve-static": { 245 | "version": "1.15.5", 246 | "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.5.tgz", 247 | "integrity": "sha512-PDRk21MnK70hja/YF8AHfC7yIsiQHn1rcXx7ijCFBX/k+XQJhQT/gw3xekXKJvx+5SXaMMS8oqQy09Mzvz2TuQ==", 248 | "dev": true, 249 | "dependencies": { 250 | "@types/http-errors": "*", 251 | "@types/mime": "*", 252 | "@types/node": "*" 253 | } 254 | }, 255 | "node_modules/@types/strip-bom": { 256 | "version": "3.0.0", 257 | "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", 258 | "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", 259 | "dev": true 260 | }, 261 | "node_modules/@types/strip-json-comments": { 262 | "version": "0.0.30", 263 | "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", 264 | "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", 265 | "dev": true 266 | }, 267 | "node_modules/abbrev": { 268 | "version": "1.1.1", 269 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 270 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 271 | }, 272 | "node_modules/accepts": { 273 | "version": "1.3.8", 274 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 275 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 276 | "dependencies": { 277 | "mime-types": "~2.1.34", 278 | "negotiator": "0.6.3" 279 | }, 280 | "engines": { 281 | "node": ">= 0.6" 282 | } 283 | }, 284 | "node_modules/acorn": { 285 | "version": "8.11.3", 286 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", 287 | "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", 288 | "bin": { 289 | "acorn": "bin/acorn" 290 | }, 291 | "engines": { 292 | "node": ">=0.4.0" 293 | } 294 | }, 295 | "node_modules/acorn-walk": { 296 | "version": "8.3.2", 297 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", 298 | "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", 299 | "engines": { 300 | "node": ">=0.4.0" 301 | } 302 | }, 303 | "node_modules/agent-base": { 304 | "version": "6.0.2", 305 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 306 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 307 | "dependencies": { 308 | "debug": "4" 309 | }, 310 | "engines": { 311 | "node": ">= 6.0.0" 312 | } 313 | }, 314 | "node_modules/ansi-regex": { 315 | "version": "5.0.1", 316 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 317 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 318 | "engines": { 319 | "node": ">=8" 320 | } 321 | }, 322 | "node_modules/anymatch": { 323 | "version": "3.1.3", 324 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 325 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 326 | "dev": true, 327 | "dependencies": { 328 | "normalize-path": "^3.0.0", 329 | "picomatch": "^2.0.4" 330 | }, 331 | "engines": { 332 | "node": ">= 8" 333 | } 334 | }, 335 | "node_modules/aproba": { 336 | "version": "2.0.0", 337 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", 338 | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" 339 | }, 340 | "node_modules/are-we-there-yet": { 341 | "version": "2.0.0", 342 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", 343 | "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", 344 | "dependencies": { 345 | "delegates": "^1.0.0", 346 | "readable-stream": "^3.6.0" 347 | }, 348 | "engines": { 349 | "node": ">=10" 350 | } 351 | }, 352 | "node_modules/are-we-there-yet/node_modules/readable-stream": { 353 | "version": "3.6.2", 354 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", 355 | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", 356 | "dependencies": { 357 | "inherits": "^2.0.3", 358 | "string_decoder": "^1.1.1", 359 | "util-deprecate": "^1.0.1" 360 | }, 361 | "engines": { 362 | "node": ">= 6" 363 | } 364 | }, 365 | "node_modules/arg": { 366 | "version": "4.1.3", 367 | "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", 368 | "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" 369 | }, 370 | "node_modules/array-flatten": { 371 | "version": "1.1.1", 372 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 373 | "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" 374 | }, 375 | "node_modules/balanced-match": { 376 | "version": "1.0.2", 377 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 378 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 379 | }, 380 | "node_modules/bcrypt": { 381 | "version": "5.1.1", 382 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", 383 | "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", 384 | "hasInstallScript": true, 385 | "dependencies": { 386 | "@mapbox/node-pre-gyp": "^1.0.11", 387 | "node-addon-api": "^5.0.0" 388 | }, 389 | "engines": { 390 | "node": ">= 10.0.0" 391 | } 392 | }, 393 | "node_modules/bignumber.js": { 394 | "version": "9.0.0", 395 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz", 396 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==", 397 | "engines": { 398 | "node": "*" 399 | } 400 | }, 401 | "node_modules/binary-extensions": { 402 | "version": "2.2.0", 403 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 404 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 405 | "dev": true, 406 | "engines": { 407 | "node": ">=8" 408 | } 409 | }, 410 | "node_modules/body-parser": { 411 | "version": "1.20.2", 412 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", 413 | "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", 414 | "dependencies": { 415 | "bytes": "3.1.2", 416 | "content-type": "~1.0.5", 417 | "debug": "2.6.9", 418 | "depd": "2.0.0", 419 | "destroy": "1.2.0", 420 | "http-errors": "2.0.0", 421 | "iconv-lite": "0.4.24", 422 | "on-finished": "2.4.1", 423 | "qs": "6.11.0", 424 | "raw-body": "2.5.2", 425 | "type-is": "~1.6.18", 426 | "unpipe": "1.0.0" 427 | }, 428 | "engines": { 429 | "node": ">= 0.8", 430 | "npm": "1.2.8000 || >= 1.4.16" 431 | } 432 | }, 433 | "node_modules/body-parser/node_modules/debug": { 434 | "version": "2.6.9", 435 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 436 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 437 | "dependencies": { 438 | "ms": "2.0.0" 439 | } 440 | }, 441 | "node_modules/body-parser/node_modules/ms": { 442 | "version": "2.0.0", 443 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 444 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 445 | }, 446 | "node_modules/brace-expansion": { 447 | "version": "1.1.11", 448 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 449 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 450 | "dependencies": { 451 | "balanced-match": "^1.0.0", 452 | "concat-map": "0.0.1" 453 | } 454 | }, 455 | "node_modules/braces": { 456 | "version": "3.0.2", 457 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 458 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 459 | "dev": true, 460 | "dependencies": { 461 | "fill-range": "^7.0.1" 462 | }, 463 | "engines": { 464 | "node": ">=8" 465 | } 466 | }, 467 | "node_modules/buffer-from": { 468 | "version": "1.1.2", 469 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 470 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 471 | "dev": true 472 | }, 473 | "node_modules/busboy": { 474 | "version": "1.6.0", 475 | "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", 476 | "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", 477 | "dependencies": { 478 | "streamsearch": "^1.1.0" 479 | }, 480 | "engines": { 481 | "node": ">=10.16.0" 482 | } 483 | }, 484 | "node_modules/bytes": { 485 | "version": "3.1.2", 486 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 487 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", 488 | "engines": { 489 | "node": ">= 0.8" 490 | } 491 | }, 492 | "node_modules/call-bind": { 493 | "version": "1.0.7", 494 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", 495 | "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", 496 | "dependencies": { 497 | "es-define-property": "^1.0.0", 498 | "es-errors": "^1.3.0", 499 | "function-bind": "^1.1.2", 500 | "get-intrinsic": "^1.2.4", 501 | "set-function-length": "^1.2.1" 502 | }, 503 | "engines": { 504 | "node": ">= 0.4" 505 | }, 506 | "funding": { 507 | "url": "https://github.com/sponsors/ljharb" 508 | } 509 | }, 510 | "node_modules/chokidar": { 511 | "version": "3.6.0", 512 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 513 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 514 | "dev": true, 515 | "dependencies": { 516 | "anymatch": "~3.1.2", 517 | "braces": "~3.0.2", 518 | "glob-parent": "~5.1.2", 519 | "is-binary-path": "~2.1.0", 520 | "is-glob": "~4.0.1", 521 | "normalize-path": "~3.0.0", 522 | "readdirp": "~3.6.0" 523 | }, 524 | "engines": { 525 | "node": ">= 8.10.0" 526 | }, 527 | "funding": { 528 | "url": "https://paulmillr.com/funding/" 529 | }, 530 | "optionalDependencies": { 531 | "fsevents": "~2.3.2" 532 | } 533 | }, 534 | "node_modules/chownr": { 535 | "version": "2.0.0", 536 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 537 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", 538 | "engines": { 539 | "node": ">=10" 540 | } 541 | }, 542 | "node_modules/color-support": { 543 | "version": "1.1.3", 544 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 545 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", 546 | "bin": { 547 | "color-support": "bin.js" 548 | } 549 | }, 550 | "node_modules/concat-map": { 551 | "version": "0.0.1", 552 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 553 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" 554 | }, 555 | "node_modules/console-control-strings": { 556 | "version": "1.1.0", 557 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 558 | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" 559 | }, 560 | "node_modules/content-disposition": { 561 | "version": "0.5.4", 562 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 563 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 564 | "dependencies": { 565 | "safe-buffer": "5.2.1" 566 | }, 567 | "engines": { 568 | "node": ">= 0.6" 569 | } 570 | }, 571 | "node_modules/content-disposition/node_modules/safe-buffer": { 572 | "version": "5.2.1", 573 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 574 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 575 | "funding": [ 576 | { 577 | "type": "github", 578 | "url": "https://github.com/sponsors/feross" 579 | }, 580 | { 581 | "type": "patreon", 582 | "url": "https://www.patreon.com/feross" 583 | }, 584 | { 585 | "type": "consulting", 586 | "url": "https://feross.org/support" 587 | } 588 | ] 589 | }, 590 | "node_modules/content-type": { 591 | "version": "1.0.5", 592 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", 593 | "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", 594 | "engines": { 595 | "node": ">= 0.6" 596 | } 597 | }, 598 | "node_modules/cookie": { 599 | "version": "0.4.2", 600 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 601 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", 602 | "engines": { 603 | "node": ">= 0.6" 604 | } 605 | }, 606 | "node_modules/cookie-signature": { 607 | "version": "1.2.1", 608 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.1.tgz", 609 | "integrity": "sha512-78KWk9T26NhzXtuL26cIJ8/qNHANyJ/ZYrmEXFzUmhZdjpBv+DlWlOANRTGBt48YcyslsLrj0bMLFTmXvLRCOw==", 610 | "engines": { 611 | "node": ">=6.6.0" 612 | } 613 | }, 614 | "node_modules/core-util-is": { 615 | "version": "1.0.3", 616 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 617 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" 618 | }, 619 | "node_modules/cors": { 620 | "version": "2.8.5", 621 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", 622 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", 623 | "dependencies": { 624 | "object-assign": "^4", 625 | "vary": "^1" 626 | }, 627 | "engines": { 628 | "node": ">= 0.10" 629 | } 630 | }, 631 | "node_modules/create-require": { 632 | "version": "1.1.1", 633 | "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", 634 | "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" 635 | }, 636 | "node_modules/debug": { 637 | "version": "4.3.4", 638 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 639 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 640 | "dependencies": { 641 | "ms": "2.1.2" 642 | }, 643 | "engines": { 644 | "node": ">=6.0" 645 | }, 646 | "peerDependenciesMeta": { 647 | "supports-color": { 648 | "optional": true 649 | } 650 | } 651 | }, 652 | "node_modules/define-data-property": { 653 | "version": "1.1.4", 654 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", 655 | "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", 656 | "dependencies": { 657 | "es-define-property": "^1.0.0", 658 | "es-errors": "^1.3.0", 659 | "gopd": "^1.0.1" 660 | }, 661 | "engines": { 662 | "node": ">= 0.4" 663 | }, 664 | "funding": { 665 | "url": "https://github.com/sponsors/ljharb" 666 | } 667 | }, 668 | "node_modules/delegates": { 669 | "version": "1.0.0", 670 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 671 | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" 672 | }, 673 | "node_modules/depd": { 674 | "version": "2.0.0", 675 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", 676 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", 677 | "engines": { 678 | "node": ">= 0.8" 679 | } 680 | }, 681 | "node_modules/destroy": { 682 | "version": "1.2.0", 683 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", 684 | "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", 685 | "engines": { 686 | "node": ">= 0.8", 687 | "npm": "1.2.8000 || >= 1.4.16" 688 | } 689 | }, 690 | "node_modules/detect-libc": { 691 | "version": "2.0.3", 692 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", 693 | "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", 694 | "engines": { 695 | "node": ">=8" 696 | } 697 | }, 698 | "node_modules/diff": { 699 | "version": "4.0.2", 700 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 701 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 702 | "engines": { 703 | "node": ">=0.3.1" 704 | } 705 | }, 706 | "node_modules/dotenv": { 707 | "version": "16.4.5", 708 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", 709 | "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", 710 | "engines": { 711 | "node": ">=12" 712 | }, 713 | "funding": { 714 | "url": "https://dotenvx.com" 715 | } 716 | }, 717 | "node_modules/dynamic-dedupe": { 718 | "version": "0.3.0", 719 | "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", 720 | "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", 721 | "dev": true, 722 | "dependencies": { 723 | "xtend": "^4.0.0" 724 | } 725 | }, 726 | "node_modules/ee-first": { 727 | "version": "1.1.1", 728 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 729 | "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" 730 | }, 731 | "node_modules/emoji-regex": { 732 | "version": "8.0.0", 733 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 734 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 735 | }, 736 | "node_modules/encodeurl": { 737 | "version": "1.0.2", 738 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 739 | "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", 740 | "engines": { 741 | "node": ">= 0.8" 742 | } 743 | }, 744 | "node_modules/es-define-property": { 745 | "version": "1.0.0", 746 | "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", 747 | "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", 748 | "dependencies": { 749 | "get-intrinsic": "^1.2.4" 750 | }, 751 | "engines": { 752 | "node": ">= 0.4" 753 | } 754 | }, 755 | "node_modules/es-errors": { 756 | "version": "1.3.0", 757 | "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", 758 | "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", 759 | "engines": { 760 | "node": ">= 0.4" 761 | } 762 | }, 763 | "node_modules/escape-html": { 764 | "version": "1.0.3", 765 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 766 | "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" 767 | }, 768 | "node_modules/etag": { 769 | "version": "1.8.1", 770 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 771 | "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", 772 | "engines": { 773 | "node": ">= 0.6" 774 | } 775 | }, 776 | "node_modules/express": { 777 | "version": "4.19.1", 778 | "resolved": "https://registry.npmjs.org/express/-/express-4.19.1.tgz", 779 | "integrity": "sha512-K4w1/Bp7y8iSiVObmCrtq8Cs79XjJc/RU2YYkZQ7wpUu5ZyZ7MtPHkqoMz4pf+mgXfNvo2qft8D9OnrH2ABk9w==", 780 | "dependencies": { 781 | "accepts": "~1.3.8", 782 | "array-flatten": "1.1.1", 783 | "body-parser": "1.20.2", 784 | "content-disposition": "0.5.4", 785 | "content-type": "~1.0.4", 786 | "cookie": "0.6.0", 787 | "cookie-signature": "1.0.6", 788 | "debug": "2.6.9", 789 | "depd": "2.0.0", 790 | "encodeurl": "~1.0.2", 791 | "escape-html": "~1.0.3", 792 | "etag": "~1.8.1", 793 | "finalhandler": "1.2.0", 794 | "fresh": "0.5.2", 795 | "http-errors": "2.0.0", 796 | "merge-descriptors": "1.0.1", 797 | "methods": "~1.1.2", 798 | "on-finished": "2.4.1", 799 | "parseurl": "~1.3.3", 800 | "path-to-regexp": "0.1.7", 801 | "proxy-addr": "~2.0.7", 802 | "qs": "6.11.0", 803 | "range-parser": "~1.2.1", 804 | "safe-buffer": "5.2.1", 805 | "send": "0.18.0", 806 | "serve-static": "1.15.0", 807 | "setprototypeof": "1.2.0", 808 | "statuses": "2.0.1", 809 | "type-is": "~1.6.18", 810 | "utils-merge": "1.0.1", 811 | "vary": "~1.1.2" 812 | }, 813 | "engines": { 814 | "node": ">= 0.10.0" 815 | } 816 | }, 817 | "node_modules/express/node_modules/cookie": { 818 | "version": "0.6.0", 819 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", 820 | "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", 821 | "engines": { 822 | "node": ">= 0.6" 823 | } 824 | }, 825 | "node_modules/express/node_modules/cookie-signature": { 826 | "version": "1.0.6", 827 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 828 | "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" 829 | }, 830 | "node_modules/express/node_modules/debug": { 831 | "version": "2.6.9", 832 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 833 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 834 | "dependencies": { 835 | "ms": "2.0.0" 836 | } 837 | }, 838 | "node_modules/express/node_modules/ms": { 839 | "version": "2.0.0", 840 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 841 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 842 | }, 843 | "node_modules/express/node_modules/safe-buffer": { 844 | "version": "5.2.1", 845 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 846 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 847 | "funding": [ 848 | { 849 | "type": "github", 850 | "url": "https://github.com/sponsors/feross" 851 | }, 852 | { 853 | "type": "patreon", 854 | "url": "https://www.patreon.com/feross" 855 | }, 856 | { 857 | "type": "consulting", 858 | "url": "https://feross.org/support" 859 | } 860 | ] 861 | }, 862 | "node_modules/fill-range": { 863 | "version": "7.0.1", 864 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 865 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 866 | "dev": true, 867 | "dependencies": { 868 | "to-regex-range": "^5.0.1" 869 | }, 870 | "engines": { 871 | "node": ">=8" 872 | } 873 | }, 874 | "node_modules/finalhandler": { 875 | "version": "1.2.0", 876 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", 877 | "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", 878 | "dependencies": { 879 | "debug": "2.6.9", 880 | "encodeurl": "~1.0.2", 881 | "escape-html": "~1.0.3", 882 | "on-finished": "2.4.1", 883 | "parseurl": "~1.3.3", 884 | "statuses": "2.0.1", 885 | "unpipe": "~1.0.0" 886 | }, 887 | "engines": { 888 | "node": ">= 0.8" 889 | } 890 | }, 891 | "node_modules/finalhandler/node_modules/debug": { 892 | "version": "2.6.9", 893 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 894 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 895 | "dependencies": { 896 | "ms": "2.0.0" 897 | } 898 | }, 899 | "node_modules/finalhandler/node_modules/ms": { 900 | "version": "2.0.0", 901 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 902 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 903 | }, 904 | "node_modules/forwarded": { 905 | "version": "0.2.0", 906 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 907 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", 908 | "engines": { 909 | "node": ">= 0.6" 910 | } 911 | }, 912 | "node_modules/fresh": { 913 | "version": "0.5.2", 914 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 915 | "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", 916 | "engines": { 917 | "node": ">= 0.6" 918 | } 919 | }, 920 | "node_modules/fs-minipass": { 921 | "version": "2.1.0", 922 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 923 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 924 | "dependencies": { 925 | "minipass": "^3.0.0" 926 | }, 927 | "engines": { 928 | "node": ">= 8" 929 | } 930 | }, 931 | "node_modules/fs-minipass/node_modules/minipass": { 932 | "version": "3.3.6", 933 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 934 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 935 | "dependencies": { 936 | "yallist": "^4.0.0" 937 | }, 938 | "engines": { 939 | "node": ">=8" 940 | } 941 | }, 942 | "node_modules/fs.realpath": { 943 | "version": "1.0.0", 944 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 945 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" 946 | }, 947 | "node_modules/fsevents": { 948 | "version": "2.3.3", 949 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 950 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 951 | "dev": true, 952 | "hasInstallScript": true, 953 | "optional": true, 954 | "os": [ 955 | "darwin" 956 | ], 957 | "engines": { 958 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 959 | } 960 | }, 961 | "node_modules/function-bind": { 962 | "version": "1.1.2", 963 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 964 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 965 | "funding": { 966 | "url": "https://github.com/sponsors/ljharb" 967 | } 968 | }, 969 | "node_modules/gauge": { 970 | "version": "3.0.2", 971 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", 972 | "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", 973 | "dependencies": { 974 | "aproba": "^1.0.3 || ^2.0.0", 975 | "color-support": "^1.1.2", 976 | "console-control-strings": "^1.0.0", 977 | "has-unicode": "^2.0.1", 978 | "object-assign": "^4.1.1", 979 | "signal-exit": "^3.0.0", 980 | "string-width": "^4.2.3", 981 | "strip-ansi": "^6.0.1", 982 | "wide-align": "^1.1.2" 983 | }, 984 | "engines": { 985 | "node": ">=10" 986 | } 987 | }, 988 | "node_modules/get-intrinsic": { 989 | "version": "1.2.4", 990 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", 991 | "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", 992 | "dependencies": { 993 | "es-errors": "^1.3.0", 994 | "function-bind": "^1.1.2", 995 | "has-proto": "^1.0.1", 996 | "has-symbols": "^1.0.3", 997 | "hasown": "^2.0.0" 998 | }, 999 | "engines": { 1000 | "node": ">= 0.4" 1001 | }, 1002 | "funding": { 1003 | "url": "https://github.com/sponsors/ljharb" 1004 | } 1005 | }, 1006 | "node_modules/glob": { 1007 | "version": "7.2.3", 1008 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1009 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1010 | "dependencies": { 1011 | "fs.realpath": "^1.0.0", 1012 | "inflight": "^1.0.4", 1013 | "inherits": "2", 1014 | "minimatch": "^3.1.1", 1015 | "once": "^1.3.0", 1016 | "path-is-absolute": "^1.0.0" 1017 | }, 1018 | "engines": { 1019 | "node": "*" 1020 | }, 1021 | "funding": { 1022 | "url": "https://github.com/sponsors/isaacs" 1023 | } 1024 | }, 1025 | "node_modules/glob-parent": { 1026 | "version": "5.1.2", 1027 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1028 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1029 | "dev": true, 1030 | "dependencies": { 1031 | "is-glob": "^4.0.1" 1032 | }, 1033 | "engines": { 1034 | "node": ">= 6" 1035 | } 1036 | }, 1037 | "node_modules/gopd": { 1038 | "version": "1.0.1", 1039 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 1040 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 1041 | "dependencies": { 1042 | "get-intrinsic": "^1.1.3" 1043 | }, 1044 | "funding": { 1045 | "url": "https://github.com/sponsors/ljharb" 1046 | } 1047 | }, 1048 | "node_modules/has-flag": { 1049 | "version": "3.0.0", 1050 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1051 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 1052 | "dev": true, 1053 | "engines": { 1054 | "node": ">=4" 1055 | } 1056 | }, 1057 | "node_modules/has-property-descriptors": { 1058 | "version": "1.0.2", 1059 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", 1060 | "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", 1061 | "dependencies": { 1062 | "es-define-property": "^1.0.0" 1063 | }, 1064 | "funding": { 1065 | "url": "https://github.com/sponsors/ljharb" 1066 | } 1067 | }, 1068 | "node_modules/has-proto": { 1069 | "version": "1.0.3", 1070 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", 1071 | "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", 1072 | "engines": { 1073 | "node": ">= 0.4" 1074 | }, 1075 | "funding": { 1076 | "url": "https://github.com/sponsors/ljharb" 1077 | } 1078 | }, 1079 | "node_modules/has-symbols": { 1080 | "version": "1.0.3", 1081 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 1082 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 1083 | "engines": { 1084 | "node": ">= 0.4" 1085 | }, 1086 | "funding": { 1087 | "url": "https://github.com/sponsors/ljharb" 1088 | } 1089 | }, 1090 | "node_modules/has-unicode": { 1091 | "version": "2.0.1", 1092 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 1093 | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" 1094 | }, 1095 | "node_modules/hasown": { 1096 | "version": "2.0.2", 1097 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", 1098 | "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", 1099 | "dependencies": { 1100 | "function-bind": "^1.1.2" 1101 | }, 1102 | "engines": { 1103 | "node": ">= 0.4" 1104 | } 1105 | }, 1106 | "node_modules/http-errors": { 1107 | "version": "2.0.0", 1108 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", 1109 | "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", 1110 | "dependencies": { 1111 | "depd": "2.0.0", 1112 | "inherits": "2.0.4", 1113 | "setprototypeof": "1.2.0", 1114 | "statuses": "2.0.1", 1115 | "toidentifier": "1.0.1" 1116 | }, 1117 | "engines": { 1118 | "node": ">= 0.8" 1119 | } 1120 | }, 1121 | "node_modules/https-proxy-agent": { 1122 | "version": "5.0.1", 1123 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", 1124 | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", 1125 | "dependencies": { 1126 | "agent-base": "6", 1127 | "debug": "4" 1128 | }, 1129 | "engines": { 1130 | "node": ">= 6" 1131 | } 1132 | }, 1133 | "node_modules/hyper-express": { 1134 | "version": "6.14.12", 1135 | "resolved": "https://registry.npmjs.org/hyper-express/-/hyper-express-6.14.12.tgz", 1136 | "integrity": "sha512-NrVA8YXycGJ+BQoqXlsy7W9bCS64kMhDU5GUxG3emdn2nUicNStXAeQ0aF7EMbDP3aPKICJZaj4Qf6CrX4x1tA==", 1137 | "dependencies": { 1138 | "accepts": "^1.3.7", 1139 | "busboy": "^1.0.0", 1140 | "cookie": "^0.4.1", 1141 | "cookie-signature": "^1.1.0", 1142 | "mime-types": "^2.1.33", 1143 | "range-parser": "^1.2.1", 1144 | "type-is": "^1.6.18", 1145 | "typed-emitter": "^2.1.0", 1146 | "uWebSockets.js": "github:uNetworking/uWebSockets.js#v20.41.0" 1147 | } 1148 | }, 1149 | "node_modules/iconv-lite": { 1150 | "version": "0.4.24", 1151 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 1152 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 1153 | "dependencies": { 1154 | "safer-buffer": ">= 2.1.2 < 3" 1155 | }, 1156 | "engines": { 1157 | "node": ">=0.10.0" 1158 | } 1159 | }, 1160 | "node_modules/ignore-by-default": { 1161 | "version": "1.0.1", 1162 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 1163 | "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", 1164 | "dev": true 1165 | }, 1166 | "node_modules/inflight": { 1167 | "version": "1.0.6", 1168 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1169 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1170 | "dependencies": { 1171 | "once": "^1.3.0", 1172 | "wrappy": "1" 1173 | } 1174 | }, 1175 | "node_modules/inherits": { 1176 | "version": "2.0.4", 1177 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1178 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 1179 | }, 1180 | "node_modules/ipaddr.js": { 1181 | "version": "1.9.1", 1182 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 1183 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", 1184 | "engines": { 1185 | "node": ">= 0.10" 1186 | } 1187 | }, 1188 | "node_modules/is-binary-path": { 1189 | "version": "2.1.0", 1190 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1191 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1192 | "dev": true, 1193 | "dependencies": { 1194 | "binary-extensions": "^2.0.0" 1195 | }, 1196 | "engines": { 1197 | "node": ">=8" 1198 | } 1199 | }, 1200 | "node_modules/is-core-module": { 1201 | "version": "2.13.1", 1202 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", 1203 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", 1204 | "dev": true, 1205 | "dependencies": { 1206 | "hasown": "^2.0.0" 1207 | }, 1208 | "funding": { 1209 | "url": "https://github.com/sponsors/ljharb" 1210 | } 1211 | }, 1212 | "node_modules/is-extglob": { 1213 | "version": "2.1.1", 1214 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1215 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1216 | "dev": true, 1217 | "engines": { 1218 | "node": ">=0.10.0" 1219 | } 1220 | }, 1221 | "node_modules/is-fullwidth-code-point": { 1222 | "version": "3.0.0", 1223 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1224 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1225 | "engines": { 1226 | "node": ">=8" 1227 | } 1228 | }, 1229 | "node_modules/is-glob": { 1230 | "version": "4.0.3", 1231 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1232 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1233 | "dev": true, 1234 | "dependencies": { 1235 | "is-extglob": "^2.1.1" 1236 | }, 1237 | "engines": { 1238 | "node": ">=0.10.0" 1239 | } 1240 | }, 1241 | "node_modules/is-number": { 1242 | "version": "7.0.0", 1243 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1244 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1245 | "dev": true, 1246 | "engines": { 1247 | "node": ">=0.12.0" 1248 | } 1249 | }, 1250 | "node_modules/isarray": { 1251 | "version": "1.0.0", 1252 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1253 | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" 1254 | }, 1255 | "node_modules/json5": { 1256 | "version": "2.2.3", 1257 | "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", 1258 | "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", 1259 | "dev": true, 1260 | "bin": { 1261 | "json5": "lib/cli.js" 1262 | }, 1263 | "engines": { 1264 | "node": ">=6" 1265 | } 1266 | }, 1267 | "node_modules/lru-cache": { 1268 | "version": "6.0.0", 1269 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 1270 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 1271 | "dependencies": { 1272 | "yallist": "^4.0.0" 1273 | }, 1274 | "engines": { 1275 | "node": ">=10" 1276 | } 1277 | }, 1278 | "node_modules/make-dir": { 1279 | "version": "3.1.0", 1280 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 1281 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 1282 | "dependencies": { 1283 | "semver": "^6.0.0" 1284 | }, 1285 | "engines": { 1286 | "node": ">=8" 1287 | }, 1288 | "funding": { 1289 | "url": "https://github.com/sponsors/sindresorhus" 1290 | } 1291 | }, 1292 | "node_modules/make-dir/node_modules/semver": { 1293 | "version": "6.3.1", 1294 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 1295 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 1296 | "bin": { 1297 | "semver": "bin/semver.js" 1298 | } 1299 | }, 1300 | "node_modules/make-error": { 1301 | "version": "1.3.6", 1302 | "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", 1303 | "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" 1304 | }, 1305 | "node_modules/media-typer": { 1306 | "version": "0.3.0", 1307 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1308 | "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", 1309 | "engines": { 1310 | "node": ">= 0.6" 1311 | } 1312 | }, 1313 | "node_modules/merge-descriptors": { 1314 | "version": "1.0.1", 1315 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1316 | "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" 1317 | }, 1318 | "node_modules/methods": { 1319 | "version": "1.1.2", 1320 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1321 | "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", 1322 | "engines": { 1323 | "node": ">= 0.6" 1324 | } 1325 | }, 1326 | "node_modules/mime": { 1327 | "version": "1.6.0", 1328 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 1329 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", 1330 | "bin": { 1331 | "mime": "cli.js" 1332 | }, 1333 | "engines": { 1334 | "node": ">=4" 1335 | } 1336 | }, 1337 | "node_modules/mime-db": { 1338 | "version": "1.52.0", 1339 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1340 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1341 | "engines": { 1342 | "node": ">= 0.6" 1343 | } 1344 | }, 1345 | "node_modules/mime-types": { 1346 | "version": "2.1.35", 1347 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1348 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1349 | "dependencies": { 1350 | "mime-db": "1.52.0" 1351 | }, 1352 | "engines": { 1353 | "node": ">= 0.6" 1354 | } 1355 | }, 1356 | "node_modules/minimatch": { 1357 | "version": "3.1.2", 1358 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1359 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1360 | "dependencies": { 1361 | "brace-expansion": "^1.1.7" 1362 | }, 1363 | "engines": { 1364 | "node": "*" 1365 | } 1366 | }, 1367 | "node_modules/minimist": { 1368 | "version": "1.2.8", 1369 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 1370 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 1371 | "dev": true, 1372 | "funding": { 1373 | "url": "https://github.com/sponsors/ljharb" 1374 | } 1375 | }, 1376 | "node_modules/minipass": { 1377 | "version": "5.0.0", 1378 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", 1379 | "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", 1380 | "engines": { 1381 | "node": ">=8" 1382 | } 1383 | }, 1384 | "node_modules/minizlib": { 1385 | "version": "2.1.2", 1386 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 1387 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 1388 | "dependencies": { 1389 | "minipass": "^3.0.0", 1390 | "yallist": "^4.0.0" 1391 | }, 1392 | "engines": { 1393 | "node": ">= 8" 1394 | } 1395 | }, 1396 | "node_modules/minizlib/node_modules/minipass": { 1397 | "version": "3.3.6", 1398 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", 1399 | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", 1400 | "dependencies": { 1401 | "yallist": "^4.0.0" 1402 | }, 1403 | "engines": { 1404 | "node": ">=8" 1405 | } 1406 | }, 1407 | "node_modules/mkdirp": { 1408 | "version": "1.0.4", 1409 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 1410 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", 1411 | "bin": { 1412 | "mkdirp": "bin/cmd.js" 1413 | }, 1414 | "engines": { 1415 | "node": ">=10" 1416 | } 1417 | }, 1418 | "node_modules/moment": { 1419 | "version": "2.30.1", 1420 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", 1421 | "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", 1422 | "engines": { 1423 | "node": "*" 1424 | } 1425 | }, 1426 | "node_modules/ms": { 1427 | "version": "2.1.2", 1428 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1429 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 1430 | }, 1431 | "node_modules/mysql": { 1432 | "version": "2.18.1", 1433 | "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz", 1434 | "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==", 1435 | "dependencies": { 1436 | "bignumber.js": "9.0.0", 1437 | "readable-stream": "2.3.7", 1438 | "safe-buffer": "5.1.2", 1439 | "sqlstring": "2.3.1" 1440 | }, 1441 | "engines": { 1442 | "node": ">= 0.6" 1443 | } 1444 | }, 1445 | "node_modules/negotiator": { 1446 | "version": "0.6.3", 1447 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 1448 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", 1449 | "engines": { 1450 | "node": ">= 0.6" 1451 | } 1452 | }, 1453 | "node_modules/node-addon-api": { 1454 | "version": "5.1.0", 1455 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", 1456 | "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" 1457 | }, 1458 | "node_modules/node-fetch": { 1459 | "version": "2.7.0", 1460 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", 1461 | "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", 1462 | "dependencies": { 1463 | "whatwg-url": "^5.0.0" 1464 | }, 1465 | "engines": { 1466 | "node": "4.x || >=6.0.0" 1467 | }, 1468 | "peerDependencies": { 1469 | "encoding": "^0.1.0" 1470 | }, 1471 | "peerDependenciesMeta": { 1472 | "encoding": { 1473 | "optional": true 1474 | } 1475 | } 1476 | }, 1477 | "node_modules/nodemon": { 1478 | "version": "3.1.0", 1479 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", 1480 | "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", 1481 | "dev": true, 1482 | "dependencies": { 1483 | "chokidar": "^3.5.2", 1484 | "debug": "^4", 1485 | "ignore-by-default": "^1.0.1", 1486 | "minimatch": "^3.1.2", 1487 | "pstree.remy": "^1.1.8", 1488 | "semver": "^7.5.3", 1489 | "simple-update-notifier": "^2.0.0", 1490 | "supports-color": "^5.5.0", 1491 | "touch": "^3.1.0", 1492 | "undefsafe": "^2.0.5" 1493 | }, 1494 | "bin": { 1495 | "nodemon": "bin/nodemon.js" 1496 | }, 1497 | "engines": { 1498 | "node": ">=10" 1499 | }, 1500 | "funding": { 1501 | "type": "opencollective", 1502 | "url": "https://opencollective.com/nodemon" 1503 | } 1504 | }, 1505 | "node_modules/nopt": { 1506 | "version": "1.0.10", 1507 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 1508 | "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", 1509 | "dev": true, 1510 | "dependencies": { 1511 | "abbrev": "1" 1512 | }, 1513 | "bin": { 1514 | "nopt": "bin/nopt.js" 1515 | }, 1516 | "engines": { 1517 | "node": "*" 1518 | } 1519 | }, 1520 | "node_modules/normalize-path": { 1521 | "version": "3.0.0", 1522 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1523 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1524 | "dev": true, 1525 | "engines": { 1526 | "node": ">=0.10.0" 1527 | } 1528 | }, 1529 | "node_modules/npmlog": { 1530 | "version": "5.0.1", 1531 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", 1532 | "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", 1533 | "dependencies": { 1534 | "are-we-there-yet": "^2.0.0", 1535 | "console-control-strings": "^1.1.0", 1536 | "gauge": "^3.0.0", 1537 | "set-blocking": "^2.0.0" 1538 | } 1539 | }, 1540 | "node_modules/object-assign": { 1541 | "version": "4.1.1", 1542 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 1543 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 1544 | "engines": { 1545 | "node": ">=0.10.0" 1546 | } 1547 | }, 1548 | "node_modules/object-inspect": { 1549 | "version": "1.13.1", 1550 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", 1551 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", 1552 | "funding": { 1553 | "url": "https://github.com/sponsors/ljharb" 1554 | } 1555 | }, 1556 | "node_modules/on-finished": { 1557 | "version": "2.4.1", 1558 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", 1559 | "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", 1560 | "dependencies": { 1561 | "ee-first": "1.1.1" 1562 | }, 1563 | "engines": { 1564 | "node": ">= 0.8" 1565 | } 1566 | }, 1567 | "node_modules/once": { 1568 | "version": "1.4.0", 1569 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1570 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 1571 | "dependencies": { 1572 | "wrappy": "1" 1573 | } 1574 | }, 1575 | "node_modules/parseurl": { 1576 | "version": "1.3.3", 1577 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 1578 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", 1579 | "engines": { 1580 | "node": ">= 0.8" 1581 | } 1582 | }, 1583 | "node_modules/path-is-absolute": { 1584 | "version": "1.0.1", 1585 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1586 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1587 | "engines": { 1588 | "node": ">=0.10.0" 1589 | } 1590 | }, 1591 | "node_modules/path-parse": { 1592 | "version": "1.0.7", 1593 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1594 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1595 | "dev": true 1596 | }, 1597 | "node_modules/path-to-regexp": { 1598 | "version": "0.1.7", 1599 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1600 | "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" 1601 | }, 1602 | "node_modules/picomatch": { 1603 | "version": "2.3.1", 1604 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1605 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1606 | "dev": true, 1607 | "engines": { 1608 | "node": ">=8.6" 1609 | }, 1610 | "funding": { 1611 | "url": "https://github.com/sponsors/jonschlinkert" 1612 | } 1613 | }, 1614 | "node_modules/process-nextick-args": { 1615 | "version": "2.0.1", 1616 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", 1617 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" 1618 | }, 1619 | "node_modules/proxy-addr": { 1620 | "version": "2.0.7", 1621 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 1622 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 1623 | "dependencies": { 1624 | "forwarded": "0.2.0", 1625 | "ipaddr.js": "1.9.1" 1626 | }, 1627 | "engines": { 1628 | "node": ">= 0.10" 1629 | } 1630 | }, 1631 | "node_modules/pstree.remy": { 1632 | "version": "1.1.8", 1633 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", 1634 | "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", 1635 | "dev": true 1636 | }, 1637 | "node_modules/qs": { 1638 | "version": "6.11.0", 1639 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", 1640 | "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", 1641 | "dependencies": { 1642 | "side-channel": "^1.0.4" 1643 | }, 1644 | "engines": { 1645 | "node": ">=0.6" 1646 | }, 1647 | "funding": { 1648 | "url": "https://github.com/sponsors/ljharb" 1649 | } 1650 | }, 1651 | "node_modules/range-parser": { 1652 | "version": "1.2.1", 1653 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 1654 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", 1655 | "engines": { 1656 | "node": ">= 0.6" 1657 | } 1658 | }, 1659 | "node_modules/raw-body": { 1660 | "version": "2.5.2", 1661 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", 1662 | "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", 1663 | "dependencies": { 1664 | "bytes": "3.1.2", 1665 | "http-errors": "2.0.0", 1666 | "iconv-lite": "0.4.24", 1667 | "unpipe": "1.0.0" 1668 | }, 1669 | "engines": { 1670 | "node": ">= 0.8" 1671 | } 1672 | }, 1673 | "node_modules/readable-stream": { 1674 | "version": "2.3.7", 1675 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", 1676 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", 1677 | "dependencies": { 1678 | "core-util-is": "~1.0.0", 1679 | "inherits": "~2.0.3", 1680 | "isarray": "~1.0.0", 1681 | "process-nextick-args": "~2.0.0", 1682 | "safe-buffer": "~5.1.1", 1683 | "string_decoder": "~1.1.1", 1684 | "util-deprecate": "~1.0.1" 1685 | } 1686 | }, 1687 | "node_modules/readdirp": { 1688 | "version": "3.6.0", 1689 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1690 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1691 | "dev": true, 1692 | "dependencies": { 1693 | "picomatch": "^2.2.1" 1694 | }, 1695 | "engines": { 1696 | "node": ">=8.10.0" 1697 | } 1698 | }, 1699 | "node_modules/resolve": { 1700 | "version": "1.22.8", 1701 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 1702 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 1703 | "dev": true, 1704 | "dependencies": { 1705 | "is-core-module": "^2.13.0", 1706 | "path-parse": "^1.0.7", 1707 | "supports-preserve-symlinks-flag": "^1.0.0" 1708 | }, 1709 | "bin": { 1710 | "resolve": "bin/resolve" 1711 | }, 1712 | "funding": { 1713 | "url": "https://github.com/sponsors/ljharb" 1714 | } 1715 | }, 1716 | "node_modules/rimraf": { 1717 | "version": "2.7.1", 1718 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 1719 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 1720 | "dev": true, 1721 | "dependencies": { 1722 | "glob": "^7.1.3" 1723 | }, 1724 | "bin": { 1725 | "rimraf": "bin.js" 1726 | } 1727 | }, 1728 | "node_modules/rxjs": { 1729 | "version": "7.8.1", 1730 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", 1731 | "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", 1732 | "optional": true, 1733 | "dependencies": { 1734 | "tslib": "^2.1.0" 1735 | } 1736 | }, 1737 | "node_modules/safe-buffer": { 1738 | "version": "5.1.2", 1739 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", 1740 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" 1741 | }, 1742 | "node_modules/safer-buffer": { 1743 | "version": "2.1.2", 1744 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1745 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 1746 | }, 1747 | "node_modules/semver": { 1748 | "version": "7.6.0", 1749 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", 1750 | "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", 1751 | "dependencies": { 1752 | "lru-cache": "^6.0.0" 1753 | }, 1754 | "bin": { 1755 | "semver": "bin/semver.js" 1756 | }, 1757 | "engines": { 1758 | "node": ">=10" 1759 | } 1760 | }, 1761 | "node_modules/send": { 1762 | "version": "0.18.0", 1763 | "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", 1764 | "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", 1765 | "dependencies": { 1766 | "debug": "2.6.9", 1767 | "depd": "2.0.0", 1768 | "destroy": "1.2.0", 1769 | "encodeurl": "~1.0.2", 1770 | "escape-html": "~1.0.3", 1771 | "etag": "~1.8.1", 1772 | "fresh": "0.5.2", 1773 | "http-errors": "2.0.0", 1774 | "mime": "1.6.0", 1775 | "ms": "2.1.3", 1776 | "on-finished": "2.4.1", 1777 | "range-parser": "~1.2.1", 1778 | "statuses": "2.0.1" 1779 | }, 1780 | "engines": { 1781 | "node": ">= 0.8.0" 1782 | } 1783 | }, 1784 | "node_modules/send/node_modules/debug": { 1785 | "version": "2.6.9", 1786 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1787 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1788 | "dependencies": { 1789 | "ms": "2.0.0" 1790 | } 1791 | }, 1792 | "node_modules/send/node_modules/debug/node_modules/ms": { 1793 | "version": "2.0.0", 1794 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1795 | "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" 1796 | }, 1797 | "node_modules/send/node_modules/ms": { 1798 | "version": "2.1.3", 1799 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 1800 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 1801 | }, 1802 | "node_modules/serve-static": { 1803 | "version": "1.15.0", 1804 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", 1805 | "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", 1806 | "dependencies": { 1807 | "encodeurl": "~1.0.2", 1808 | "escape-html": "~1.0.3", 1809 | "parseurl": "~1.3.3", 1810 | "send": "0.18.0" 1811 | }, 1812 | "engines": { 1813 | "node": ">= 0.8.0" 1814 | } 1815 | }, 1816 | "node_modules/set-blocking": { 1817 | "version": "2.0.0", 1818 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1819 | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" 1820 | }, 1821 | "node_modules/set-function-length": { 1822 | "version": "1.2.2", 1823 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", 1824 | "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", 1825 | "dependencies": { 1826 | "define-data-property": "^1.1.4", 1827 | "es-errors": "^1.3.0", 1828 | "function-bind": "^1.1.2", 1829 | "get-intrinsic": "^1.2.4", 1830 | "gopd": "^1.0.1", 1831 | "has-property-descriptors": "^1.0.2" 1832 | }, 1833 | "engines": { 1834 | "node": ">= 0.4" 1835 | } 1836 | }, 1837 | "node_modules/setprototypeof": { 1838 | "version": "1.2.0", 1839 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 1840 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 1841 | }, 1842 | "node_modules/side-channel": { 1843 | "version": "1.0.6", 1844 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", 1845 | "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", 1846 | "dependencies": { 1847 | "call-bind": "^1.0.7", 1848 | "es-errors": "^1.3.0", 1849 | "get-intrinsic": "^1.2.4", 1850 | "object-inspect": "^1.13.1" 1851 | }, 1852 | "engines": { 1853 | "node": ">= 0.4" 1854 | }, 1855 | "funding": { 1856 | "url": "https://github.com/sponsors/ljharb" 1857 | } 1858 | }, 1859 | "node_modules/signal-exit": { 1860 | "version": "3.0.7", 1861 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1862 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1863 | }, 1864 | "node_modules/simple-update-notifier": { 1865 | "version": "2.0.0", 1866 | "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", 1867 | "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", 1868 | "dev": true, 1869 | "dependencies": { 1870 | "semver": "^7.5.3" 1871 | }, 1872 | "engines": { 1873 | "node": ">=10" 1874 | } 1875 | }, 1876 | "node_modules/source-map": { 1877 | "version": "0.6.1", 1878 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1879 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1880 | "dev": true, 1881 | "engines": { 1882 | "node": ">=0.10.0" 1883 | } 1884 | }, 1885 | "node_modules/source-map-support": { 1886 | "version": "0.5.21", 1887 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1888 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1889 | "dev": true, 1890 | "dependencies": { 1891 | "buffer-from": "^1.0.0", 1892 | "source-map": "^0.6.0" 1893 | } 1894 | }, 1895 | "node_modules/sqlstring": { 1896 | "version": "2.3.1", 1897 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz", 1898 | "integrity": "sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==", 1899 | "engines": { 1900 | "node": ">= 0.6" 1901 | } 1902 | }, 1903 | "node_modules/statuses": { 1904 | "version": "2.0.1", 1905 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", 1906 | "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", 1907 | "engines": { 1908 | "node": ">= 0.8" 1909 | } 1910 | }, 1911 | "node_modules/streamsearch": { 1912 | "version": "1.1.0", 1913 | "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", 1914 | "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", 1915 | "engines": { 1916 | "node": ">=10.0.0" 1917 | } 1918 | }, 1919 | "node_modules/string_decoder": { 1920 | "version": "1.1.1", 1921 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", 1922 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", 1923 | "dependencies": { 1924 | "safe-buffer": "~5.1.0" 1925 | } 1926 | }, 1927 | "node_modules/string-width": { 1928 | "version": "4.2.3", 1929 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1930 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1931 | "dependencies": { 1932 | "emoji-regex": "^8.0.0", 1933 | "is-fullwidth-code-point": "^3.0.0", 1934 | "strip-ansi": "^6.0.1" 1935 | }, 1936 | "engines": { 1937 | "node": ">=8" 1938 | } 1939 | }, 1940 | "node_modules/strip-ansi": { 1941 | "version": "6.0.1", 1942 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1943 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1944 | "dependencies": { 1945 | "ansi-regex": "^5.0.1" 1946 | }, 1947 | "engines": { 1948 | "node": ">=8" 1949 | } 1950 | }, 1951 | "node_modules/strip-bom": { 1952 | "version": "3.0.0", 1953 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 1954 | "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", 1955 | "dev": true, 1956 | "engines": { 1957 | "node": ">=4" 1958 | } 1959 | }, 1960 | "node_modules/strip-json-comments": { 1961 | "version": "2.0.1", 1962 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1963 | "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", 1964 | "dev": true, 1965 | "engines": { 1966 | "node": ">=0.10.0" 1967 | } 1968 | }, 1969 | "node_modules/supports-color": { 1970 | "version": "5.5.0", 1971 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1972 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1973 | "dev": true, 1974 | "dependencies": { 1975 | "has-flag": "^3.0.0" 1976 | }, 1977 | "engines": { 1978 | "node": ">=4" 1979 | } 1980 | }, 1981 | "node_modules/supports-preserve-symlinks-flag": { 1982 | "version": "1.0.0", 1983 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1984 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1985 | "dev": true, 1986 | "engines": { 1987 | "node": ">= 0.4" 1988 | }, 1989 | "funding": { 1990 | "url": "https://github.com/sponsors/ljharb" 1991 | } 1992 | }, 1993 | "node_modules/tar": { 1994 | "version": "6.2.0", 1995 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", 1996 | "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", 1997 | "dependencies": { 1998 | "chownr": "^2.0.0", 1999 | "fs-minipass": "^2.0.0", 2000 | "minipass": "^5.0.0", 2001 | "minizlib": "^2.1.1", 2002 | "mkdirp": "^1.0.3", 2003 | "yallist": "^4.0.0" 2004 | }, 2005 | "engines": { 2006 | "node": ">=10" 2007 | } 2008 | }, 2009 | "node_modules/to-regex-range": { 2010 | "version": "5.0.1", 2011 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2012 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2013 | "dev": true, 2014 | "dependencies": { 2015 | "is-number": "^7.0.0" 2016 | }, 2017 | "engines": { 2018 | "node": ">=8.0" 2019 | } 2020 | }, 2021 | "node_modules/toidentifier": { 2022 | "version": "1.0.1", 2023 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 2024 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", 2025 | "engines": { 2026 | "node": ">=0.6" 2027 | } 2028 | }, 2029 | "node_modules/touch": { 2030 | "version": "3.1.0", 2031 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 2032 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 2033 | "dev": true, 2034 | "dependencies": { 2035 | "nopt": "~1.0.10" 2036 | }, 2037 | "bin": { 2038 | "nodetouch": "bin/nodetouch.js" 2039 | } 2040 | }, 2041 | "node_modules/tr46": { 2042 | "version": "0.0.3", 2043 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 2044 | "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" 2045 | }, 2046 | "node_modules/tree-kill": { 2047 | "version": "1.2.2", 2048 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 2049 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 2050 | "dev": true, 2051 | "bin": { 2052 | "tree-kill": "cli.js" 2053 | } 2054 | }, 2055 | "node_modules/ts-node": { 2056 | "version": "10.9.2", 2057 | "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", 2058 | "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", 2059 | "dependencies": { 2060 | "@cspotcode/source-map-support": "^0.8.0", 2061 | "@tsconfig/node10": "^1.0.7", 2062 | "@tsconfig/node12": "^1.0.7", 2063 | "@tsconfig/node14": "^1.0.0", 2064 | "@tsconfig/node16": "^1.0.2", 2065 | "acorn": "^8.4.1", 2066 | "acorn-walk": "^8.1.1", 2067 | "arg": "^4.1.0", 2068 | "create-require": "^1.1.0", 2069 | "diff": "^4.0.1", 2070 | "make-error": "^1.1.1", 2071 | "v8-compile-cache-lib": "^3.0.1", 2072 | "yn": "3.1.1" 2073 | }, 2074 | "bin": { 2075 | "ts-node": "dist/bin.js", 2076 | "ts-node-cwd": "dist/bin-cwd.js", 2077 | "ts-node-esm": "dist/bin-esm.js", 2078 | "ts-node-script": "dist/bin-script.js", 2079 | "ts-node-transpile-only": "dist/bin-transpile.js", 2080 | "ts-script": "dist/bin-script-deprecated.js" 2081 | }, 2082 | "peerDependencies": { 2083 | "@swc/core": ">=1.2.50", 2084 | "@swc/wasm": ">=1.2.50", 2085 | "@types/node": "*", 2086 | "typescript": ">=2.7" 2087 | }, 2088 | "peerDependenciesMeta": { 2089 | "@swc/core": { 2090 | "optional": true 2091 | }, 2092 | "@swc/wasm": { 2093 | "optional": true 2094 | } 2095 | } 2096 | }, 2097 | "node_modules/ts-node-dev": { 2098 | "version": "2.0.0", 2099 | "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", 2100 | "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", 2101 | "dev": true, 2102 | "dependencies": { 2103 | "chokidar": "^3.5.1", 2104 | "dynamic-dedupe": "^0.3.0", 2105 | "minimist": "^1.2.6", 2106 | "mkdirp": "^1.0.4", 2107 | "resolve": "^1.0.0", 2108 | "rimraf": "^2.6.1", 2109 | "source-map-support": "^0.5.12", 2110 | "tree-kill": "^1.2.2", 2111 | "ts-node": "^10.4.0", 2112 | "tsconfig": "^7.0.0" 2113 | }, 2114 | "bin": { 2115 | "ts-node-dev": "lib/bin.js", 2116 | "tsnd": "lib/bin.js" 2117 | }, 2118 | "engines": { 2119 | "node": ">=0.8.0" 2120 | }, 2121 | "peerDependencies": { 2122 | "node-notifier": "*", 2123 | "typescript": "*" 2124 | }, 2125 | "peerDependenciesMeta": { 2126 | "node-notifier": { 2127 | "optional": true 2128 | } 2129 | } 2130 | }, 2131 | "node_modules/tsconfig": { 2132 | "version": "7.0.0", 2133 | "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", 2134 | "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", 2135 | "dev": true, 2136 | "dependencies": { 2137 | "@types/strip-bom": "^3.0.0", 2138 | "@types/strip-json-comments": "0.0.30", 2139 | "strip-bom": "^3.0.0", 2140 | "strip-json-comments": "^2.0.0" 2141 | } 2142 | }, 2143 | "node_modules/tsconfig-paths": { 2144 | "version": "4.2.0", 2145 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", 2146 | "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", 2147 | "dev": true, 2148 | "dependencies": { 2149 | "json5": "^2.2.2", 2150 | "minimist": "^1.2.6", 2151 | "strip-bom": "^3.0.0" 2152 | }, 2153 | "engines": { 2154 | "node": ">=6" 2155 | } 2156 | }, 2157 | "node_modules/tslib": { 2158 | "version": "2.6.2", 2159 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", 2160 | "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", 2161 | "devOptional": true 2162 | }, 2163 | "node_modules/type-is": { 2164 | "version": "1.6.18", 2165 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 2166 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 2167 | "dependencies": { 2168 | "media-typer": "0.3.0", 2169 | "mime-types": "~2.1.24" 2170 | }, 2171 | "engines": { 2172 | "node": ">= 0.6" 2173 | } 2174 | }, 2175 | "node_modules/typed-emitter": { 2176 | "version": "2.1.0", 2177 | "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", 2178 | "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", 2179 | "optionalDependencies": { 2180 | "rxjs": "*" 2181 | } 2182 | }, 2183 | "node_modules/typescript": { 2184 | "version": "5.4.3", 2185 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.3.tgz", 2186 | "integrity": "sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==", 2187 | "bin": { 2188 | "tsc": "bin/tsc", 2189 | "tsserver": "bin/tsserver" 2190 | }, 2191 | "engines": { 2192 | "node": ">=14.17" 2193 | } 2194 | }, 2195 | "node_modules/undefsafe": { 2196 | "version": "2.0.5", 2197 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", 2198 | "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", 2199 | "dev": true 2200 | }, 2201 | "node_modules/undici-types": { 2202 | "version": "5.26.5", 2203 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", 2204 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" 2205 | }, 2206 | "node_modules/unpipe": { 2207 | "version": "1.0.0", 2208 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2209 | "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", 2210 | "engines": { 2211 | "node": ">= 0.8" 2212 | } 2213 | }, 2214 | "node_modules/util-deprecate": { 2215 | "version": "1.0.2", 2216 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2217 | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 2218 | }, 2219 | "node_modules/utils-merge": { 2220 | "version": "1.0.1", 2221 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2222 | "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", 2223 | "engines": { 2224 | "node": ">= 0.4.0" 2225 | } 2226 | }, 2227 | "node_modules/uWebSockets.js": { 2228 | "version": "20.41.0", 2229 | "resolved": "git+ssh://git@github.com/uNetworking/uWebSockets.js.git#105d9ec47126cb82e4a6f3a08aa2ac78b4bb14f1", 2230 | "license": "Apache-2.0" 2231 | }, 2232 | "node_modules/v8-compile-cache-lib": { 2233 | "version": "3.0.1", 2234 | "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", 2235 | "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" 2236 | }, 2237 | "node_modules/vary": { 2238 | "version": "1.1.2", 2239 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2240 | "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", 2241 | "engines": { 2242 | "node": ">= 0.8" 2243 | } 2244 | }, 2245 | "node_modules/webidl-conversions": { 2246 | "version": "3.0.1", 2247 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 2248 | "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" 2249 | }, 2250 | "node_modules/whatwg-url": { 2251 | "version": "5.0.0", 2252 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 2253 | "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", 2254 | "dependencies": { 2255 | "tr46": "~0.0.3", 2256 | "webidl-conversions": "^3.0.0" 2257 | } 2258 | }, 2259 | "node_modules/wide-align": { 2260 | "version": "1.1.5", 2261 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 2262 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 2263 | "dependencies": { 2264 | "string-width": "^1.0.2 || 2 || 3 || 4" 2265 | } 2266 | }, 2267 | "node_modules/wrappy": { 2268 | "version": "1.0.2", 2269 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2270 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" 2271 | }, 2272 | "node_modules/xtend": { 2273 | "version": "4.0.2", 2274 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", 2275 | "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", 2276 | "dev": true, 2277 | "engines": { 2278 | "node": ">=0.4" 2279 | } 2280 | }, 2281 | "node_modules/yallist": { 2282 | "version": "4.0.0", 2283 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 2284 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 2285 | }, 2286 | "node_modules/yn": { 2287 | "version": "3.1.1", 2288 | "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", 2289 | "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", 2290 | "engines": { 2291 | "node": ">=6" 2292 | } 2293 | } 2294 | } 2295 | } 2296 | --------------------------------------------------------------------------------