├── .gitignore ├── client ├── .eslintrc.json ├── .gitignore ├── README.md ├── images │ └── 95001318.png ├── next-env.d.ts ├── next.config.js ├── package.json ├── pages │ ├── _app.tsx │ ├── _document.tsx │ ├── edit.tsx │ ├── gamesList.tsx │ └── index.tsx ├── src │ └── components │ │ ├── app │ │ ├── app.tsx │ │ └── style.ts │ │ ├── editGame │ │ ├── editGame.tsx │ │ └── style.ts │ │ ├── header │ │ ├── header.tsx │ │ └── style.ts │ │ ├── mainContentainer │ │ └── MainContainer.tsx │ │ └── table │ │ ├── style.ts │ │ └── table.tsx ├── styles │ └── Global.ts ├── tsconfig.json └── yarn.lock └── server ├── index.js ├── package.json └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /client/.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "next/core-web-vitals" 3 | } 4 | -------------------------------------------------------------------------------- /client/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # next.js 12 | /.next/ 13 | /out/ 14 | 15 | # production 16 | /build 17 | 18 | # misc 19 | .DS_Store 20 | *.pem 21 | 22 | # debug 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | .pnpm-debug.log* 27 | 28 | # local env files 29 | .env*.local 30 | 31 | # vercel 32 | .vercel 33 | 34 | # typescript 35 | *.tsbuildinfo 36 | -------------------------------------------------------------------------------- /client/README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | ``` 12 | 13 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 14 | 15 | You can start editing the page by modifying `pages/index.tsx`. The page auto-updates as you edit the file. 16 | 17 | [API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`. 18 | 19 | The `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages. 20 | 21 | ## Learn More 22 | 23 | To learn more about Next.js, take a look at the following resources: 24 | 25 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 26 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 27 | 28 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome! 29 | 30 | ## Deploy on Vercel 31 | 32 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 33 | 34 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details. 35 | -------------------------------------------------------------------------------- /client/images/95001318.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/mauriciocosta404/crud-node.js-express-mysql-next.js-typescript/dfa38aa7ee2dc768bb80eb3f19c4503f3e89c553/client/images/95001318.png -------------------------------------------------------------------------------- /client/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /client/next.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('next').NextConfig} */ 2 | const nextConfig = { 3 | reactStrictMode: true, 4 | } 5 | 6 | module.exports = nextConfig 7 | -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "app0ty", 3 | "version": "0.1.0", 4 | "private": true, 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start", 9 | "lint": "next lint" 10 | }, 11 | "dependencies": { 12 | "@types/styled-components": "^5.1.25", 13 | "axios": "^0.27.2", 14 | "miragejs": "^0.1.45", 15 | "next": "12.1.6", 16 | "next-link": "^2.0.0", 17 | "next-router": "^1.3.6", 18 | "react": "18.2.0", 19 | "react-dom": "18.2.0", 20 | "react-icons": "^4.4.0", 21 | "react-video-js-player": "^1.1.1", 22 | "styled-components": "^5.3.5" 23 | }, 24 | "devDependencies": { 25 | "@types/node": "18.0.0", 26 | "@types/react": "18.0.14", 27 | "@types/react-dom": "18.0.5", 28 | "babel-plugin-styled-components": "^2.0.7", 29 | "eslint": "8.18.0", 30 | "eslint-config-next": "12.1.6", 31 | "typescript": "4.7.4" 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /client/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import type { AppProps } from 'next/app'; 2 | import { GlobalStyle } from '../styles/Global'; 3 | import MainContainer from '../src/components/mainContentainer/MainContainer'; 4 | 5 | 6 | function MyApp({ Component, pageProps }: AppProps) { 7 | return ( 8 | <> 9 | 10 | 11 | 12 | 13 | 14 | ) 15 | } 16 | export default MyApp -------------------------------------------------------------------------------- /client/pages/_document.tsx: -------------------------------------------------------------------------------- 1 | import Document, { DocumentContext } from 'next/document' 2 | import { ServerStyleSheet } from 'styled-components' 3 | 4 | export default class MyDocument extends Document { 5 | static async getInitialProps(ctx: DocumentContext) { 6 | const sheet = new ServerStyleSheet() 7 | const originalRenderPage = ctx.renderPage 8 | 9 | try { 10 | ctx.renderPage = () => 11 | originalRenderPage({ 12 | enhanceApp: (App) => (props) => 13 | sheet.collectStyles(), 14 | }) 15 | 16 | const initialProps = await Document.getInitialProps(ctx) 17 | return { 18 | ...initialProps, 19 | styles: [initialProps.styles, sheet.getStyleElement()], 20 | } 21 | } finally { 22 | sheet.seal() 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /client/pages/edit.tsx: -------------------------------------------------------------------------------- 1 | import { NextPage } from "next"; 2 | import EditGames from "../src/components/editGame/editGame"; 3 | 4 | const Edit:NextPage=()=>{ 5 | return( 6 | <> 7 | 8 | 9 | ) 10 | } 11 | export default Edit; -------------------------------------------------------------------------------- /client/pages/gamesList.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from 'next' 2 | import Head from 'next/head' 3 | import Table from '../src/components/table/table'; 4 | const GamesList: NextPage = () => { 5 | 6 | return ( 7 | <> 8 |
9 | 10 | ) 11 | } 12 | 13 | export default GamesList; -------------------------------------------------------------------------------- /client/pages/index.tsx: -------------------------------------------------------------------------------- 1 | import type { NextPage } from 'next' 2 | import Head from 'next/head' 3 | import App from '../src/components/app/app' 4 | const Home: NextPage = () => { 5 | 6 | return ( 7 | <> 8 | 9 | 10 | mauriciadas 11 | 12 | 13 | 14 | 15 | ) 16 | } 17 | 18 | export default Home; 19 | 20 | -------------------------------------------------------------------------------- /client/src/components/app/app.tsx: -------------------------------------------------------------------------------- 1 | import * as C from './style'; 2 | import React,{ useState } from 'react'; 3 | import { useEffect } from 'react'; 4 | import Axios from 'axios'; 5 | 6 | interface valuesProps{ 7 | name:string, 8 | price:number, 9 | category:string 10 | } 11 | 12 | const App=()=>{ 13 | const [values,setValues]=useState(); 14 | const [name,setName]=useState(''); 15 | const [price, setPrice] = useState(0); 16 | const [category, setCategory] = useState(''); 17 | 18 | const handleValues=()=>{ 19 | Axios.post('http://localhost:3001/register',{ 20 | name, 21 | price, 22 | category 23 | }); 24 | setName(''); 25 | setPrice(0); 26 | setCategory(''); 27 | } 28 | 29 | useEffect(()=>{ 30 | setValues({ 31 | name, 32 | price, 33 | category 34 | }); 35 | },[name,price,category]) 36 | 37 | return( 38 | 39 |
40 |

Games shop

41 | setName(event.target.value)} 47 | /> 48 | setPrice(Number(event.target.value))} 54 | /> 55 | setCategory(event.target.value)} 61 | /> 62 | 63 |
64 |
65 | ); 66 | } 67 | export default App; -------------------------------------------------------------------------------- /client/src/components/app/style.ts: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | 3 | export const AppContainer=styled.div` 4 | background-color: #fff; 5 | position: absolute; 6 | top: 50%;left:50%; 7 | transform: translate(-50%,-50%); 8 | >div{ 9 | display: flex; 10 | flex-direction: column; 11 | padding: 1rem; 12 | } 13 | *{ 14 | margin: .3rem; 15 | padding:.5rem 1rem; 16 | } 17 | button{ 18 | background-color: blueviolet; 19 | border: none; 20 | color: #fff; 21 | } 22 | `; -------------------------------------------------------------------------------- /client/src/components/editGame/editGame.tsx: -------------------------------------------------------------------------------- 1 | import * as C from './style'; 2 | import React, { useState } from 'react'; 3 | import { useEffect } from 'react'; 4 | import Axios from 'axios'; 5 | 6 | interface valuesProps { 7 | idGame:number, 8 | name: string, 9 | price: number, 10 | category: string, 11 | showEditContainer:boolean, 12 | setShowEditContainer: (showEditContainer:boolean)=>void 13 | } 14 | 15 | const EditGames = ({idGame,name,price,category,showEditContainer,setShowEditContainer}:valuesProps) => { 16 | const [values, setValues] = useState(); 17 | const [name1, setName] = useState(name); 18 | const [price1, setPrice] = useState(price); 19 | const [category1, setCategory] = useState(category); 20 | 21 | const handleEdit = () => { 22 | 23 | Axios.put('http://localhost:3001/edit',{ 24 | idGame, 25 | name1, 26 | price1, 27 | category1 28 | }); 29 | } 30 | return ( 31 | 32 |
{setShowEditContainer(false)}} 34 | > 35 | x 36 |
37 | 38 |
39 |

scrim shop

40 | setName(event.target.value)} 46 | /> 47 | setPrice(Number(event.target.value))} 53 | /> 54 | setCategory(event.target.value)} 60 | /> 61 | Salvar 62 |
63 |
64 |
65 | ); 66 | } 67 | export default EditGames; -------------------------------------------------------------------------------- /client/src/components/editGame/style.ts: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | 3 | export const Container = styled.div` 4 | position:absolute ; 5 | top:0;bottom:0;right:0;left:0; 6 | z-index: 1; 7 | background-color: rgba(0,0,0,0.4); 8 | .close{ 9 | cursor: pointer; 10 | position: absolute; 11 | color: #fff; 12 | top: 3rem; 13 | right: 6rem; 14 | font-size: 2.6rem; 15 | } 16 | `; 17 | 18 | export const AppContainer = styled.div` 19 | width: 16rem; 20 | background-color: #fff; 21 | position: relative; 22 | top: 50%;left:50%; 23 | transform: translate(-50%,-50%); 24 | 25 | box-shadow: 0 .5rem 1.5rem rgba(0,0,0,0.3); 26 | >div{ 27 | display: flex; 28 | flex-direction: column; 29 | padding: 1rem; 30 | } 31 | *{ 32 | margin: .3rem; 33 | padding:.5rem 1rem; 34 | } 35 | a{ 36 | background-color: blueviolet; 37 | border: none; 38 | color: #fff; 39 | text-align: center; 40 | } 41 | `; -------------------------------------------------------------------------------- /client/src/components/header/header.tsx: -------------------------------------------------------------------------------- 1 | import * as C from './style'; 2 | const Header=()=>{ 3 | return( 4 | 5 | 9 | 10 | ) 11 | } 12 | export default Header; -------------------------------------------------------------------------------- /client/src/components/header/style.ts: -------------------------------------------------------------------------------- 1 | import styled from 'styled-components'; 2 | 3 | export const NavContainer=styled.nav` 4 | position: fixed; 5 | top: 0; left: 0; right: 0; 6 | background: #fff; 7 | padding: 1rem 7%; 8 | display: flex; 9 | align-items: center; 10 | justify-content: center; 11 | z-index: 1000; 12 | box-shadow: var(--box-shadow); 13 | 14 | ul{ 15 | list-style-type: none; 16 | display: flex; 17 | } 18 | li a{ 19 | padding: .3rem; 20 | margin: .3rem; 21 | color: #fff; 22 | } 23 | ul a.active, 24 | ul a{ 25 | background-color: blueviolet; 26 | } 27 | `; -------------------------------------------------------------------------------- /client/src/components/mainContentainer/MainContainer.tsx: -------------------------------------------------------------------------------- 1 | import { PropsWithChildren, ReactNode } from "react"; 2 | import Header from '../header/header'; 3 | const MainContainer=({children}:PropsWithChildren)=>{ 4 | return( 5 |
6 |
7 | {children} 8 |
9 | ) 10 | } 11 | export default MainContainer; -------------------------------------------------------------------------------- /client/src/components/table/style.ts: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | 3 | export const TableContainer=styled.div` 4 | position: absolute; 5 | margin-top: 21rem; 6 | left:50%; 7 | transform: translate(-50%,-50%); 8 | 9 | table{ 10 | border-collapse: collapse; 11 | background-color:#fff ; 12 | } 13 | tr:nth-child(even){ 14 | background-color: #ddd; 15 | } 16 | th{ 17 | background-color: blueviolet; 18 | color: #fff; 19 | } 20 | th,td{ 21 | padding: .5rem 3rem; 22 | text-align: center; 23 | } 24 | .buttons{ 25 | display: flex; 26 | outline: none; 27 | } 28 | .edit{ 29 | background-color:blueviolet; 30 | color: #fff; 31 | padding: .3rem; 32 | margin: .5rem; 33 | border:none; 34 | } 35 | 36 | .delet{ 37 | background-color: tomato; 38 | color: #fff; 39 | padding: .3rem; 40 | margin: .5rem; 41 | border: none; 42 | } 43 | `; -------------------------------------------------------------------------------- /client/src/components/table/table.tsx: -------------------------------------------------------------------------------- 1 | import * as C from './style'; 2 | import Axios from 'axios'; 3 | import { useEffect, useState } from 'react'; 4 | import EditGames from '../editGame/editGame'; 5 | 6 | interface valuesProps{ 7 | idGame:number, 8 | id:number, 9 | name:string, 10 | price:number, 11 | category:string 12 | } 13 | 14 | const Table=()=>{ 15 | 16 | const [showEditContainer,setShowEditContainer]=useState(false); 17 | const [name, setName] = useState(''); 18 | const [price, setPrice] = useState(0); 19 | const [idGame, setIdGame] = useState(0); 20 | const [category, setCategory] = useState(''); 21 | const [games,setGames]=useState([]); 22 | 23 | useEffect(() => { 24 | Axios.get('http://localhost:3001/getGames'). 25 | then((response) => { 26 | setGames(response.data); 27 | }); 28 | }, []); 29 | 30 | const handleDelet=(id:number)=>{ 31 | Axios.delete(`http://localhost:3001/delet/${id}`) 32 | } 33 | 34 | return( 35 |
36 | {showEditContainer &&( 37 | 45 | )} 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | {games.map(({id,name,price,category},index)=> 59 | ( 60 | 63 | 64 | 65 | 66 | 67 | 81 | 82 | ) 83 | )} 84 | 85 |
IdNamePriceCategoryaction
{index +1}{name}{price}{category} 68 | 76 | handleDelet(id)} 79 | >eliminar 80 |
86 |
87 |
88 | ) 89 | } 90 | export default Table; 91 | -------------------------------------------------------------------------------- /client/styles/Global.ts: -------------------------------------------------------------------------------- 1 | import { createGlobalStyle } from "styled-components"; 2 | 3 | export const GlobalStyle=createGlobalStyle` 4 | *{ 5 | margin: 0; padding:0; 6 | box-sizing: border-box; 7 | text-decoration: none; 8 | transition: all .5s linear; 9 | outline: none; 10 | font-family: 'Gill Sans', 'Gill Sans MT', Calibri, 'Trebuchet MS', sans-serif; 11 | } 12 | body{ 13 | background-color: #eee; 14 | } 15 | button{ 16 | cursor: pointer; 17 | } 18 | `; -------------------------------------------------------------------------------- /client/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": true, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "esModuleInterop": true, 11 | "module": "esnext", 12 | "moduleResolution": "node", 13 | "resolveJsonModule": true, 14 | "isolatedModules": true, 15 | "jsx": "preserve", 16 | "incremental": true 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /server/index.js: -------------------------------------------------------------------------------- 1 | const express=require('express'); 2 | const app=express(); 3 | const PORT=process.env.PORT || 3001; 4 | const mysql=require('mysql'); 5 | const cors=require('cors'); 6 | const { request } = require('express'); 7 | 8 | const db=mysql.createPool({ 9 | host:'localhost', 10 | user:'root', 11 | password:'', 12 | database:'crudGames' 13 | }); 14 | 15 | app.use(cors()); 16 | app.use(express.json()); 17 | 18 | app.post('/register',(request,response)=>{ 19 | const {name,price,category}=request.body; 20 | let SQL="INSERT INTO games(name,price,category) values(?,?,?)"; 21 | 22 | db.query(SQL,[name,price,category],(err,result)=>{ 23 | console.log(err) 24 | }); 25 | //return response.send(''); 26 | }); 27 | 28 | app.get('/getGames',(request,response)=>{ 29 | let SQL="SELECT * FROM games"; 30 | 31 | db.query(SQL,(err,result)=>{ 32 | err?console.log(err):response.send(result); 33 | }) 34 | }); 35 | 36 | app.put('/edit',(request,response)=>{ 37 | const {idGame,name1,price1,category1}=request.body; 38 | 39 | const SQL='UPDATE games set name=?,price=?,category=? WHERE id=?'; 40 | 41 | db.query(SQL,[name1,price1,category1,idGame],(err)=>{ 42 | err?console.log(err):response.send({message:'update'}); 43 | }); 44 | }); 45 | 46 | app.delete('/delet/:id',(request,response)=>{ 47 | const {id}=request.params; 48 | 49 | const SQL=`DELETE FROM games WHERE id=?`; 50 | db.query(SQL,[id],(err)=>{ 51 | err?console.log(err):response.send({message:'deleted'}); 52 | }); 53 | }); 54 | 55 | app.listen(PORT,()=>{ 56 | console.log(`servidor rodando em http://localhost:${PORT}`); 57 | }) -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "dependencies": { 3 | "cors": "^2.8.5", 4 | "express": "^4.18.1", 5 | "express-handlebars": "^6.0.6", 6 | "mysql": "^2.18.1" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /server/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | accepts@~1.3.8: 6 | version "1.3.8" 7 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" 8 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== 9 | dependencies: 10 | mime-types "~2.1.34" 11 | negotiator "0.6.3" 12 | 13 | array-flatten@1.1.1: 14 | version "1.1.1" 15 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 16 | integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== 17 | 18 | balanced-match@^1.0.0: 19 | version "1.0.2" 20 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 21 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 22 | 23 | bignumber.js@9.0.0: 24 | version "9.0.0" 25 | resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.0.tgz#805880f84a329b5eac6e7cb6f8274b6d82bdf075" 26 | integrity sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A== 27 | 28 | body-parser@1.20.0: 29 | version "1.20.0" 30 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" 31 | integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== 32 | dependencies: 33 | bytes "3.1.2" 34 | content-type "~1.0.4" 35 | debug "2.6.9" 36 | depd "2.0.0" 37 | destroy "1.2.0" 38 | http-errors "2.0.0" 39 | iconv-lite "0.4.24" 40 | on-finished "2.4.1" 41 | qs "6.10.3" 42 | raw-body "2.5.1" 43 | type-is "~1.6.18" 44 | unpipe "1.0.0" 45 | 46 | brace-expansion@^2.0.1: 47 | version "2.0.1" 48 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 49 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 50 | dependencies: 51 | balanced-match "^1.0.0" 52 | 53 | bytes@3.1.2: 54 | version "3.1.2" 55 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" 56 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== 57 | 58 | call-bind@^1.0.0: 59 | version "1.0.2" 60 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" 61 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== 62 | dependencies: 63 | function-bind "^1.1.1" 64 | get-intrinsic "^1.0.2" 65 | 66 | content-disposition@0.5.4: 67 | version "0.5.4" 68 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" 69 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== 70 | dependencies: 71 | safe-buffer "5.2.1" 72 | 73 | content-type@~1.0.4: 74 | version "1.0.4" 75 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 76 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 77 | 78 | cookie-signature@1.0.6: 79 | version "1.0.6" 80 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 81 | integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== 82 | 83 | cookie@0.5.0: 84 | version "0.5.0" 85 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" 86 | integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== 87 | 88 | core-util-is@~1.0.0: 89 | version "1.0.3" 90 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" 91 | integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== 92 | 93 | cors@^2.8.5: 94 | version "2.8.5" 95 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 96 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 97 | dependencies: 98 | object-assign "^4" 99 | vary "^1" 100 | 101 | debug@2.6.9: 102 | version "2.6.9" 103 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 104 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 105 | dependencies: 106 | ms "2.0.0" 107 | 108 | depd@2.0.0: 109 | version "2.0.0" 110 | resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" 111 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== 112 | 113 | destroy@1.2.0: 114 | version "1.2.0" 115 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" 116 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== 117 | 118 | ee-first@1.1.1: 119 | version "1.1.1" 120 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 121 | integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== 122 | 123 | encodeurl@~1.0.2: 124 | version "1.0.2" 125 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 126 | integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== 127 | 128 | escape-html@~1.0.3: 129 | version "1.0.3" 130 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 131 | integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== 132 | 133 | etag@~1.8.1: 134 | version "1.8.1" 135 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 136 | integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== 137 | 138 | express-handlebars@^6.0.6: 139 | version "6.0.6" 140 | resolved "https://registry.yarnpkg.com/express-handlebars/-/express-handlebars-6.0.6.tgz#2589bcc4cf9545918047c767e66fa625f5ace85b" 141 | integrity sha512-E4QHYCh+9fyfdBEb8uKJ8p6HD4qq/sUSHBq83lRNlLJp2TQKEg2nFJYbVdC+M3QzaV19dODe43lgjQWVaIpbyQ== 142 | dependencies: 143 | glob "^8.0.2" 144 | graceful-fs "^4.2.10" 145 | handlebars "^4.7.7" 146 | 147 | express@^4.18.1: 148 | version "4.18.1" 149 | resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" 150 | integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== 151 | dependencies: 152 | accepts "~1.3.8" 153 | array-flatten "1.1.1" 154 | body-parser "1.20.0" 155 | content-disposition "0.5.4" 156 | content-type "~1.0.4" 157 | cookie "0.5.0" 158 | cookie-signature "1.0.6" 159 | debug "2.6.9" 160 | depd "2.0.0" 161 | encodeurl "~1.0.2" 162 | escape-html "~1.0.3" 163 | etag "~1.8.1" 164 | finalhandler "1.2.0" 165 | fresh "0.5.2" 166 | http-errors "2.0.0" 167 | merge-descriptors "1.0.1" 168 | methods "~1.1.2" 169 | on-finished "2.4.1" 170 | parseurl "~1.3.3" 171 | path-to-regexp "0.1.7" 172 | proxy-addr "~2.0.7" 173 | qs "6.10.3" 174 | range-parser "~1.2.1" 175 | safe-buffer "5.2.1" 176 | send "0.18.0" 177 | serve-static "1.15.0" 178 | setprototypeof "1.2.0" 179 | statuses "2.0.1" 180 | type-is "~1.6.18" 181 | utils-merge "1.0.1" 182 | vary "~1.1.2" 183 | 184 | finalhandler@1.2.0: 185 | version "1.2.0" 186 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" 187 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== 188 | dependencies: 189 | debug "2.6.9" 190 | encodeurl "~1.0.2" 191 | escape-html "~1.0.3" 192 | on-finished "2.4.1" 193 | parseurl "~1.3.3" 194 | statuses "2.0.1" 195 | unpipe "~1.0.0" 196 | 197 | forwarded@0.2.0: 198 | version "0.2.0" 199 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" 200 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== 201 | 202 | fresh@0.5.2: 203 | version "0.5.2" 204 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 205 | integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== 206 | 207 | fs.realpath@^1.0.0: 208 | version "1.0.0" 209 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 210 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 211 | 212 | function-bind@^1.1.1: 213 | version "1.1.1" 214 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" 215 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== 216 | 217 | get-intrinsic@^1.0.2: 218 | version "1.1.2" 219 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" 220 | integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== 221 | dependencies: 222 | function-bind "^1.1.1" 223 | has "^1.0.3" 224 | has-symbols "^1.0.3" 225 | 226 | glob@^8.0.2: 227 | version "8.0.3" 228 | resolved "https://registry.yarnpkg.com/glob/-/glob-8.0.3.tgz#415c6eb2deed9e502c68fa44a272e6da6eeca42e" 229 | integrity sha512-ull455NHSHI/Y1FqGaaYFaLGkNMMJbavMrEGFXG/PGrg6y7sutWHUHrz6gy6WEBH6akM1M414dWKCNs+IhKdiQ== 230 | dependencies: 231 | fs.realpath "^1.0.0" 232 | inflight "^1.0.4" 233 | inherits "2" 234 | minimatch "^5.0.1" 235 | once "^1.3.0" 236 | 237 | graceful-fs@^4.2.10: 238 | version "4.2.10" 239 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.10.tgz#147d3a006da4ca3ce14728c7aefc287c367d7a6c" 240 | integrity sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA== 241 | 242 | handlebars@^4.7.7: 243 | version "4.7.7" 244 | resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.7.tgz#9ce33416aad02dbd6c8fafa8240d5d98004945a1" 245 | integrity sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA== 246 | dependencies: 247 | minimist "^1.2.5" 248 | neo-async "^2.6.0" 249 | source-map "^0.6.1" 250 | wordwrap "^1.0.0" 251 | optionalDependencies: 252 | uglify-js "^3.1.4" 253 | 254 | has-symbols@^1.0.3: 255 | version "1.0.3" 256 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" 257 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== 258 | 259 | has@^1.0.3: 260 | version "1.0.3" 261 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" 262 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== 263 | dependencies: 264 | function-bind "^1.1.1" 265 | 266 | http-errors@2.0.0: 267 | version "2.0.0" 268 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" 269 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== 270 | dependencies: 271 | depd "2.0.0" 272 | inherits "2.0.4" 273 | setprototypeof "1.2.0" 274 | statuses "2.0.1" 275 | toidentifier "1.0.1" 276 | 277 | iconv-lite@0.4.24: 278 | version "0.4.24" 279 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 280 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 281 | dependencies: 282 | safer-buffer ">= 2.1.2 < 3" 283 | 284 | inflight@^1.0.4: 285 | version "1.0.6" 286 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 287 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 288 | dependencies: 289 | once "^1.3.0" 290 | wrappy "1" 291 | 292 | inherits@2, inherits@2.0.4, inherits@~2.0.3: 293 | version "2.0.4" 294 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 295 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 296 | 297 | ipaddr.js@1.9.1: 298 | version "1.9.1" 299 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 300 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 301 | 302 | isarray@~1.0.0: 303 | version "1.0.0" 304 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 305 | integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== 306 | 307 | media-typer@0.3.0: 308 | version "0.3.0" 309 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 310 | integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== 311 | 312 | merge-descriptors@1.0.1: 313 | version "1.0.1" 314 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 315 | integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== 316 | 317 | methods@~1.1.2: 318 | version "1.1.2" 319 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 320 | integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== 321 | 322 | mime-db@1.52.0: 323 | version "1.52.0" 324 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 325 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 326 | 327 | mime-types@~2.1.24, mime-types@~2.1.34: 328 | version "2.1.35" 329 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 330 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 331 | dependencies: 332 | mime-db "1.52.0" 333 | 334 | mime@1.6.0: 335 | version "1.6.0" 336 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 337 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 338 | 339 | minimatch@^5.0.1: 340 | version "5.1.0" 341 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" 342 | integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== 343 | dependencies: 344 | brace-expansion "^2.0.1" 345 | 346 | minimist@^1.2.5: 347 | version "1.2.6" 348 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" 349 | integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== 350 | 351 | ms@2.0.0: 352 | version "2.0.0" 353 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 354 | integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== 355 | 356 | ms@2.1.3: 357 | version "2.1.3" 358 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 359 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 360 | 361 | mysql@^2.18.1: 362 | version "2.18.1" 363 | resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.18.1.tgz#2254143855c5a8c73825e4522baf2ea021766717" 364 | integrity sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig== 365 | dependencies: 366 | bignumber.js "9.0.0" 367 | readable-stream "2.3.7" 368 | safe-buffer "5.1.2" 369 | sqlstring "2.3.1" 370 | 371 | negotiator@0.6.3: 372 | version "0.6.3" 373 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" 374 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== 375 | 376 | neo-async@^2.6.0: 377 | version "2.6.2" 378 | resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" 379 | integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== 380 | 381 | object-assign@^4: 382 | version "4.1.1" 383 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 384 | integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== 385 | 386 | object-inspect@^1.9.0: 387 | version "1.12.2" 388 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" 389 | integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== 390 | 391 | on-finished@2.4.1: 392 | version "2.4.1" 393 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" 394 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== 395 | dependencies: 396 | ee-first "1.1.1" 397 | 398 | once@^1.3.0: 399 | version "1.4.0" 400 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 401 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 402 | dependencies: 403 | wrappy "1" 404 | 405 | parseurl@~1.3.3: 406 | version "1.3.3" 407 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 408 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 409 | 410 | path-to-regexp@0.1.7: 411 | version "0.1.7" 412 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 413 | integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== 414 | 415 | process-nextick-args@~2.0.0: 416 | version "2.0.1" 417 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 418 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 419 | 420 | proxy-addr@~2.0.7: 421 | version "2.0.7" 422 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" 423 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== 424 | dependencies: 425 | forwarded "0.2.0" 426 | ipaddr.js "1.9.1" 427 | 428 | qs@6.10.3: 429 | version "6.10.3" 430 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" 431 | integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== 432 | dependencies: 433 | side-channel "^1.0.4" 434 | 435 | range-parser@~1.2.1: 436 | version "1.2.1" 437 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 438 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 439 | 440 | raw-body@2.5.1: 441 | version "2.5.1" 442 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" 443 | integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== 444 | dependencies: 445 | bytes "3.1.2" 446 | http-errors "2.0.0" 447 | iconv-lite "0.4.24" 448 | unpipe "1.0.0" 449 | 450 | readable-stream@2.3.7: 451 | version "2.3.7" 452 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 453 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 454 | dependencies: 455 | core-util-is "~1.0.0" 456 | inherits "~2.0.3" 457 | isarray "~1.0.0" 458 | process-nextick-args "~2.0.0" 459 | safe-buffer "~5.1.1" 460 | string_decoder "~1.1.1" 461 | util-deprecate "~1.0.1" 462 | 463 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 464 | version "5.1.2" 465 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 466 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 467 | 468 | safe-buffer@5.2.1: 469 | version "5.2.1" 470 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 471 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 472 | 473 | "safer-buffer@>= 2.1.2 < 3": 474 | version "2.1.2" 475 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 476 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 477 | 478 | send@0.18.0: 479 | version "0.18.0" 480 | resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" 481 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== 482 | dependencies: 483 | debug "2.6.9" 484 | depd "2.0.0" 485 | destroy "1.2.0" 486 | encodeurl "~1.0.2" 487 | escape-html "~1.0.3" 488 | etag "~1.8.1" 489 | fresh "0.5.2" 490 | http-errors "2.0.0" 491 | mime "1.6.0" 492 | ms "2.1.3" 493 | on-finished "2.4.1" 494 | range-parser "~1.2.1" 495 | statuses "2.0.1" 496 | 497 | serve-static@1.15.0: 498 | version "1.15.0" 499 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" 500 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== 501 | dependencies: 502 | encodeurl "~1.0.2" 503 | escape-html "~1.0.3" 504 | parseurl "~1.3.3" 505 | send "0.18.0" 506 | 507 | setprototypeof@1.2.0: 508 | version "1.2.0" 509 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" 510 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== 511 | 512 | side-channel@^1.0.4: 513 | version "1.0.4" 514 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" 515 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== 516 | dependencies: 517 | call-bind "^1.0.0" 518 | get-intrinsic "^1.0.2" 519 | object-inspect "^1.9.0" 520 | 521 | source-map@^0.6.1: 522 | version "0.6.1" 523 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 524 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 525 | 526 | sqlstring@2.3.1: 527 | version "2.3.1" 528 | resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.1.tgz#475393ff9e91479aea62dcaf0ca3d14983a7fb40" 529 | integrity sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ== 530 | 531 | statuses@2.0.1: 532 | version "2.0.1" 533 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" 534 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== 535 | 536 | string_decoder@~1.1.1: 537 | version "1.1.1" 538 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 539 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 540 | dependencies: 541 | safe-buffer "~5.1.0" 542 | 543 | toidentifier@1.0.1: 544 | version "1.0.1" 545 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" 546 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== 547 | 548 | type-is@~1.6.18: 549 | version "1.6.18" 550 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 551 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 552 | dependencies: 553 | media-typer "0.3.0" 554 | mime-types "~2.1.24" 555 | 556 | uglify-js@^3.1.4: 557 | version "3.17.0" 558 | resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" 559 | integrity sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg== 560 | 561 | unpipe@1.0.0, unpipe@~1.0.0: 562 | version "1.0.0" 563 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 564 | integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== 565 | 566 | util-deprecate@~1.0.1: 567 | version "1.0.2" 568 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 569 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== 570 | 571 | utils-merge@1.0.1: 572 | version "1.0.1" 573 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 574 | integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== 575 | 576 | vary@^1, vary@~1.1.2: 577 | version "1.1.2" 578 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 579 | integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== 580 | 581 | wordwrap@^1.0.0: 582 | version "1.0.0" 583 | resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" 584 | integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== 585 | 586 | wrappy@1: 587 | version "1.0.2" 588 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 589 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 590 | --------------------------------------------------------------------------------