From 0bcd22d2bca3f6d61c243459ecc095ef796ec21d Mon Sep 17 00:00:00 2001 From: Mauricio Date: Mon, 31 Jan 2022 12:49:06 +0100 Subject: [PATCH 01/66] Update Project --- .gitignore | 2 +- cmds/create.js | 13 -------- cmds/delete.js | 3 -- cmds/findBy.js | 3 -- cmds/help.js | 3 -- cmds/show.js | 3 -- cmds/update.js | 3 -- createTest.js | 38 ----------------------- index.js | 66 ---------------------------------------- inquirerTest.js | 13 -------- messagesApp/helpFile.txt | 9 ------ messagesApp/welcome.txt | 10 ------ 12 files changed, 1 insertion(+), 165 deletions(-) delete mode 100644 cmds/create.js delete mode 100644 cmds/delete.js delete mode 100644 cmds/findBy.js delete mode 100644 cmds/help.js delete mode 100644 cmds/show.js delete mode 100644 cmds/update.js delete mode 100644 createTest.js delete mode 100644 inquirerTest.js delete mode 100644 messagesApp/helpFile.txt delete mode 100644 messagesApp/welcome.txt diff --git a/.gitignore b/.gitignore index 0965b4fb4..f7baaa326 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ node_modules/ - +database/ ##MacOs .DS_Store \ No newline at end of file diff --git a/cmds/create.js b/cmds/create.js deleted file mode 100644 index 16e11f8e7..000000000 --- a/cmds/create.js +++ /dev/null @@ -1,13 +0,0 @@ -// Pasos estándar a hacer en todas las funciones -// Leer archivo.json, crear si no existe -// Copiar información del archivo en un arrayTemporal -// Inicia pregunta de los campos para crear la tarea, guardar en un objetoTemporal -// Cuando complete los campos, hacer push del objeto temporal al arrayTemporal. -// Escribir arrayTemporal en archivo.json -// Mensaje de Éxito y/o Error -// EN Todos los pasos siempre tener un mensaje de Error si algo falla, indicando el proceso que hace -// Pej: Si falla a leer el archivo, Error: File not found o si falla al escribir Error: File can not write. - -module.exports = (args) => { - console.log('Tu tarea se esta creando'); -} \ No newline at end of file diff --git a/cmds/delete.js b/cmds/delete.js deleted file mode 100644 index f14a33cdc..000000000 --- a/cmds/delete.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = (args) => { - console.log('Tu tarea se borrará'); -} \ No newline at end of file diff --git a/cmds/findBy.js b/cmds/findBy.js deleted file mode 100644 index e71985a16..000000000 --- a/cmds/findBy.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = (args) => { - console.log('Buscando tu tarea'); -} \ No newline at end of file diff --git a/cmds/help.js b/cmds/help.js deleted file mode 100644 index 478f3747b..000000000 --- a/cmds/help.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = (args) => { - console.log('Ayuda!'); -} \ No newline at end of file diff --git a/cmds/show.js b/cmds/show.js deleted file mode 100644 index a5ff06462..000000000 --- a/cmds/show.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = (args) => { - console.log('Esta es tu tarea'); -} \ No newline at end of file diff --git a/cmds/update.js b/cmds/update.js deleted file mode 100644 index 5810456c5..000000000 --- a/cmds/update.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = (args) => { - console.log('Tu tarea está actualizada'); -} \ No newline at end of file diff --git a/createTest.js b/createTest.js deleted file mode 100644 index 8be37447e..000000000 --- a/createTest.js +++ /dev/null @@ -1,38 +0,0 @@ -// Pasos estándar a hacer en todas las funciones -// Leer archivo.json, crear si no existe -// Copiar información del archivo en un arrayTemporal -// Inicia pregunta de los campos para crear la tarea, guardar en un objetoTemporal -// Cuando complete los campos, hacer push del objeto temporal al arrayTemporal. -// Escribir arrayTemporal en archivo.json -// Mensaje de Éxito y/o Error -// EN Todos los pasos siempre tener un mensaje de Error si algo falla, indicando el proceso que hace -// Pej: Si falla a leer el archivo, Error: File not found o si falla al escribir Error: File can not write. - -const inquirer = require('inquirer'); -// Código que te permite crear la pregunta sobre el campo que quieres crear -inquirer - .prompt([ - { - name: 'taskName', - message: 'Cuál es tu tarea:' - }, - { - name: 'taskStartDate', - message: 'Fecha de Inicio:' - }, - { - name: 'taskEndDate', - message: 'Fecha de Fin:' - }, - { - name: 'taskDescription', - message: 'Descripción de la tarea:' - }, - { - name: 'taskUser', - message: 'Usuario Asignado:' - } - ]) - .then(answers => { // Aquí va la función que guarda el Nombre en el Objeto (Json, Sql o Mongo) - console.info('Nombre de la tarea:', answers); // En este momento no hay presistencia - }); \ No newline at end of file diff --git a/index.js b/index.js index 18a31d1a7..e69de29bb 100644 --- a/index.js +++ b/index.js @@ -1,66 +0,0 @@ -const fs = require('fs'); -const readline = require('readline'); -const welcomeMsg = fs.createReadStream('./messagesApp/welcome.txt'); -const helpConsole = fs.createReadStream('./messagesApp/helpFile.txt'); - -// Crear Interfaz de Lineas de Comando (CLI) (Consola) -const rl = readline.createInterface({ - input: process.stdin, - output: process.stdout, - prompt: 'ToDo APP> \n' -}); - -// Función procesa textos desde un archivo y los muestra por consola -async function showText(textToShow) { - const rl = readline.createInterface({ - input: textToShow, - crlfDelay: Infinity - }); - - for await (const line of rl) { - console.log(`${line}`); - } -} -// Mensaje de bienvenida -showText(welcomeMsg); - -rl.prompt(); - -rl.on('line', (line) => { - switch (line.trim()) { - case 'help': - showText(helpConsole); - break; - case 'create': - const create = (require('./cmds/create')) //Función que llama a create.js (Crear Tarea) - create() //Ejecuta create.js llamado previamente - break; - case 'update': - const update = (require('./cmds/update')) //Función que llama a update.js (Modificar Tarea) - update()//Ejecuta update.js llamado previamente - break; - case 'delete': - const del = (require('./cmds/delete')) //Función que llama a delete.js (Borrar Tarea) - del()//Ejecuta delete.js llamado previamente - break; - case 'show': - const show = (require('./cmds/show')) //Función que llama a show.js (Mostrar Tarea) - show()//Ejecuta show.js llamado previamente - break; - case 'find': - const findBy = (require('./cmds/findBy')) //Función que llama a findby.js (Buscar Tarea) - findBy()//Ejecuta findBy.js llamado previamente - break; - case 'exit': - console.log('Que tengas un buen día!'); // Muestra mensaje de despedida - process.exit(0); // Cierra app de consola - default: - console.table(`No se reconoce: '${line.trim()}'`); // Mensaje si el comando ingresado no es válido - break; -} - rl.prompt(); - -}).on('close', () => { - console.log('Que tengas un buen día!'); - process.exit(0); -}); // Función que cierra la consola \ No newline at end of file diff --git a/inquirerTest.js b/inquirerTest.js deleted file mode 100644 index 838613519..000000000 --- a/inquirerTest.js +++ /dev/null @@ -1,13 +0,0 @@ -const inquirer = require('inquirer'); - -inquirer - .prompt([ - { - type: 'editor', - name: 'story', - message: 'Tell me a story, a really long one!', - }, - ]) - .then(answers => { - console.info('Answer:', answers.story); - }); \ No newline at end of file diff --git a/messagesApp/helpFile.txt b/messagesApp/helpFile.txt deleted file mode 100644 index 40b939f45..000000000 --- a/messagesApp/helpFile.txt +++ /dev/null @@ -1,9 +0,0 @@ -Listado de Comandos: -help - Para abrir el archivo de ayuda. -create - Para crear una tarea. -create-sql - Para crear en SQL -create-mongo - Para crear en Mongo -update-sql - Para modificar una tarea. -del- Para borrar una tarea. -show - Para mostrar todas las tareas. -find - Para buscar una o mas tareas por requisitos. \ No newline at end of file diff --git a/messagesApp/welcome.txt b/messagesApp/welcome.txt deleted file mode 100644 index 3700bdcfc..000000000 --- a/messagesApp/welcome.txt +++ /dev/null @@ -1,10 +0,0 @@ -============================================= -| ╔╗╔╗╔═╗╔╗─╔╗─╔═╗ | -| ║╚╝║║╦╝║║─║║─║║║ | -| ║╔╗║║╩╗║╚╗║╚╗║║║ | -| ╚╝╚╝╚═╝╚═╝╚═╝╚═╝ | -| Bienvenido a la ToDo App ヅ | -============================================= -Escribe 'help' para ver todos los comandos -Escribe 'create' para crear una nueva Tarea (Utilizando Json) -Escribe 'exit' para salir From 55444a92ce97990459530298aac2c7440ec74298 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Mon, 31 Jan 2022 13:02:45 +0100 Subject: [PATCH 02/66] Estructura del proyecto --- api/app.js | 110 ++++++++++++++++++++++++++++++++++++++ api/controllers/README.md | 2 + api/index.js | 1 + api/middlewares/README.md | 3 ++ api/models/README.md | 2 + api/routes/README.md | 2 + index.js | 0 7 files changed, 120 insertions(+) create mode 100644 api/app.js create mode 100644 api/controllers/README.md create mode 100644 api/index.js create mode 100644 api/middlewares/README.md create mode 100644 api/models/README.md create mode 100644 api/routes/README.md delete mode 100644 index.js diff --git a/api/app.js b/api/app.js new file mode 100644 index 000000000..3ff42c610 --- /dev/null +++ b/api/app.js @@ -0,0 +1,110 @@ +//Crea servidor + +const Joi = require('joi'); +const express = require('express'); +const { exist, invalid } = require('joi/lib/types/lazy'); + +const app = express (); +app.use(express.json()); + +const courses = [ + { id: 1, name:'course 1'}, + { id: 2, name:'course 2'}, + { id: 3, name:'course 3'}, + { id: 4, name:'course 4'} +]; + +app.get('/', (req, res) => { //Dos argumentos path o url, callback + res.send('Hello World'); +}); + +app.get('/api/courses', (req, res) => { + res.send(courses); +}); + +//Metódo básico para hacer una petición por un parámetro especifico y devolver ese valor. +// app.get('/api/courses/:id', (req,res) => { +// res.send(req.params.id); +// }) + +//Forma de hacer post (create) con validación manual +// app.post('/api/courses', (req, res) => { +// if(!req.body.name || req.body.name.length < 3) { +// //400 Bad Request +// res.status(400).send('Name is required and should be minimun characters') +// return; +// } +// const course = { +// id: courses.length + 1, +// name: req.body.name +// } +// courses.push(course); +// res.send(course); +// }) + +//Metodo de hacer post con validació utilizando Joi +app.post('/api/courses', (req, res) => { + const schema = { + name: Joi.string().min(3).required() + }; + const result = Joi.validate(req.body, schema); + + if(result.error) return res.status(400).send(result.error.details[0].message) + + const course = { + id: courses.length + 1, + name: req.body.name + } + courses.push(course); + res.send(course); +}) + +app.get('/api/courses/:id', (req, res) => { //Metódo completo con devolución de errores + const course = courses.find(c => c.id === parseInt(req.params.id)); + if(!course) return res.status(404).send('the cours with the given ID was not found')// 404 + res.send(course) + +}) + +//Método PUT básico +app.put('/api/courses/:id', (req, res) => { + // Look up the course + // if not exist, return 404 + const course = courses.find(c => c.id === parseInt(req.params.id)); + if(!course) return res.status(404).send('the cours with the given ID was not found')// 404 + + // Validate + // If invalid, return 400 + const schema = { + name: Joi.string().min(3).required() + }; + const result = Joi.validate(req.body, schema); + if(result.error){ + return res.status(400).send(result.error.details[0].message) + } + + // Update courser + // return updated course + course.name = req.body.name; + res.send(course); +}) + +//Metodo delete, +app.delete('/api/courses/:id', (req, res) => { + //Look up + // if not exists, return 404 + const course = courses.find(c => c.id === parseInt(req.params.id)); + if(!course) return res.status(404).send('The course with the given Id was not found'); + + //Delete + const index = courses.indexOf(course) + courses.splice(index, 1); + + //Return the same course + res.send(course); +}) + + +//Port +const port = process.env.PORT || 3000; //Variable de entorno que captura el puerto que esta desginado en el ordenador +app.listen(port, () => console.log(`Listening on port ${port}...`)) \ No newline at end of file diff --git a/api/controllers/README.md b/api/controllers/README.md new file mode 100644 index 000000000..0531c1b67 --- /dev/null +++ b/api/controllers/README.md @@ -0,0 +1,2 @@ +### Controladores +Archivo controlador de ejemplo. En el programamos las acciones y operaciones sobre nuestra base de datos, en este caso para obtener los datos de un usuario. \ No newline at end of file diff --git a/api/index.js b/api/index.js new file mode 100644 index 000000000..d05770e5e --- /dev/null +++ b/api/index.js @@ -0,0 +1 @@ +//Conecta con BD \ No newline at end of file diff --git a/api/middlewares/README.md b/api/middlewares/README.md new file mode 100644 index 000000000..ec8117a21 --- /dev/null +++ b/api/middlewares/README.md @@ -0,0 +1,3 @@ +### Middlewares +Archivo con el middleware para validar la autenticación del usuario. +Cabecera Cache-control: no-cache \ No newline at end of file diff --git a/api/models/README.md b/api/models/README.md new file mode 100644 index 000000000..d428d9459 --- /dev/null +++ b/api/models/README.md @@ -0,0 +1,2 @@ +### Models +Para crear los esquema y modelos de usuarios \ No newline at end of file diff --git a/api/routes/README.md b/api/routes/README.md new file mode 100644 index 000000000..5f4aab22a --- /dev/null +++ b/api/routes/README.md @@ -0,0 +1,2 @@ +### Routes +Archivo en el que definimos las rutas (path) a las que responderá nuestra aplicación y en ellas se encontrará la lógica a ejecutar. \ No newline at end of file diff --git a/index.js b/index.js deleted file mode 100644 index e69de29bb..000000000 From 513d79899c47a2a5dd1194734fdbc0377a5ad196 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Mon, 31 Jan 2022 13:04:20 +0100 Subject: [PATCH 03/66] Enlaces --- Enlaces.md | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/Enlaces.md b/Enlaces.md index 4d6dbb01a..89015c54d 100644 --- a/Enlaces.md +++ b/Enlaces.md @@ -1,7 +1 @@ -1. [Enlace Como crear un ToDO List (Ejemplo)](https://vegibit.com/node-js-todo-list-tutorial/) -2. [Enlace de app similar](https://www.youtube.com/watch?v=v2GKt39-LPA) -3. [Enlace de como usar Inquirer](https://www.digitalocean.com/community/tutorials/nodejs-interactive-command-line-prompts) -4. [Enlace Node Readline (Como crear interfaz de consola e interactuar con ella)](https://nodejs.org/dist/latest-v17.x/docs/api/readline.html) -5. [Enlace Node File System (Manejar archivos en local o en remoto)](https://nodejs.org/dist/latest-v17.x/docs/api/fs.html) -6. [Enlace Como crear una App de Consola (Sólo saqué la idea de organización)](https://medium.com/@maniakhitoccori/cómo-crear-una-aplicación-real-de-node-cli-con-node-db1338fa1d9b) - +1. [Enlace estructura proyecto Node y Express ](https://medium.com/williambastidasblog/estructura-de-una-api-rest-con-nodejs-express-y-mongodb-cdd97637b18b) From 240d69113a6f2e1129671b05e82e6a40913d2bfa Mon Sep 17 00:00:00 2001 From: Mauricio Date: Mon, 31 Jan 2022 13:04:50 +0100 Subject: [PATCH 04/66] Upd --- Enlaces.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Enlaces.md b/Enlaces.md index 89015c54d..3b9dd7619 100644 --- a/Enlaces.md +++ b/Enlaces.md @@ -1 +1,2 @@ 1. [Enlace estructura proyecto Node y Express ](https://medium.com/williambastidasblog/estructura-de-una-api-rest-con-nodejs-express-y-mongodb-cdd97637b18b) +2. [Validación de archivos](https://pharos.sh/cargue-la-gestion-de-archivos-en-node-js-con-express-y-multer/) \ No newline at end of file From 90d3e69592a7fe66352f41fa54ce7351d37db0f4 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Tue, 1 Feb 2022 10:46:43 +0100 Subject: [PATCH 05/66] Rutas creadas & Requirimientos en Readme --- README.md | 59 +- api/app.js | 110 +--- api/index.js | 2 +- api/routes/time.js | 9 + api/routes/upload.js | 9 + api/routes/users.js | 9 + package-lock.json | 1268 ++++++++++++++++++++++++++++++++++++++++++ package.json | 28 + 8 files changed, 1343 insertions(+), 151 deletions(-) create mode 100644 api/routes/time.js create mode 100644 api/routes/upload.js create mode 100644 api/routes/users.js create mode 100644 package-lock.json create mode 100644 package.json diff --git a/README.md b/README.md index 3863714aa..c6053bdd0 100644 --- a/README.md +++ b/README.md @@ -1,50 +1,15 @@ -

Welcome to Developers Team - Todo App👋

+

Welcome to Node Rest Server👋

+Nivell 1 +- Exercici 1 +Crea un servidor amb Express que retorni a una petició GET a l'endpoint /user un json amb el teu nom, edat i la url des d'on es fa la petició. -> Pequeño programa en node.js para hacer y administrar "to-dos" +- Exercici 2 +Afegeix un endpoint /upload per a pujar al servidor un arxiu de tipus png, jpg o gif que retorni un missatge d'error en cas que l'extensió de l'arxiu no coincideixi amb aquestes. -Para probar el modulo inquirer: -`npm install inquirer` -`node inquirerTest.js` -> Prueba de como ingresar datos por consola. -`node createTest.js`-> Prueba de como crear una tarea por consola. +Nivell 2 +- Exercici 1 +Creu un endpoint /time que rebi per POST com a paràmetre un JSON amb el nom d'usuari i retorni un objecte JSON que contingui l'hora i data actual. Inclogui un middleware que afegeixi la capçalera Cache-control: no-cache. Habiliti CORS (Cross-Origin Resource Sharing) en les respostes, ja sigui mitjançant Express o mitjançant un altre middleware. -Propuesta de la tarea, la idea es que todos usemos el mismo objeto para que sea más fácil integrar cada funcionalidad: -const toDo = { -taskName: 'Nombre de tarea', -taskStartDate: 'Fecha de Inicio', -taskEndDate: 'Fecha de Fin', -taskDescription:'Descripción y/o detalles', -taskUser:'Usuario Asignado' -} - -## Install -Para instalar inquirer -> -```sh -npm install inquirer -``` - -## Usage - -```sh -npm start -``` - -## Run tests - -```sh -npm run test -``` - -## Authors - -👤 **Mauricio, Pere Ruiz, Bianca Inga** - -- Github: [@molivaresr] (https://github.com/molivaresr), [En\_Pere] (https://github.com/En_Pere), [Blanket25] (https://github.com/Blanket25) -## Our Organization sheet -[Trello](https://trello.com/b/2ujcduIe/developer-team) -## Show your support - -Give a ⭐️ if this project helped you! - ---- - -_This README was generated with ❤️ by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_ +Nivell 3 +- Exercici 1 +Afegeixi un middleware a l'endpoint anterior que retorni un HTTP Status 401 - Unauthorized si la capçalera de la petició no conté autenticació bàsica (usuari i contrasenya). \ No newline at end of file diff --git a/api/app.js b/api/app.js index 3ff42c610..fe2a0ca60 100644 --- a/api/app.js +++ b/api/app.js @@ -1,110 +1,14 @@ //Crea servidor - -const Joi = require('joi'); const express = require('express'); -const { exist, invalid } = require('joi/lib/types/lazy'); - const app = express (); -app.use(express.json()); - -const courses = [ - { id: 1, name:'course 1'}, - { id: 2, name:'course 2'}, - { id: 3, name:'course 3'}, - { id: 4, name:'course 4'} -]; - -app.get('/', (req, res) => { //Dos argumentos path o url, callback - res.send('Hello World'); -}); - -app.get('/api/courses', (req, res) => { - res.send(courses); -}); - -//Metódo básico para hacer una petición por un parámetro especifico y devolver ese valor. -// app.get('/api/courses/:id', (req,res) => { -// res.send(req.params.id); -// }) - -//Forma de hacer post (create) con validación manual -// app.post('/api/courses', (req, res) => { -// if(!req.body.name || req.body.name.length < 3) { -// //400 Bad Request -// res.status(400).send('Name is required and should be minimun characters') -// return; -// } -// const course = { -// id: courses.length + 1, -// name: req.body.name -// } -// courses.push(course); -// res.send(course); -// }) - -//Metodo de hacer post con validació utilizando Joi -app.post('/api/courses', (req, res) => { - const schema = { - name: Joi.string().min(3).required() - }; - const result = Joi.validate(req.body, schema); - - if(result.error) return res.status(400).send(result.error.details[0].message) - - const course = { - id: courses.length + 1, - name: req.body.name - } - courses.push(course); - res.send(course); -}) - -app.get('/api/courses/:id', (req, res) => { //Metódo completo con devolución de errores - const course = courses.find(c => c.id === parseInt(req.params.id)); - if(!course) return res.status(404).send('the cours with the given ID was not found')// 404 - res.send(course) - -}) - -//Método PUT básico -app.put('/api/courses/:id', (req, res) => { - // Look up the course - // if not exist, return 404 - const course = courses.find(c => c.id === parseInt(req.params.id)); - if(!course) return res.status(404).send('the cours with the given ID was not found')// 404 - - // Validate - // If invalid, return 400 - const schema = { - name: Joi.string().min(3).required() - }; - const result = Joi.validate(req.body, schema); - if(result.error){ - return res.status(400).send(result.error.details[0].message) - } - - // Update courser - // return updated course - course.name = req.body.name; - res.send(course); -}) - -//Metodo delete, -app.delete('/api/courses/:id', (req, res) => { - //Look up - // if not exists, return 404 - const course = courses.find(c => c.id === parseInt(req.params.id)); - if(!course) return res.status(404).send('The course with the given Id was not found'); - - //Delete - const index = courses.indexOf(course) - courses.splice(index, 1); - - //Return the same course - res.send(course); -}) - +const users = require('../api/routes/users') +const upload = require('../api/routes/upload') +const time = require('../api/routes/time') +app.use(express.json()); +app.use('/api/users',users) +app.use('/api/upload', upload) +app.use('/api/time', time) //Port const port = process.env.PORT || 3000; //Variable de entorno que captura el puerto que esta desginado en el ordenador app.listen(port, () => console.log(`Listening on port ${port}...`)) \ No newline at end of file diff --git a/api/index.js b/api/index.js index d05770e5e..191fe4a0f 100644 --- a/api/index.js +++ b/api/index.js @@ -1 +1 @@ -//Conecta con BD \ No newline at end of file +//Conectar BD diff --git a/api/routes/time.js b/api/routes/time.js new file mode 100644 index 000000000..0db2afee2 --- /dev/null +++ b/api/routes/time.js @@ -0,0 +1,9 @@ +const express = require('express'); + +const router = express.Router(); + +router.get('/', (req,res) => { + res.send('Controlando el tiempo') +}); + +module.exports = router diff --git a/api/routes/upload.js b/api/routes/upload.js new file mode 100644 index 000000000..8d1d8be3c --- /dev/null +++ b/api/routes/upload.js @@ -0,0 +1,9 @@ +const express = require('express'); + +const router = express.Router(); + +router.get('/', (req,res) => { + res.send('Subiendo Archivos') +}); + +module.exports = router diff --git a/api/routes/users.js b/api/routes/users.js new file mode 100644 index 000000000..4a6ef5d8d --- /dev/null +++ b/api/routes/users.js @@ -0,0 +1,9 @@ +const express = require('express'); + +const router = express.Router(); + +router.get('/', (req,res) => { + res.send('Hola Usuarios') +}); + +module.exports = router diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..015d49916 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,1268 @@ +{ + "name": "sprint41", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==" + }, + "@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "requires": { + "@hapi/hoek": "^9.0.0" + } + }, + "@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "requires": { + "string-width": "^4.1.0" + } + }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + }, + "body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "requires": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + } + }, + "boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "requires": { + "fill-range": "^7.0.1" + } + }, + "bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + } + } + }, + "camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "requires": { + "ms": "2.0.0" + } + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + }, + "express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "requires": { + "pump": "^3.0.0" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "requires": { + "ini": "2.0.0" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "requires": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + } + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + }, + "is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "joi": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", + "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", + "requires": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "requires": { + "json-buffer": "3.0.0" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "requires": { + "package-json": "^6.3.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + }, + "mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" + }, + "mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "requires": { + "mime-db": "1.51.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + }, + "nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "requires": { + "ms": "^2.1.1" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + }, + "normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "requires": { + "ee-first": "1.1.1" + } + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "requires": { + "wrappy": "1" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + }, + "proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "requires": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + } + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==" + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" + }, + "raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "requires": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + } + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "requires": { + "picomatch": "^2.2.1" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "requires": { + "rc": "^1.2.8" + } + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + } + } + }, + "send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "requires": { + "nopt": "~1.0.10" + } + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + }, + "update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "requires": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "requires": { + "prepend-http": "^2.0.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "requires": { + "string-width": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 000000000..ee5246025 --- /dev/null +++ b/package.json @@ -0,0 +1,28 @@ +{ + "name": "sprint41", + "version": "1.0.0", + "description": "REST Server", + "main": "index.js", + "scripts": { + "test": "NO" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/molivaresr/nodeInitialDemo.git" + }, + "keywords": [ + "REST", + "Node" + ], + "author": "Mauricio Olivares", + "license": "MIT", + "bugs": { + "url": "https://github.com/molivaresr/nodeInitialDemo/issues" + }, + "homepage": "https://github.com/molivaresr/nodeInitialDemo#readme", + "dependencies": { + "express": "^4.17.2", + "joi": "^17.6.0", + "nodemon": "^2.0.15" + } +} From 6ed1eb3af82e68beb2dbccb6b337e3cf7057d553 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Tue, 1 Feb 2022 10:51:40 +0100 Subject: [PATCH 06/66] Updated Gitingore --- .gitignore | 2 +- api/database/README.md | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 api/database/README.md diff --git a/.gitignore b/.gitignore index f7baaa326..0965b4fb4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ node_modules/ -database/ + ##MacOs .DS_Store \ No newline at end of file diff --git a/api/database/README.md b/api/database/README.md new file mode 100644 index 000000000..ebaf36fda --- /dev/null +++ b/api/database/README.md @@ -0,0 +1,2 @@ +### Bases de datos +Lugar donde se almacena el JSON \ No newline at end of file From 8faa7a4ddeb9f9e69a6d0bda14c79b51f9bd282c Mon Sep 17 00:00:00 2001 From: Mauricio Date: Tue, 1 Feb 2022 13:00:34 +0100 Subject: [PATCH 07/66] Endpoint Users finalizado (N1Ex1) --- api/routes/users.js | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/api/routes/users.js b/api/routes/users.js index 4a6ef5d8d..86b7fd512 100644 --- a/api/routes/users.js +++ b/api/routes/users.js @@ -1,9 +1,38 @@ const express = require('express'); - +const req = require('express/lib/request'); const router = express.Router(); +const Joi = require('joi'); +const users = [] // "Persistencia" router.get('/', (req,res) => { - res.send('Hola Usuarios') + const user = { + id: users.length + 1, + name: 'Mauricio', + age: '54', + url: req.originalUrl + } + res.status(200).send(user) +}); + +//Create new user +router.post('/', (req, res) => { + const schema = Joi.object ({ + name: Joi.string().required().min(3), + age: Joi.number().greater(17).required(), + }); + + const {error, result} = schema.validate(req.body); + + if(error) return res.status(400).send(error.details[0].message); + + const user = { + id: users.length + 1, + name: req.body.name, + age: req.body.age, + url: req.originalUrl + } + users.push(user); + res.send(users); }); module.exports = router From 6fbce319aa7d53d0ea628dff0a000b446679c560 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Wed, 2 Feb 2022 12:22:57 +0100 Subject: [PATCH 08/66] Nivell 1 - Exercise 2 --- .gitignore | 2 +- api/app.js | 25 ++++- api/controllers/multerConf.js | 23 ++++ api/routes/upload.js | 9 -- api/routes/uploads.js | 32 ++++++ api/routes/users.js | 2 +- package-lock.json | 202 ++++++++++++++++++++++++++++++++++ package.json | 4 + 8 files changed, 284 insertions(+), 15 deletions(-) create mode 100644 api/controllers/multerConf.js delete mode 100644 api/routes/upload.js create mode 100644 api/routes/uploads.js diff --git a/.gitignore b/.gitignore index 0965b4fb4..14029d3fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ node_modules/ - +uploads/ ##MacOs .DS_Store \ No newline at end of file diff --git a/api/app.js b/api/app.js index fe2a0ca60..83cee3d76 100644 --- a/api/app.js +++ b/api/app.js @@ -1,14 +1,31 @@ //Crea servidor const express = require('express'); -const app = express (); +const multer = require('multer'); +const cors = require('cors'); +const bodyParser = require('body-parser'); +const morgan = require('morgan'); + const users = require('../api/routes/users') -const upload = require('../api/routes/upload') +const uploads = require('./routes/uploads') const time = require('../api/routes/time') +//Crea express app +const app = express (); + +//Activa CORS +app.use(cors()); + +//Otros middlewares +app.use(bodyParser.json()); +app.use(bodyParser.urlencoded({extended: true})); +app.use(morgan('dev')); app.use(express.json()); -app.use('/api/users',users) -app.use('/api/upload', upload) + +//Rutas +app.use('/api/users', users) +app.use('/api/uploads', uploads) app.use('/api/time', time) +//app.use(express.static(__dirname + '/public')); //Port const port = process.env.PORT || 3000; //Variable de entorno que captura el puerto que esta desginado en el ordenador app.listen(port, () => console.log(`Listening on port ${port}...`)) \ No newline at end of file diff --git a/api/controllers/multerConf.js b/api/controllers/multerConf.js new file mode 100644 index 000000000..2daa7f2bb --- /dev/null +++ b/api/controllers/multerConf.js @@ -0,0 +1,23 @@ +const multer = require('multer'); +const path = require('path') + +//Configurar Multer +const storage = multer.diskStorage({ + destination:'./uploads/', + limits:{ + files: 1, //Máximo 1 archivo + fieldSize: 2 * 1024 * 1024 + }, + filename: function (req, file, cb) { + cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname)) + } +}); +const imageFilter = (req,file,cb) => { + if(!file.originalname.match(/.(jpg|JPG|jpeg|JPEG|png|PNG|gif|GIF)$/)){ + req.fileValidationError='Sólo se permiten imagenes'; + return cb(new Error('Sólo se permiten imagenes'), false); + } + cb(null,true); +}; + +module.exports = {storage, imageFilter}; \ No newline at end of file diff --git a/api/routes/upload.js b/api/routes/upload.js deleted file mode 100644 index 8d1d8be3c..000000000 --- a/api/routes/upload.js +++ /dev/null @@ -1,9 +0,0 @@ -const express = require('express'); - -const router = express.Router(); - -router.get('/', (req,res) => { - res.send('Subiendo Archivos') -}); - -module.exports = router diff --git a/api/routes/uploads.js b/api/routes/uploads.js new file mode 100644 index 000000000..60ca06200 --- /dev/null +++ b/api/routes/uploads.js @@ -0,0 +1,32 @@ +const express = require('express'); +const router = express.Router(); +const multer = require('multer') +const {storage, imageFilter} = require('../controllers/multerConf') + +router.get('/', (req,res) => { + res.send('Subiendo Archivos') +}); + +router.post('/', (req,res) => { + let upload = multer({storage: storage, fileFilter: imageFilter}).single('profilePic'); + + upload(req,res, function(err) { + if(req.fileValidationError){ + return res.send(req.fileValidationError).status(400); + } + else if(!req.file) { + return res.send('Debes seleccionar una imagen').status(400); + } + else if(err instanceof multer.MulterError) { + return res.send(err).status(400); + } + else if (err){ + return res.send(err); + } + + res.send('Imagen subida').status(200) + }) + +}); + +module.exports = router diff --git a/api/routes/users.js b/api/routes/users.js index 86b7fd512..4e9fdf2ed 100644 --- a/api/routes/users.js +++ b/api/routes/users.js @@ -18,7 +18,7 @@ router.get('/', (req,res) => { router.post('/', (req, res) => { const schema = Joi.object ({ name: Joi.string().required().min(3), - age: Joi.number().greater(17).required(), + age: Joi.number().required().greater(17), }); const {error, result} = schema.validate(req.body); diff --git a/package-lock.json b/package-lock.json index 015d49916..91a0fc460 100644 --- a/package-lock.json +++ b/package-lock.json @@ -92,6 +92,11 @@ "picomatch": "^2.0.4" } }, + "append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -102,6 +107,21 @@ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + } + } + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -156,6 +176,11 @@ "fill-range": "^7.0.1" } }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, "bytes": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", @@ -270,6 +295,51 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "configstore": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", @@ -306,6 +376,20 @@ "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", @@ -658,6 +742,11 @@ "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, "joi": { "version": "17.6.0", "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", @@ -770,11 +859,73 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "requires": { + "minimist": "^1.2.5" + } + }, + "morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "requires": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, + "multer": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", + "requires": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "dependencies": { + "busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "requires": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + } + }, + "dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "requires": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + } + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -830,6 +981,11 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -838,6 +994,11 @@ "ee-first": "1.1.1" } }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -889,6 +1050,11 @@ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -959,6 +1125,17 @@ } } }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1074,6 +1251,11 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" }, + "streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -1084,6 +1266,11 @@ "strip-ansi": "^6.0.1" } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -1145,6 +1332,11 @@ "mime-types": "~2.1.24" } }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, "typedarray-to-buffer": { "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", @@ -1210,6 +1402,11 @@ "prepend-http": "^2.0.0" } }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -1259,6 +1456,11 @@ "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", diff --git a/package.json b/package.json index ee5246025..e705a14a7 100644 --- a/package.json +++ b/package.json @@ -21,8 +21,12 @@ }, "homepage": "https://github.com/molivaresr/nodeInitialDemo#readme", "dependencies": { + "body-parser": "^1.19.1", + "cors": "^2.8.5", "express": "^4.17.2", "joi": "^17.6.0", + "morgan": "^1.10.0", + "multer": "^1.4.4", "nodemon": "^2.0.15" } } From 87abc462462f374b499c5c8ecd76c5ca4e03ee5e Mon Sep 17 00:00:00 2001 From: molivaresr <69109375+molivaresr@users.noreply.github.com> Date: Thu, 10 Feb 2022 10:13:07 +0100 Subject: [PATCH 09/66] Update README.md --- README.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c6053bdd0..4e8abb0b6 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@

Welcome to Node Rest Server👋

+**Para iniciar servidor**. +``npm i``-> Instala modulos requeridos. +``node .\api\app.js``. + + Nivell 1 - Exercici 1 Crea un servidor amb Express que retorni a una petició GET a l'endpoint /user un json amb el teu nom, edat i la url des d'on es fa la petició. @@ -12,4 +17,4 @@ Creu un endpoint /time que rebi per POST com a paràmetre un JSON amb el nom d'u Nivell 3 - Exercici 1 -Afegeixi un middleware a l'endpoint anterior que retorni un HTTP Status 401 - Unauthorized si la capçalera de la petició no conté autenticació bàsica (usuari i contrasenya). \ No newline at end of file +Afegeixi un middleware a l'endpoint anterior que retorni un HTTP Status 401 - Unauthorized si la capçalera de la petició no conté autenticació bàsica (usuari i contrasenya). From 2bd9500d33b746d91c7252be0ce7c44f637d6513 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Feb 2022 10:16:11 +0100 Subject: [PATCH 10/66] Update readme --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 4e8abb0b6..5cf57004b 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,9 @@

Welcome to Node Rest Server👋

-**Para iniciar servidor**. +**Para iniciar servidor** + ``npm i``-> Instala modulos requeridos. -``node .\api\app.js``. +``node .\api\app.js``. Nivell 1 - Exercici 1 From 791e69569b8684f75567cc27c6a2b10df603773b Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Feb 2022 10:16:56 +0100 Subject: [PATCH 11/66] Updrdm --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5cf57004b..0ce7165ae 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ``npm i``-> Instala modulos requeridos. -``node .\api\app.js``. +``node .\api\app.js`` -> Inicializa servidor. Nivell 1 - Exercici 1 From 3895ab050a3616c0c79ad87b1fad912fcf83f19d Mon Sep 17 00:00:00 2001 From: molivaresr <69109375+molivaresr@users.noreply.github.com> Date: Mon, 14 Feb 2022 09:36:44 +0100 Subject: [PATCH 12/66] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 0ce7165ae..9b08100f9 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ ``npm i``-> Instala modulos requeridos. -``node .\api\app.js`` -> Inicializa servidor. +``npm start`` -> Inicializa servidor. Nivell 1 - Exercici 1 From 004a3a301e282802afdff71f6cde872486a9e0c4 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Mon, 14 Feb 2022 09:37:01 +0100 Subject: [PATCH 13/66] Update Package.json --- package.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index e705a14a7..a9fbe039c 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,8 @@ "description": "REST Server", "main": "index.js", "scripts": { - "test": "NO" + "test": "NO", + "start": "node ./api/app.js" }, "repository": { "type": "git", From 072ef4a9e4a065f5c599f80b24dcb0887e2aaa4e Mon Sep 17 00:00:00 2001 From: Mauricio Date: Mon, 14 Feb 2022 09:44:16 +0100 Subject: [PATCH 14/66] uploads --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 14029d3fa..5bf806752 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ node_modules/ -uploads/ ##MacOs .DS_Store \ No newline at end of file From bbd0672d855355c2223ded19321a8a2fc299d45e Mon Sep 17 00:00:00 2001 From: Mauricio Date: Mon, 14 Feb 2022 09:44:23 +0100 Subject: [PATCH 15/66] uploads --- uploads/img_example.jpg | Bin 0 -> 25490 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 uploads/img_example.jpg diff --git a/uploads/img_example.jpg b/uploads/img_example.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f095deb8e533f0c345178d093e898d85f2bc61eb GIT binary patch literal 25490 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 literal 0 HcmV?d00001 From 6c248aa1e7a8d923617a7fb73a1fddfd958ab119 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Mon, 14 Feb 2022 11:11:39 +0100 Subject: [PATCH 16/66] Coffe Time --- README.md | 31 +++++++++++++++++----------- api/index.js | 1 - api/models/players.js | 0 api/routes/{users.js => players.js} | 4 +++- public/index.js | 16 ++++++++++++++ uploads/img_example.jpg | Bin 25490 -> 0 bytes 6 files changed, 38 insertions(+), 14 deletions(-) delete mode 100644 api/index.js create mode 100644 api/models/players.js rename api/routes/{users.js => players.js} (94%) create mode 100644 public/index.js delete mode 100644 uploads/img_example.jpg diff --git a/README.md b/README.md index 9b08100f9..20deeb087 100644 --- a/README.md +++ b/README.md @@ -5,17 +5,24 @@ ``npm start`` -> Inicializa servidor. -Nivell 1 -- Exercici 1 -Crea un servidor amb Express que retorni a una petició GET a l'endpoint /user un json amb el teu nom, edat i la url des d'on es fa la petició. +Construirem una API que doni suport a un joc de daus ;) -- Exercici 2 -Afegeix un endpoint /upload per a pujar al servidor un arxiu de tipus png, jpg o gif que retorni un missatge d'error en cas que l'extensió de l'arxiu no coincideixi amb aquestes. +Al joc de daus s’hi juga amb dos daus de sis cares: -Nivell 2 -- Exercici 1 -Creu un endpoint /time que rebi per POST com a paràmetre un JSON amb el nom d'usuari i retorni un objecte JSON que contingui l'hora i data actual. Inclogui un middleware que afegeixi la capçalera Cache-control: no-cache. Habiliti CORS (Cross-Origin Resource Sharing) en les respostes, ja sigui mitjançant Express o mitjançant un altre middleware. - -Nivell 3 -- Exercici 1 -Afegeixi un middleware a l'endpoint anterior que retorni un HTTP Status 401 - Unauthorized si la capçalera de la petició no conté autenticació bàsica (usuari i contrasenya). +En cas que el resultat dels dos daus sigui 7 la partida es guanya, si no es perd. +Per poder jugar al joc t’has de registrar com a jugador amb un nom. Un jugador pot veure un llistat de totes les tirades que ha fet i el seu percentatge d’èxit. +Per poder realitzar una tirada, un usuari s’ha de registrar amb un nom no repetit. Al ser creat, se li assigna un identificador únic i una data de registre. +Si l’usuari ho desitja, pot no afegir cap nom i es dirà “ANÒNIM”. Pot haver-hi més d’un jugador “ANÒNIM”. +Cada jugador pot veure un llistat de totes les tirades que ha fet amb el valor de cada dau i si s’ha guanyat o no la partida. A més, pot saber el percentatge d’èxit de les tirades que ha realitzat. +No es pot eliminar una partida en concret, però si que es pot eliminar tot el llistat de tirades d'un jugador. El software ha de permetre llistar tots els jugadors que hi ha al sistema, el percentatge d’èxit de cada jugador i el percentatge d’èxit mig de tots els jugadors en el sistema. +El software ha de respectar els principals patrons de disseny. +Has de tenir en compte els següents detalls de construcció: +POST /players: crea un jugador +PUT /players: modifica el nom del jugador +POST /players/{id}/games: un jugador específic realitza una tirada +DELETE /players/{id}/games: elimina les tirades del jugador +GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits +GET /players/{id}/games: retorna el llistat de jugades per un jugador. +GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors +GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit +GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit \ No newline at end of file diff --git a/api/index.js b/api/index.js deleted file mode 100644 index 191fe4a0f..000000000 --- a/api/index.js +++ /dev/null @@ -1 +0,0 @@ -//Conectar BD diff --git a/api/models/players.js b/api/models/players.js new file mode 100644 index 000000000..e69de29bb diff --git a/api/routes/users.js b/api/routes/players.js similarity index 94% rename from api/routes/users.js rename to api/routes/players.js index 4e9fdf2ed..3d21d1874 100644 --- a/api/routes/users.js +++ b/api/routes/players.js @@ -4,6 +4,7 @@ const router = express.Router(); const Joi = require('joi'); const users = [] // "Persistencia" +// Obtener datos de usuario router.get('/', (req,res) => { const user = { id: users.length + 1, @@ -14,7 +15,8 @@ router.get('/', (req,res) => { res.status(200).send(user) }); -//Create new user + +// Create new player router.post('/', (req, res) => { const schema = Joi.object ({ name: Joi.string().required().min(3), diff --git a/public/index.js b/public/index.js new file mode 100644 index 000000000..d4207c105 --- /dev/null +++ b/public/index.js @@ -0,0 +1,16 @@ +const throwDices = () => { + return Math.round(Math.random() * (6-1) + 1); +} + +const diceOne = throwDices(); +const diceTwo = throwDices(); + +const game = diceOne + diceTwo; + +console.log(diceOne); +console.log(diceTwo); +console.log(game) + +if(game === 7) { + console.log('Haz Ganado') +} else console.log('No haz sacado 7'); \ No newline at end of file diff --git a/uploads/img_example.jpg b/uploads/img_example.jpg deleted file mode 100644 index f095deb8e533f0c345178d093e898d85f2bc61eb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25490 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 From 4d7ab39ba57a3edde2cc10847190fd19ccfc5e51 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Mon, 14 Feb 2022 13:04:23 +0100 Subject: [PATCH 17/66] EstructuraAPi y Server Creado --- .env | 1 + README.md | 3 + api/app.js | 18 ++- api/database/sqlconnect.js | 6 + api/models/server.js | 16 +++ api/routes/players.js | 1 - api/routes/time.js | 9 -- api/routes/uploads.js | 32 ------ package-lock.json | 223 ++++++++++++++++++++++++++++++++++++- package.json | 12 +- public/index.js | 5 + 11 files changed, 275 insertions(+), 51 deletions(-) create mode 100644 .env create mode 100644 api/database/sqlconnect.js create mode 100644 api/models/server.js delete mode 100644 api/routes/time.js delete mode 100644 api/routes/uploads.js diff --git a/.env b/.env new file mode 100644 index 000000000..022b4a705 --- /dev/null +++ b/.env @@ -0,0 +1 @@ +PORT = 8000 \ No newline at end of file diff --git a/README.md b/README.md index 20deeb087..abdf0cd39 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ Si l’usuari ho desitja, pot no afegir cap nom i es dirà “ANÒNIM”. Pot ha Cada jugador pot veure un llistat de totes les tirades que ha fet amb el valor de cada dau i si s’ha guanyat o no la partida. A més, pot saber el percentatge d’èxit de les tirades que ha realitzat. No es pot eliminar una partida en concret, però si que es pot eliminar tot el llistat de tirades d'un jugador. El software ha de permetre llistar tots els jugadors que hi ha al sistema, el percentatge d’èxit de cada jugador i el percentatge d’èxit mig de tots els jugadors en el sistema. El software ha de respectar els principals patrons de disseny. + +---- + Has de tenir en compte els següents detalls de construcció: POST /players: crea un jugador PUT /players: modifica el nom del jugador diff --git a/api/app.js b/api/app.js index 83cee3d76..5ec2077aa 100644 --- a/api/app.js +++ b/api/app.js @@ -1,7 +1,17 @@ //Crea servidor -const express = require('express'); -const multer = require('multer'); -const cors = require('cors'); +const dotenv = require('dotenv'); +const Server = require('./models/server'); + +/* import express from 'express'; +import cors from 'cros'; */ + +dotenv.config(); +const server = new Server() + +server.listen(); + +/* const multer = require('multer'); + const bodyParser = require('body-parser'); const morgan = require('morgan'); @@ -28,4 +38,4 @@ app.use('/api/time', time) //app.use(express.static(__dirname + '/public')); //Port const port = process.env.PORT || 3000; //Variable de entorno que captura el puerto que esta desginado en el ordenador -app.listen(port, () => console.log(`Listening on port ${port}...`)) \ No newline at end of file +app.listen(port, () => console.log(`Listening on port ${port}...`)) */ \ No newline at end of file diff --git a/api/database/sqlconnect.js b/api/database/sqlconnect.js new file mode 100644 index 000000000..e7def325d --- /dev/null +++ b/api/database/sqlconnect.js @@ -0,0 +1,6 @@ +import {Sequelize} from 'sequelize'; + + +// Conecta Base de Datos +const db = new Sequelize('dices','admin','123456',{host:'localhost',dialect: 'mysql'}); +export default db; \ No newline at end of file diff --git a/api/models/server.js b/api/models/server.js new file mode 100644 index 000000000..6b84fc7e4 --- /dev/null +++ b/api/models/server.js @@ -0,0 +1,16 @@ +const express = require('express'); + +class Server { + constructor(){ + this.app = express(); + this.port = process.env.PORT || '8000'; + } + + listen() { + this.app.listen(this.port, () => { + console.log(`Server to DiceGame running in ${this.port}`); + }) + } +} + +module.exports = Server; \ No newline at end of file diff --git a/api/routes/players.js b/api/routes/players.js index 3d21d1874..6d640c7fd 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -1,5 +1,4 @@ const express = require('express'); -const req = require('express/lib/request'); const router = express.Router(); const Joi = require('joi'); const users = [] // "Persistencia" diff --git a/api/routes/time.js b/api/routes/time.js deleted file mode 100644 index 0db2afee2..000000000 --- a/api/routes/time.js +++ /dev/null @@ -1,9 +0,0 @@ -const express = require('express'); - -const router = express.Router(); - -router.get('/', (req,res) => { - res.send('Controlando el tiempo') -}); - -module.exports = router diff --git a/api/routes/uploads.js b/api/routes/uploads.js deleted file mode 100644 index 60ca06200..000000000 --- a/api/routes/uploads.js +++ /dev/null @@ -1,32 +0,0 @@ -const express = require('express'); -const router = express.Router(); -const multer = require('multer') -const {storage, imageFilter} = require('../controllers/multerConf') - -router.get('/', (req,res) => { - res.send('Subiendo Archivos') -}); - -router.post('/', (req,res) => { - let upload = multer({storage: storage, fileFilter: imageFilter}).single('profilePic'); - - upload(req,res, function(err) { - if(req.fileValidationError){ - return res.send(req.fileValidationError).status(400); - } - else if(!req.file) { - return res.send('Debes seleccionar una imagen').status(400); - } - else if(err instanceof multer.MulterError) { - return res.send(err).status(400); - } - else if (err){ - return res.send(err); - } - - res.send('Imagen subida').status(200) - }) - -}); - -module.exports = router diff --git a/package-lock.json b/package-lock.json index 91a0fc460..00bb0be89 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,5 +1,5 @@ { - "name": "sprint41", + "name": "dicegame", "version": "1.0.0", "lockfileVersion": 1, "requires": true, @@ -48,6 +48,24 @@ "defer-to-connect": "^1.0.1" } }, + "@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "requires": { + "@types/ms": "*" + } + }, + "@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "@types/node": { + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==" + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -421,6 +439,11 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" }, + "denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -439,6 +462,16 @@ "is-obj": "^2.0.0" } }, + "dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==" + }, + "dottie": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", + "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" + }, "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", @@ -557,6 +590,14 @@ "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "optional": true }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "requires": { + "is-property": "^1.0.2" + } + }, "get-stream": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", @@ -654,6 +695,11 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" }, + "inflection": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", + "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==" + }, "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", @@ -732,6 +778,11 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", @@ -780,6 +831,16 @@ "package-json": "^6.3.0" } }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", @@ -867,6 +928,19 @@ "minimist": "^1.2.5" } }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-timezone": { + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", + "requires": { + "moment": ">= 2.9.0" + } + }, "morgan": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", @@ -926,6 +1000,55 @@ } } }, + "mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "requires": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "requires": { + "lru-cache": "^4.1.3" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + } + } + }, "negotiator": { "version": "0.6.2", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", @@ -1040,6 +1163,11 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", @@ -1064,6 +1192,11 @@ "ipaddr.js": "1.9.1" } }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -1168,6 +1301,11 @@ "lowercase-keys": "^1.0.0" } }, + "retry-as-promised": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-5.0.0.tgz", + "integrity": "sha512-6S+5LvtTl2ggBumk04hBo/4Uf6fRJUwIgunGZ7CYEBCeufGFW1Pu6ucUf/UskHeWOIsUcLOGLFXPig5tR5V1nA==" + }, "safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -1225,6 +1363,61 @@ } } }, + "seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + }, + "sequelize": { + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.16.1.tgz", + "integrity": "sha512-YFGqrwkmEhSbpZBxay5+PRKMiZNNUJzgIixCyFkLm9+/5Rqq5jBADEjTAC8RYHzwsOGNboYh18imXrYNCjBZCQ==", + "requires": { + "@types/debug": "^4.1.7", + "debug": "^4.3.3", + "dottie": "^2.0.2", + "inflection": "^1.13.1", + "lodash": "^4.17.21", + "moment": "^2.29.1", + "moment-timezone": "^0.5.34", + "pg-connection-string": "^2.5.0", + "retry-as-promised": "^5.0.0", + "semver": "^7.3.5", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.7.0", + "wkx": "^0.5.0" + }, + "dependencies": { + "debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==" + }, "serve-static": { "version": "1.14.2", "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", @@ -1246,6 +1439,11 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" }, + "sqlstring": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", + "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==" + }, "statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -1310,6 +1508,11 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, "touch": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", @@ -1412,6 +1615,16 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, + "validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -1425,6 +1638,14 @@ "string-width": "^4.0.0" } }, + "wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "requires": { + "@types/node": "*" + } + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index a9fbe039c..142f9d726 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "sprint41", + "name": "dicegame", "version": "1.0.0", - "description": "REST Server", + "description": "

Welcome to Node Rest Server👋

\r **Para iniciar servidor**", "main": "index.js", "scripts": { "test": "NO", @@ -24,10 +24,14 @@ "dependencies": { "body-parser": "^1.19.1", "cors": "^2.8.5", + "dotenv": "^16.0.0", "express": "^4.17.2", "joi": "^17.6.0", "morgan": "^1.10.0", "multer": "^1.4.4", - "nodemon": "^2.0.15" - } + "mysql2": "^2.3.3", + "nodemon": "^2.0.15", + "sequelize": "^6.16.1" + }, + "devDependencies": {} } diff --git a/public/index.js b/public/index.js index d4207c105..71ca2240a 100644 --- a/public/index.js +++ b/public/index.js @@ -2,6 +2,9 @@ const throwDices = () => { return Math.round(Math.random() * (6-1) + 1); } +//Nueva Partida +// + const diceOne = throwDices(); const diceTwo = throwDices(); @@ -13,4 +16,6 @@ console.log(game) if(game === 7) { console.log('Haz Ganado') + // Sumar a el jugador + // Sumar a el total de jugadas } else console.log('No haz sacado 7'); \ No newline at end of file From 618dbf84f6ae6ed8159aa4fdfbfc32ba1ec30abd Mon Sep 17 00:00:00 2001 From: Mauricio Date: Mon, 14 Feb 2022 13:05:28 +0100 Subject: [PATCH 18/66] EstructuraFinal --- api/app.js | 29 -------------------------- api/controllers/multerConf.js | 23 --------------------- api/routes/players.js | 39 ----------------------------------- 3 files changed, 91 deletions(-) delete mode 100644 api/controllers/multerConf.js diff --git a/api/app.js b/api/app.js index 5ec2077aa..567c1a227 100644 --- a/api/app.js +++ b/api/app.js @@ -10,32 +10,3 @@ const server = new Server() server.listen(); -/* const multer = require('multer'); - -const bodyParser = require('body-parser'); -const morgan = require('morgan'); - -const users = require('../api/routes/users') -const uploads = require('./routes/uploads') -const time = require('../api/routes/time') - -//Crea express app -const app = express (); - -//Activa CORS -app.use(cors()); - -//Otros middlewares -app.use(bodyParser.json()); -app.use(bodyParser.urlencoded({extended: true})); -app.use(morgan('dev')); -app.use(express.json()); - -//Rutas -app.use('/api/users', users) -app.use('/api/uploads', uploads) -app.use('/api/time', time) -//app.use(express.static(__dirname + '/public')); -//Port -const port = process.env.PORT || 3000; //Variable de entorno que captura el puerto que esta desginado en el ordenador -app.listen(port, () => console.log(`Listening on port ${port}...`)) */ \ No newline at end of file diff --git a/api/controllers/multerConf.js b/api/controllers/multerConf.js deleted file mode 100644 index 2daa7f2bb..000000000 --- a/api/controllers/multerConf.js +++ /dev/null @@ -1,23 +0,0 @@ -const multer = require('multer'); -const path = require('path') - -//Configurar Multer -const storage = multer.diskStorage({ - destination:'./uploads/', - limits:{ - files: 1, //Máximo 1 archivo - fieldSize: 2 * 1024 * 1024 - }, - filename: function (req, file, cb) { - cb(null, file.fieldname + '-' + Date.now() + path.extname(file.originalname)) - } -}); -const imageFilter = (req,file,cb) => { - if(!file.originalname.match(/.(jpg|JPG|jpeg|JPEG|png|PNG|gif|GIF)$/)){ - req.fileValidationError='Sólo se permiten imagenes'; - return cb(new Error('Sólo se permiten imagenes'), false); - } - cb(null,true); -}; - -module.exports = {storage, imageFilter}; \ No newline at end of file diff --git a/api/routes/players.js b/api/routes/players.js index 6d640c7fd..e69de29bb 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -1,39 +0,0 @@ -const express = require('express'); -const router = express.Router(); -const Joi = require('joi'); -const users = [] // "Persistencia" - -// Obtener datos de usuario -router.get('/', (req,res) => { - const user = { - id: users.length + 1, - name: 'Mauricio', - age: '54', - url: req.originalUrl - } - res.status(200).send(user) -}); - - -// Create new player -router.post('/', (req, res) => { - const schema = Joi.object ({ - name: Joi.string().required().min(3), - age: Joi.number().required().greater(17), - }); - - const {error, result} = schema.validate(req.body); - - if(error) return res.status(400).send(error.details[0].message); - - const user = { - id: users.length + 1, - name: req.body.name, - age: req.body.age, - url: req.originalUrl - } - users.push(user); - res.send(users); -}); - -module.exports = router From 3bd65113babb7c5aeca63c580c874030dbfbd695 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Tue, 15 Feb 2022 13:01:49 +0100 Subject: [PATCH 19/66] Estructured 2.0 --- Enlaces.md | 4 ++- api/app.js | 7 ++--- .../players.js => config/mongoconnect.js} | 0 api/{models => config}/server.js | 1 - api/config/sqlconnect.js | 23 ++++++++++++++ api/controllers/README.md | 3 +- api/controllers/newGame.js | 1 + api/controllers/newPlayer.js | 0 api/controllers/players.js | 0 api/database/sqlconnect.js | 6 ---- api/models/player.js | 31 +++++++++++++++++++ public/index.js | 2 -- 12 files changed, 63 insertions(+), 15 deletions(-) rename api/{models/players.js => config/mongoconnect.js} (100%) rename api/{models => config}/server.js (99%) create mode 100644 api/config/sqlconnect.js create mode 100644 api/controllers/newGame.js create mode 100644 api/controllers/newPlayer.js create mode 100644 api/controllers/players.js delete mode 100644 api/database/sqlconnect.js create mode 100644 api/models/player.js diff --git a/Enlaces.md b/Enlaces.md index 3b9dd7619..c6736c06a 100644 --- a/Enlaces.md +++ b/Enlaces.md @@ -1,2 +1,4 @@ 1. [Enlace estructura proyecto Node y Express ](https://medium.com/williambastidasblog/estructura-de-una-api-rest-con-nodejs-express-y-mongodb-cdd97637b18b) -2. [Validación de archivos](https://pharos.sh/cargue-la-gestion-de-archivos-en-node-js-con-express-y-multer/) \ No newline at end of file +2. [Validación de archivos](https://pharos.sh/cargue-la-gestion-de-archivos-en-node-js-con-express-y-multer/) +3. [Arquit ApiRest](https://juanda.gitbooks.io/webapps/content/api/arquitectura-api-rest.html) +4. [Secure Rest API Rest](https://www.toptal.com/nodejs/secure-rest-api-in-nodejs) diff --git a/api/app.js b/api/app.js index 567c1a227..e947d8136 100644 --- a/api/app.js +++ b/api/app.js @@ -1,12 +1,11 @@ //Crea servidor const dotenv = require('dotenv'); -const Server = require('./models/server'); - -/* import express from 'express'; -import cors from 'cros'; */ +const Server = require('./config/server'); +const connectDb = require('./config/sqlconnect') dotenv.config(); const server = new Server() +connectDb() server.listen(); diff --git a/api/models/players.js b/api/config/mongoconnect.js similarity index 100% rename from api/models/players.js rename to api/config/mongoconnect.js diff --git a/api/models/server.js b/api/config/server.js similarity index 99% rename from api/models/server.js rename to api/config/server.js index 6b84fc7e4..110dd730b 100644 --- a/api/models/server.js +++ b/api/config/server.js @@ -12,5 +12,4 @@ class Server { }) } } - module.exports = Server; \ No newline at end of file diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js new file mode 100644 index 000000000..b38a7bb2e --- /dev/null +++ b/api/config/sqlconnect.js @@ -0,0 +1,23 @@ +const {Sequelize} = require('sequelize'); +//const mysql = require('mysql2'); + +// Conecta Base de Datos +const db = new Sequelize('optica','root','123456789',{host:'localhost',dialect: 'mysql'}); + +db.query("CREATE DATABASE IF NOT EXISTS dices", function (err){ + if(err) throw err; + console.log("Database Created") +}) + +async function connectDb () { + try { + await db.authenticate(); + console.log('Connection to database has been established successfully. By Sequelize'); + + } catch (error) { + console.error('Unable to connect to the database:', error); + } + +} + +module.exports = connectDb, {db}; diff --git a/api/controllers/README.md b/api/controllers/README.md index 0531c1b67..c2c19c1e3 100644 --- a/api/controllers/README.md +++ b/api/controllers/README.md @@ -1,2 +1,3 @@ ### Controladores -Archivo controlador de ejemplo. En el programamos las acciones y operaciones sobre nuestra base de datos, en este caso para obtener los datos de un usuario. \ No newline at end of file +Archivo controlador de ejemplo. +En el programamos las acciones y operaciones sobre nuestra base de datos, en este caso para obtener los datos de un usuario. \ No newline at end of file diff --git a/api/controllers/newGame.js b/api/controllers/newGame.js new file mode 100644 index 000000000..78480778e --- /dev/null +++ b/api/controllers/newGame.js @@ -0,0 +1 @@ +const db = require('../database'); \ No newline at end of file diff --git a/api/controllers/newPlayer.js b/api/controllers/newPlayer.js new file mode 100644 index 000000000..e69de29bb diff --git a/api/controllers/players.js b/api/controllers/players.js new file mode 100644 index 000000000..e69de29bb diff --git a/api/database/sqlconnect.js b/api/database/sqlconnect.js deleted file mode 100644 index e7def325d..000000000 --- a/api/database/sqlconnect.js +++ /dev/null @@ -1,6 +0,0 @@ -import {Sequelize} from 'sequelize'; - - -// Conecta Base de Datos -const db = new Sequelize('dices','admin','123456',{host:'localhost',dialect: 'mysql'}); -export default db; \ No newline at end of file diff --git a/api/models/player.js b/api/models/player.js new file mode 100644 index 000000000..0a41b4aa1 --- /dev/null +++ b/api/models/player.js @@ -0,0 +1,31 @@ +const {Sequelize} = require("sequelize"); + +const Player = Sequelize.define('Player', { + _id: { + type: Sequelize.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + playerName: { + type: Sequelize.STRING, + allowNull: false + }, + totalGames:{ + type: Sequelize.INTEGER, + defaultValue: 0, + }, + winGames:{ + type: Sequelize.INTEGER, + defaultValue: 0, + + }, + winRate:{ + type: Sequelize.DECIMAL(10,2), + defaultValue: 0 + } + },{ + timestamp: true, + + }); + + module.exports = Player; \ No newline at end of file diff --git a/public/index.js b/public/index.js index 71ca2240a..e9b16705f 100644 --- a/public/index.js +++ b/public/index.js @@ -3,8 +3,6 @@ const throwDices = () => { } //Nueva Partida -// - const diceOne = throwDices(); const diceTwo = throwDices(); From fc56255938d538c0289f04d71ef8bda71eb49037 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 17 Feb 2022 10:41:02 +0100 Subject: [PATCH 20/66] CoffeTime 1702 --- README.md | 7 +++++-- api/app.js | 5 ++--- api/config/server.js | 8 +++++++- api/config/sqlconnect.js | 4 ++-- api/models/diceRolls.js | 0 api/models/player.js | 1 - api/routes/players.js | 28 ++++++++++++++++++++++++++++ api/routes/rankings.js | 19 +++++++++++++++++++ 8 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 api/models/diceRolls.js create mode 100644 api/routes/rankings.js diff --git a/README.md b/README.md index abdf0cd39..bd7ed8204 100644 --- a/README.md +++ b/README.md @@ -20,12 +20,15 @@ El software ha de respectar els principals patrons de disseny. ---- Has de tenir en compte els següents detalls de construcció: + POST /players: crea un jugador PUT /players: modifica el nom del jugador -POST /players/{id}/games: un jugador específic realitza una tirada DELETE /players/{id}/games: elimina les tirades del jugador -GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits GET /players/{id}/games: retorna el llistat de jugades per un jugador. + +POST /players/{id}/games: un jugador específic realitza una tirada + +GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit \ No newline at end of file diff --git a/api/app.js b/api/app.js index e947d8136..4f3d078d1 100644 --- a/api/app.js +++ b/api/app.js @@ -6,6 +6,5 @@ const connectDb = require('./config/sqlconnect') dotenv.config(); const server = new Server() connectDb() - -server.listen(); - +//server.route(); +server.listen(); \ No newline at end of file diff --git a/api/config/server.js b/api/config/server.js index 110dd730b..9f05b8b2e 100644 --- a/api/config/server.js +++ b/api/config/server.js @@ -1,11 +1,17 @@ const express = require('express'); +const players = require('../routes/players') +const ranking = require('../routes/rankings') class Server { constructor(){ this.app = express(); this.port = process.env.PORT || '8000'; + this.route(); + } + route() { + this.app.use('/api/players/', players); + this.app.use('/api/players/', ranking); } - listen() { this.app.listen(this.port, () => { console.log(`Server to DiceGame running in ${this.port}`); diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js index b38a7bb2e..0d706b686 100644 --- a/api/config/sqlconnect.js +++ b/api/config/sqlconnect.js @@ -2,9 +2,9 @@ const {Sequelize} = require('sequelize'); //const mysql = require('mysql2'); // Conecta Base de Datos -const db = new Sequelize('optica','root','123456789',{host:'localhost',dialect: 'mysql'}); +const db = new Sequelize('','root','123456789',{host:'localhost',dialect: 'mysql'}); -db.query("CREATE DATABASE IF NOT EXISTS dices", function (err){ +db.query("CREATE DATABASE IF NOT EXISTS dice", function (err){ if(err) throw err; console.log("Database Created") }) diff --git a/api/models/diceRolls.js b/api/models/diceRolls.js new file mode 100644 index 000000000..e69de29bb diff --git a/api/models/player.js b/api/models/player.js index 0a41b4aa1..f22bc2978 100644 --- a/api/models/player.js +++ b/api/models/player.js @@ -25,7 +25,6 @@ const Player = Sequelize.define('Player', { } },{ timestamp: true, - }); module.exports = Player; \ No newline at end of file diff --git a/api/routes/players.js b/api/routes/players.js index e69de29bb..428b933e9 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -0,0 +1,28 @@ +const express = require('express'); +const router = express.Router(); + +router.post('/', (req, res) => { + res.status(200).send('Creando Jugador') +}); + +router.put('/', (req, res) => { + res.status(201).send('modificando Jugador') +}); + +router.get('/:id/', (req,res) => { + res.status(200).send('Mostrando un Jugador X_ID') +}); + +router.post('/:id/games/', (req,res) => { + res.status(200).send('Guardando Jugada') +}) + +router.delete('/:id/games/', (req,res) => { + res.status(200).send('Eliminado jugadas de Jugador X_ID') +}) + +router.get('/:id/games/', (req, res) => { + res.status(201).send('Listando Jugadas de Jugador X_ID') +}); + +module.exports = router \ No newline at end of file diff --git a/api/routes/rankings.js b/api/routes/rankings.js new file mode 100644 index 000000000..f92a3f853 --- /dev/null +++ b/api/routes/rankings.js @@ -0,0 +1,19 @@ +const express = require('express'); +const router = express.Router(); + +router.get('/', (req, res) => { + res.status(200).send('Listando todos las jugadas') +}); + +router.get('/ranking/', (req, res) => { + res.status(200).send('Ranking de Jugadas') +}); + +router.get('/ranking/looser/', (req, res) => { + res.status(200).send('Última posición') +}); + +router.get('/ranking/winner/', (req, res) => { + res.status(200).send('Primera Posición') +}); +module.exports = router; \ No newline at end of file From 88cb20d44d6d754a4be36640582a031907c317cf Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 17 Feb 2022 13:05:48 +0100 Subject: [PATCH 21/66] conectando BD --- api/app.js | 1 + api/config/sqlconnect.js | 7 ++++-- api/controllers/newGame.js | 1 - api/controllers/newPlayer.js | 0 api/controllers/players.js | 43 ++++++++++++++++++++++++++++++++++++ api/models/player.js | 19 ++++++++++------ api/routes/players.js | 26 +++++++--------------- 7 files changed, 69 insertions(+), 28 deletions(-) delete mode 100644 api/controllers/newGame.js delete mode 100644 api/controllers/newPlayer.js diff --git a/api/app.js b/api/app.js index 4f3d078d1..96da000cf 100644 --- a/api/app.js +++ b/api/app.js @@ -5,6 +5,7 @@ const connectDb = require('./config/sqlconnect') dotenv.config(); const server = new Server() + connectDb() //server.route(); server.listen(); \ No newline at end of file diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js index 0d706b686..376a77beb 100644 --- a/api/config/sqlconnect.js +++ b/api/config/sqlconnect.js @@ -19,5 +19,8 @@ async function connectDb () { } } - -module.exports = connectDb, {db}; +const saveData = { + player: require('../models/player'), + //game: require('../models/diceRolls') +} +module.exports = connectDb, saveData; diff --git a/api/controllers/newGame.js b/api/controllers/newGame.js deleted file mode 100644 index 78480778e..000000000 --- a/api/controllers/newGame.js +++ /dev/null @@ -1 +0,0 @@ -const db = require('../database'); \ No newline at end of file diff --git a/api/controllers/newPlayer.js b/api/controllers/newPlayer.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/api/controllers/players.js b/api/controllers/players.js index e69de29bb..0891bd389 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -0,0 +1,43 @@ +const {request, response} = require('express'); +const Player = require('../models/player'); +const saveData = require('../config/sqlconnect') + +class Players { + postPlayer (req, res) { + const {body} = req; + try { + const player = new saveData(body); + player.save(); + res.json({player}) + } + catch (error) { + console.log(error); + res.status(500).send('Llamar al administrador') + } + res.status(200).send('Creando Jugador') + + }; + + putPlayer (req, res) { + res.status(201).send('modificando Jugador') + }; + + getPlayer (req,res) { + res.status(200).send('Mostrando un Jugador X_ID') + }; + + postRoll (req,res) { + res.status(200).send('Guardando Jugada') + }; + + delPlayerRoll (req,res) { + res.status(200).send('Eliminado jugadas de Jugador X_ID') + }; + + getPlayerRoll (req, res) { + res.status(201).send('Listando Jugadas de Jugador X_ID') + }; + +} + +module.exports = Players \ No newline at end of file diff --git a/api/models/player.js b/api/models/player.js index f22bc2978..73c28da12 100644 --- a/api/models/player.js +++ b/api/models/player.js @@ -1,6 +1,6 @@ const {Sequelize} = require("sequelize"); -const Player = Sequelize.define('Player', { +const atributos = { _id: { type: Sequelize.INTEGER, primaryKey: true, @@ -9,8 +9,8 @@ const Player = Sequelize.define('Player', { playerName: { type: Sequelize.STRING, allowNull: false - }, - totalGames:{ + } + /* totalGames:{ type: Sequelize.INTEGER, defaultValue: 0, }, @@ -22,9 +22,14 @@ const Player = Sequelize.define('Player', { winRate:{ type: Sequelize.DECIMAL(10,2), defaultValue: 0 - } - },{ + } */ + } + const options = { timestamp: true, - }); + createadAt: true, + updatedAt: true + }; + +const Player = Sequelize.define('Player', atributos, options) - module.exports = Player; \ No newline at end of file +module.exports = Player; \ No newline at end of file diff --git a/api/routes/players.js b/api/routes/players.js index 428b933e9..e2580cd36 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -1,28 +1,18 @@ const express = require('express'); const router = express.Router(); +const Players = require('../controllers/players') +const players = new Players() -router.post('/', (req, res) => { - res.status(200).send('Creando Jugador') -}); +router.post('/', players.postPlayer); -router.put('/', (req, res) => { - res.status(201).send('modificando Jugador') -}); +router.put('/', players.putPlayer); -router.get('/:id/', (req,res) => { - res.status(200).send('Mostrando un Jugador X_ID') -}); +router.get('/:id/', players.getPlayer); -router.post('/:id/games/', (req,res) => { - res.status(200).send('Guardando Jugada') -}) +router.post('/:id/games/', players.postRoll) -router.delete('/:id/games/', (req,res) => { - res.status(200).send('Eliminado jugadas de Jugador X_ID') -}) +router.delete('/:id/games/', players.delPlayerRoll) -router.get('/:id/games/', (req, res) => { - res.status(201).send('Listando Jugadas de Jugador X_ID') -}); +router.get('/:id/games/', players.getPlayerRoll); module.exports = router \ No newline at end of file From d16fcd1571902f431bab7ed12506adc7dd44a22c Mon Sep 17 00:00:00 2001 From: molivaresr Date: Fri, 18 Feb 2022 11:18:30 +0100 Subject: [PATCH 22/66] No avance --- api/config/sqlconnect.js | 7 +- package-lock.json | 2254 +++++++++++++++++++++++++++++++++++++- package.json | 3 +- 3 files changed, 2251 insertions(+), 13 deletions(-) diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js index 376a77beb..14efd3ec4 100644 --- a/api/config/sqlconnect.js +++ b/api/config/sqlconnect.js @@ -19,8 +19,5 @@ async function connectDb () { } } -const saveData = { - player: require('../models/player'), - //game: require('../models/diceRolls') -} -module.exports = connectDb, saveData; + +module.exports = connectDb; diff --git a/package-lock.json b/package-lock.json index 00bb0be89..390a6f7d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,2250 @@ { "name": "dicegame", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "dicegame", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "body-parser": "^1.19.1", + "cors": "^2.8.5", + "dotenv": "^16.0.0", + "express": "^4.17.2", + "joi": "^17.6.0", + "morgan": "^1.10.0", + "multer": "^1.4.4", + "mysql2": "^2.3.3", + "nodemon": "^2.0.15", + "sequelize": "^6.16.1" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "node_modules/@types/node": { + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "dependencies": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + }, + "node_modules/denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", + "engines": { + "node": ">=12" + } + }, + "node_modules/dottie": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", + "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflection": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", + "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==", + "engines": [ + "node >= 0.4.0" + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/joi": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", + "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/multer": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/multer/node_modules/busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "dependencies": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/multer/node_modules/dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "dependencies": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "dependencies": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "dependencies": { + "lru-cache": "^4.1.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/named-placeholders/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/named-placeholders/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dependencies": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry-as-promised": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-5.0.0.tgz", + "integrity": "sha512-6S+5LvtTl2ggBumk04hBo/4Uf6fRJUwIgunGZ7CYEBCeufGFW1Pu6ucUf/UskHeWOIsUcLOGLFXPig5tR5V1nA==" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + }, + "node_modules/sequelize": { + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.16.1.tgz", + "integrity": "sha512-YFGqrwkmEhSbpZBxay5+PRKMiZNNUJzgIixCyFkLm9+/5Rqq5jBADEjTAC8RYHzwsOGNboYh18imXrYNCjBZCQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "dependencies": { + "@types/debug": "^4.1.7", + "debug": "^4.3.3", + "dottie": "^2.0.2", + "inflection": "^1.13.1", + "lodash": "^4.17.21", + "moment": "^2.29.1", + "moment-timezone": "^0.5.34", + "pg-connection-string": "^2.5.0", + "retry-as-promised": "^5.0.0", + "semver": "^7.3.5", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.7.0", + "wkx": "^0.5.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "ibm_db": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-hstore": { + "optional": true + }, + "snowflake-sdk": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/sequelize/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sequelize/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/sequelize/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + }, + "node_modules/sqlstring": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", + "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + }, "dependencies": { "@hapi/hoek": { "version": "9.2.1", @@ -1454,6 +3696,11 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -1464,11 +3711,6 @@ "strip-ansi": "^6.0.1" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", diff --git a/package.json b/package.json index 142f9d726..60dc1c188 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,5 @@ "mysql2": "^2.3.3", "nodemon": "^2.0.15", "sequelize": "^6.16.1" - }, - "devDependencies": {} + } } From d836530d59170d4fbe7e56950c77b606789f1b21 Mon Sep 17 00:00:00 2001 From: molivaresr Date: Sat, 19 Feb 2022 22:42:17 +0100 Subject: [PATCH 23/66] BD conectada --- api/config/server.js | 2 +- api/config/sqlconnect.js | 28 +-- api/models/player.js | 21 +-- package-lock.json | 384 +++++++++++++++++++++++++++++++-------- package.json | 6 +- 5 files changed, 337 insertions(+), 104 deletions(-) diff --git a/api/config/server.js b/api/config/server.js index 9f05b8b2e..8fcdf1813 100644 --- a/api/config/server.js +++ b/api/config/server.js @@ -5,7 +5,7 @@ const ranking = require('../routes/rankings') class Server { constructor(){ this.app = express(); - this.port = process.env.PORT || '8000'; + this.port = process.env.PORT || '3000'; this.route(); } route() { diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js index 14efd3ec4..efd82be6f 100644 --- a/api/config/sqlconnect.js +++ b/api/config/sqlconnect.js @@ -1,23 +1,25 @@ const {Sequelize} = require('sequelize'); -//const mysql = require('mysql2'); +const PlayerModel = require('../models/player') +const mysql = require('mysql2'); // Conecta Base de Datos -const db = new Sequelize('','root','123456789',{host:'localhost',dialect: 'mysql'}); - -db.query("CREATE DATABASE IF NOT EXISTS dice", function (err){ - if(err) throw err; - console.log("Database Created") -}) +const sequelize = new Sequelize('dice','root','123456789',{host:'localhost',dialect: 'mysql'}); async function connectDb () { - try { - await db.authenticate(); - console.log('Connection to database has been established successfully. By Sequelize'); - + try { + const connection = mysql.createConnection({host:'localhost', user:'root', password:'123456789'}); + connection.query("CREATE DATABASE IF NOT EXISTS film", function (err){ + if(err) throw err; + }) } catch (error) { console.error('Unable to connect to the database:', error); } - } -module.exports = connectDb; +const Player = PlayerModel(sequelize, Sequelize) + +sequelize.sync() + .then(() => console.log('Tablas sincronizadas')) + .catch((error) => console.error('Error en la sincronización de Tablas',error)) + +module.exports = connectDb; \ No newline at end of file diff --git a/api/models/player.js b/api/models/player.js index 73c28da12..d7b6c80b1 100644 --- a/api/models/player.js +++ b/api/models/player.js @@ -1,26 +1,27 @@ -const {Sequelize} = require("sequelize"); +//const Player = Sequelize.define('Player', atributos, options) -const atributos = { +module.exports = (sequelize, type) => { + const atributos = { _id: { - type: Sequelize.INTEGER, + type: type.INTEGER, primaryKey: true, autoIncrement: true, }, playerName: { - type: Sequelize.STRING, + type: type.STRING, allowNull: false } /* totalGames:{ - type: Sequelize.INTEGER, + type: type.INTEGER, defaultValue: 0, }, winGames:{ - type: Sequelize.INTEGER, + type: type.INTEGER, defaultValue: 0, }, winRate:{ - type: Sequelize.DECIMAL(10,2), + type: type.DECIMAL(10,2), defaultValue: 0 } */ } @@ -29,7 +30,5 @@ const atributos = { createadAt: true, updatedAt: true }; - -const Player = Sequelize.define('Player', atributos, options) - -module.exports = Player; \ No newline at end of file + return sequelize.define('players',atributos,options) +} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 390a6f7d2..45cf830cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,8 +17,10 @@ "morgan": "^1.10.0", "multer": "^1.4.4", "mysql2": "^2.3.3", - "nodemon": "^2.0.15", "sequelize": "^6.16.1" + }, + "devDependencies": { + "nodemon": "^2.0.15" } }, "node_modules/@hapi/hoek": { @@ -56,6 +58,7 @@ "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, "engines": { "node": ">=6" } @@ -64,6 +67,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, "dependencies": { "defer-to-connect": "^1.0.1" }, @@ -92,7 +96,8 @@ "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "node_modules/accepts": { "version": "1.3.7", @@ -110,6 +115,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, "dependencies": { "string-width": "^4.1.0" } @@ -118,6 +124,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -126,6 +133,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -140,6 +148,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "dependencies": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -161,7 +170,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/basic-auth": { "version": "2.0.1", @@ -183,6 +193,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, "engines": { "node": ">=8" } @@ -211,6 +222,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, "dependencies": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -232,6 +244,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -241,6 +254,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "dependencies": { "fill-range": "^7.0.1" }, @@ -265,6 +279,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -282,6 +297,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -296,6 +312,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, "engines": { "node": ">=8" } @@ -304,6 +321,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, "engines": { "node": ">=10" }, @@ -315,6 +333,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -330,6 +349,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -338,6 +358,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -349,6 +370,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "funding": [ { "type": "individual", @@ -374,12 +396,14 @@ "node_modules/ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "node_modules/cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, "engines": { "node": ">=6" }, @@ -391,6 +415,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, "dependencies": { "mimic-response": "^1.0.0" } @@ -399,6 +424,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -409,12 +435,14 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/concat-stream": { "version": "1.6.2", @@ -466,6 +494,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, "dependencies": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -531,6 +560,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, "engines": { "node": ">=8" } @@ -547,6 +577,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, "dependencies": { "mimic-response": "^1.0.0" }, @@ -558,6 +589,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, "engines": { "node": ">=4.0.0" } @@ -565,7 +597,8 @@ "node_modules/defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true }, "node_modules/denque": { "version": "2.0.1", @@ -592,6 +625,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, "dependencies": { "is-obj": "^2.0.0" }, @@ -615,7 +649,8 @@ "node_modules/duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true }, "node_modules/ee-first": { "version": "1.1.1", @@ -625,7 +660,8 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", @@ -639,6 +675,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "dependencies": { "once": "^1.4.0" } @@ -647,6 +684,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, "engines": { "node": ">=8" } @@ -708,6 +746,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "dependencies": { "to-regex-range": "^5.0.1" }, @@ -752,6 +791,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "hasInstallScript": true, "optional": true, "os": [ @@ -773,6 +813,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "dependencies": { "pump": "^3.0.0" }, @@ -784,6 +825,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "dependencies": { "is-glob": "^4.0.1" }, @@ -795,6 +837,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, "dependencies": { "ini": "2.0.0" }, @@ -809,6 +852,7 @@ "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, "dependencies": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -829,12 +873,14 @@ "node_modules/graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, "engines": { "node": ">=4" } @@ -843,6 +889,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, "engines": { "node": ">=8" } @@ -850,7 +897,8 @@ "node_modules/http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true }, "node_modules/http-errors": { "version": "1.8.1", @@ -881,12 +929,14 @@ "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true }, "node_modules/import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, "engines": { "node": ">=4" } @@ -895,6 +945,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -916,6 +967,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, "engines": { "node": ">=10" } @@ -932,6 +984,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "dependencies": { "binary-extensions": "^2.0.0" }, @@ -943,6 +996,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "dependencies": { "ci-info": "^2.0.0" }, @@ -954,6 +1008,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -962,6 +1017,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, "engines": { "node": ">=8" } @@ -970,6 +1026,7 @@ "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "dependencies": { "is-extglob": "^2.1.1" }, @@ -981,6 +1038,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -996,6 +1054,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true, "engines": { "node": ">=10" }, @@ -1007,6 +1066,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, "engines": { "node": ">=0.12.0" } @@ -1015,6 +1075,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, "engines": { "node": ">=8" } @@ -1023,6 +1084,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1035,12 +1097,14 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "node_modules/is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true }, "node_modules/isarray": { "version": "0.0.1", @@ -1062,12 +1126,14 @@ "node_modules/json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, "dependencies": { "json-buffer": "3.0.0" } @@ -1076,6 +1142,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, "dependencies": { "package-json": "^6.3.0" }, @@ -1097,6 +1164,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -1116,6 +1184,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -1130,6 +1199,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -1189,6 +1259,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, "engines": { "node": ">=4" } @@ -1197,6 +1268,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1375,6 +1447,7 @@ "version": "2.0.15", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "dev": true, "hasInstallScript": true, "dependencies": { "chokidar": "^3.5.2", @@ -1403,6 +1476,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { "ms": "^2.1.1" } @@ -1410,12 +1484,14 @@ "node_modules/nodemon/node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true }, "node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, "dependencies": { "abbrev": "1" }, @@ -1430,6 +1506,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -1438,6 +1515,7 @@ "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, "engines": { "node": ">=8" } @@ -1473,6 +1551,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -1481,6 +1560,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, "engines": { "node": ">=6" } @@ -1489,6 +1569,7 @@ "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, "dependencies": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", @@ -1503,6 +1584,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -1529,6 +1611,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, "engines": { "node": ">=8.6" }, @@ -1540,6 +1623,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, "engines": { "node": ">=4" } @@ -1569,12 +1653,14 @@ "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true }, "node_modules/pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -1584,6 +1670,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, "dependencies": { "escape-goat": "^2.0.0" }, @@ -1628,6 +1715,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -1641,7 +1729,8 @@ "node_modules/rc/node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true }, "node_modules/readable-stream": { "version": "1.1.14", @@ -1658,6 +1747,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "dependencies": { "picomatch": "^2.2.1" }, @@ -1669,6 +1759,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, "dependencies": { "rc": "^1.2.8" }, @@ -1680,6 +1771,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, "dependencies": { "rc": "^1.2.8" }, @@ -1691,6 +1783,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, "dependencies": { "lowercase-keys": "^1.0.0" } @@ -1728,6 +1821,7 @@ "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, "bin": { "semver": "bin/semver" } @@ -1736,6 +1830,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, "dependencies": { "semver": "^6.3.0" }, @@ -1747,6 +1842,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, "bin": { "semver": "bin/semver.js" } @@ -1906,7 +2002,8 @@ "node_modules/signal-exit": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true }, "node_modules/sqlstring": { "version": "2.3.2", @@ -1941,6 +2038,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1954,6 +2052,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -1965,6 +2064,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -1973,6 +2073,7 @@ "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "dependencies": { "has-flag": "^3.0.0" }, @@ -1984,6 +2085,7 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, "engines": { "node": ">=6" } @@ -1992,6 +2094,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "dependencies": { "is-number": "^7.0.0" }, @@ -2016,6 +2119,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, "dependencies": { "nopt": "~1.0.10" }, @@ -2027,6 +2131,7 @@ "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, "engines": { "node": ">=10" }, @@ -2055,6 +2160,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "dependencies": { "is-typedarray": "^1.0.0" } @@ -2062,12 +2168,14 @@ "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, "node_modules/unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -2087,6 +2195,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, "dependencies": { "boxen": "^5.0.0", "chalk": "^4.1.0", @@ -2114,6 +2223,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -2128,6 +2238,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, "dependencies": { "prepend-http": "^2.0.0" }, @@ -2176,6 +2287,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, "dependencies": { "string-width": "^4.0.0" }, @@ -2195,6 +2307,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -2210,12 +2323,14 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -2227,6 +2342,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, "engines": { "node": ">=8" } @@ -2280,12 +2396,14 @@ "@sindresorhus/is": { "version": "0.14.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true }, "@szmarczak/http-timer": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, "requires": { "defer-to-connect": "^1.0.1" } @@ -2311,7 +2429,8 @@ "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true }, "accepts": { "version": "1.3.7", @@ -2326,6 +2445,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, "requires": { "string-width": "^4.1.0" } @@ -2333,12 +2453,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -2347,6 +2469,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, "requires": { "normalize-path": "^3.0.0", "picomatch": "^2.0.4" @@ -2365,7 +2488,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "basic-auth": { "version": "2.0.1", @@ -2385,7 +2509,8 @@ "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==" + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true }, "body-parser": { "version": "1.19.1", @@ -2408,6 +2533,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, "requires": { "ansi-align": "^3.0.0", "camelcase": "^6.2.0", @@ -2423,6 +2549,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -2432,6 +2559,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, "requires": { "fill-range": "^7.0.1" } @@ -2450,6 +2578,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, "requires": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -2464,6 +2593,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -2471,19 +2601,22 @@ "lowercase-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true } } }, "camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2492,12 +2625,14 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -2508,6 +2643,7 @@ "version": "3.5.3", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, "requires": { "anymatch": "~3.1.2", "braces": "~3.0.2", @@ -2522,17 +2658,20 @@ "ci-info": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true }, "cli-boxes": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==" + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true }, "clone-response": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -2541,6 +2680,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -2548,12 +2688,14 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "concat-stream": { "version": "1.6.2", @@ -2604,6 +2746,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, "requires": { "dot-prop": "^5.2.0", "graceful-fs": "^4.1.2", @@ -2653,7 +2796,8 @@ "crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true }, "debug": { "version": "2.6.9", @@ -2667,6 +2811,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, "requires": { "mimic-response": "^1.0.0" } @@ -2674,12 +2819,14 @@ "deep-extend": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "defer-to-connect": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==" + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true }, "denque": { "version": "2.0.1", @@ -2700,6 +2847,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, "requires": { "is-obj": "^2.0.0" } @@ -2717,7 +2865,8 @@ "duplexer3": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true }, "ee-first": { "version": "1.1.1", @@ -2727,7 +2876,8 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "encodeurl": { "version": "1.0.2", @@ -2738,6 +2888,7 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, "requires": { "once": "^1.4.0" } @@ -2745,7 +2896,8 @@ "escape-goat": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==" + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true }, "escape-html": { "version": "1.0.3", @@ -2798,6 +2950,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, "requires": { "to-regex-range": "^5.0.1" } @@ -2830,6 +2983,7 @@ "version": "2.3.2", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, "optional": true }, "generate-function": { @@ -2844,6 +2998,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, "requires": { "pump": "^3.0.0" } @@ -2852,6 +3007,7 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, "requires": { "is-glob": "^4.0.1" } @@ -2860,6 +3016,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, "requires": { "ini": "2.0.0" } @@ -2868,6 +3025,7 @@ "version": "9.6.0", "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, "requires": { "@sindresorhus/is": "^0.14.0", "@szmarczak/http-timer": "^1.1.2", @@ -2885,22 +3043,26 @@ "graceful-fs": { "version": "4.2.9", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true }, "has-yarn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true }, "http-cache-semantics": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==" + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true }, "http-errors": { "version": "1.8.1", @@ -2925,17 +3087,20 @@ "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=" + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true }, "import-lazy": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "inflection": { "version": "1.13.2", @@ -2950,7 +3115,8 @@ "ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true }, "ipaddr.js": { "version": "1.9.1", @@ -2961,6 +3127,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, "requires": { "binary-extensions": "^2.0.0" } @@ -2969,6 +3136,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, "requires": { "ci-info": "^2.0.0" } @@ -2976,17 +3144,20 @@ "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=" + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, "requires": { "is-extglob": "^2.1.1" } @@ -2995,6 +3166,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, "requires": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -3003,22 +3175,26 @@ "is-npm": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==" + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true }, "is-obj": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true }, "is-path-inside": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==" + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true }, "is-property": { "version": "1.0.2", @@ -3028,12 +3204,14 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-yarn-global": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==" + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true }, "isarray": { "version": "0.0.1", @@ -3055,12 +3233,14 @@ "json-buffer": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, "requires": { "json-buffer": "3.0.0" } @@ -3069,6 +3249,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, "requires": { "package-json": "^6.3.0" } @@ -3086,7 +3267,8 @@ "lowercase-keys": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true }, "lru-cache": { "version": "6.0.0", @@ -3100,6 +3282,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, "requires": { "semver": "^6.0.0" }, @@ -3107,7 +3290,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -3147,12 +3331,14 @@ "mimic-response": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -3300,6 +3486,7 @@ "version": "2.0.15", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "dev": true, "requires": { "chokidar": "^3.5.2", "debug": "^3.2.7", @@ -3317,6 +3504,7 @@ "version": "3.2.7", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "requires": { "ms": "^2.1.1" } @@ -3324,7 +3512,8 @@ "ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true } } }, @@ -3332,6 +3521,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, "requires": { "abbrev": "1" } @@ -3339,12 +3529,14 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true }, "normalize-url": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true }, "object-assign": { "version": "4.1.1", @@ -3368,6 +3560,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -3375,12 +3568,14 @@ "p-cancelable": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true }, "package-json": { "version": "6.5.0", "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, "requires": { "got": "^9.6.0", "registry-auth-token": "^4.0.0", @@ -3391,7 +3586,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -3413,12 +3609,14 @@ "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true }, "prepend-http": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true }, "process-nextick-args": { "version": "2.0.1", @@ -3442,12 +3640,14 @@ "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, "requires": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -3457,6 +3657,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, "requires": { "escape-goat": "^2.0.0" } @@ -3486,6 +3687,7 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, "requires": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -3496,7 +3698,8 @@ "ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true } } }, @@ -3515,6 +3718,7 @@ "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, "requires": { "picomatch": "^2.2.1" } @@ -3523,6 +3727,7 @@ "version": "4.2.1", "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, "requires": { "rc": "^1.2.8" } @@ -3531,6 +3736,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, "requires": { "rc": "^1.2.8" } @@ -3539,6 +3745,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, "requires": { "lowercase-keys": "^1.0.0" } @@ -3561,12 +3768,14 @@ "semver": { "version": "5.7.1", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true }, "semver-diff": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, "requires": { "semver": "^6.3.0" }, @@ -3574,7 +3783,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -3679,7 +3889,8 @@ "signal-exit": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==" + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true }, "sqlstring": { "version": "2.3.2", @@ -3705,6 +3916,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -3715,6 +3927,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -3722,12 +3935,14 @@ "strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=" + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -3735,12 +3950,14 @@ "to-readable-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==" + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, "requires": { "is-number": "^7.0.0" } @@ -3759,6 +3976,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, "requires": { "nopt": "~1.0.10" } @@ -3766,7 +3984,8 @@ "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==" + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true }, "type-is": { "version": "1.6.18", @@ -3786,6 +4005,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, "requires": { "is-typedarray": "^1.0.0" } @@ -3793,12 +4013,14 @@ "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true }, "unique-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, "requires": { "crypto-random-string": "^2.0.0" } @@ -3812,6 +4034,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, "requires": { "boxen": "^5.0.0", "chalk": "^4.1.0", @@ -3833,6 +4056,7 @@ "version": "7.3.5", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -3843,6 +4067,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, "requires": { "prepend-http": "^2.0.0" } @@ -3876,6 +4101,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, "requires": { "string-width": "^4.0.0" } @@ -3892,6 +4118,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3901,12 +4128,14 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write-file-atomic": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, "requires": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -3917,7 +4146,8 @@ "xdg-basedir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true }, "xtend": { "version": "4.0.2", diff --git a/package.json b/package.json index 60dc1c188..04eaaa928 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "test": "NO", - "start": "node ./api/app.js" + "start": "nodemon ./api/app.js" }, "repository": { "type": "git", @@ -30,7 +30,9 @@ "morgan": "^1.10.0", "multer": "^1.4.4", "mysql2": "^2.3.3", - "nodemon": "^2.0.15", "sequelize": "^6.16.1" + }, + "devDependencies": { + "nodemon": "^2.0.15" } } From fa5989d6a19a36acba8ac92d53393736f8bc9fba Mon Sep 17 00:00:00 2001 From: molivaresr Date: Sun, 20 Feb 2022 18:59:51 +0100 Subject: [PATCH 24/66] Probando rutas Ruta Get /api/players -> Lista todos los jugadores Ruta POST /api/players -> Crea jugador con ID y CreatedAt pero no playerName, etc. --- api/app.js | 3 +-- api/config/sqlconnect.js | 8 +++--- api/controllers/players.js | 53 ++++++++++++++++++-------------------- api/models/diceRolls.js | 26 +++++++++++++++++++ api/models/player.js | 21 +++------------ api/routes/players.js | 18 +++++++------ 6 files changed, 71 insertions(+), 58 deletions(-) diff --git a/api/app.js b/api/app.js index 96da000cf..a723d52bd 100644 --- a/api/app.js +++ b/api/app.js @@ -1,11 +1,10 @@ //Crea servidor const dotenv = require('dotenv'); const Server = require('./config/server'); -const connectDb = require('./config/sqlconnect') +const {connectDb} = require('./config/sqlconnect') dotenv.config(); const server = new Server() connectDb() -//server.route(); server.listen(); \ No newline at end of file diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js index efd82be6f..c36046f67 100644 --- a/api/config/sqlconnect.js +++ b/api/config/sqlconnect.js @@ -1,5 +1,6 @@ const {Sequelize} = require('sequelize'); -const PlayerModel = require('../models/player') +const PlayerModel = require('../models/player'); +const DiceRollModel = require('../models/diceRolls'); const mysql = require('mysql2'); // Conecta Base de Datos @@ -16,10 +17,11 @@ async function connectDb () { } } -const Player = PlayerModel(sequelize, Sequelize) +const Player = PlayerModel(sequelize, Sequelize); +const diceRoll = DiceRollModel(sequelize, Sequelize); sequelize.sync() .then(() => console.log('Tablas sincronizadas')) .catch((error) => console.error('Error en la sincronización de Tablas',error)) -module.exports = connectDb; \ No newline at end of file +module.exports = {Player, diceRoll, connectDb}; \ No newline at end of file diff --git a/api/controllers/players.js b/api/controllers/players.js index 0891bd389..d39473fa2 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -1,43 +1,40 @@ const {request, response} = require('express'); -const Player = require('../models/player'); -const saveData = require('../config/sqlconnect') +const {Player} = require('../config/sqlconnect'); -class Players { - postPlayer (req, res) { - const {body} = req; - try { - const player = new saveData(body); - player.save(); - res.json({player}) - } - catch (error) { - console.log(error); - res.status(500).send('Llamar al administrador') - } - res.status(200).send('Creando Jugador') - - }; +const postPlayer = async (req, res) => { + const player = await Player.create(req.body); + res.json(player) + // // try { + // // const player = await Player.create(req.body); + // // res.json({player}) + // // } + // // catch (error) { + // // console.log(error); + // // res.status(500).send('Llamar al administrador') + // // } + //res.status(200).send('Creando Jugador') +}; - putPlayer (req, res) { +const putPlayer = async (req, res) => { res.status(201).send('modificando Jugador') }; - - getPlayer (req,res) { - res.status(200).send('Mostrando un Jugador X_ID') + +const getPlayer = async (req,res) => { + const players = await Player.findAll(); + res.json(players) + //res.status(200).send('Mostrando un Jugador X_ID') }; - - postRoll (req,res) { + +const postRoll = async (req,res) => { res.status(200).send('Guardando Jugada') }; - delPlayerRoll (req,res) { +const delPlayerRoll = async (req,res) => { res.status(200).send('Eliminado jugadas de Jugador X_ID') }; - getPlayerRoll (req, res) { +const getPlayerRoll = async (req, res) => { res.status(201).send('Listando Jugadas de Jugador X_ID') }; -} - -module.exports = Players \ No newline at end of file +module.exports = {postPlayer, putPlayer, getPlayer, postRoll, delPlayerRoll, getPlayerRoll} \ No newline at end of file diff --git a/api/models/diceRolls.js b/api/models/diceRolls.js index e69de29bb..8a652dbfe 100644 --- a/api/models/diceRolls.js +++ b/api/models/diceRolls.js @@ -0,0 +1,26 @@ +module.exports = (sequelize, type) => { + const atributos = { + id: { + type: type.INTEGER, + primaryKey: true, + autoIncrement: true, + }, + diceA: { + type: type.INTEGER + }, + diceB: { + type: type.INTEGER + }, + score: { + type: type.INTEGER + }, + result: { + type: type.STRING + } + + } + const options = { + timestamps: true + } + return sequelize.define('diceRoll', atributos, options) +} \ No newline at end of file diff --git a/api/models/player.js b/api/models/player.js index d7b6c80b1..39690337a 100644 --- a/api/models/player.js +++ b/api/models/player.js @@ -7,23 +7,10 @@ module.exports = (sequelize, type) => { primaryKey: true, autoIncrement: true, }, - playerName: { - type: type.STRING, - allowNull: false - } - /* totalGames:{ - type: type.INTEGER, - defaultValue: 0, - }, - winGames:{ - type: type.INTEGER, - defaultValue: 0, - - }, - winRate:{ - type: type.DECIMAL(10,2), - defaultValue: 0 - } */ + playerName: type.STRING, + totalGames: type.INTEGER, + winGames: type.INTEGER, + winRate: type.DECIMAL(10,2) } const options = { timestamp: true, diff --git a/api/routes/players.js b/api/routes/players.js index e2580cd36..eaa9f6729 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -1,18 +1,20 @@ const express = require('express'); const router = express.Router(); -const Players = require('../controllers/players') -const players = new Players() +const {postPlayer, putPlayer, getPlayer, postRoll, delPlayerRoll, getPlayerRoll} = require('../controllers/players') -router.post('/', players.postPlayer); -router.put('/', players.putPlayer); +router.post('/', postPlayer); -router.get('/:id/', players.getPlayer); +router.put('/', putPlayer); -router.post('/:id/games/', players.postRoll) +router.get('/:id/', getPlayer); -router.delete('/:id/games/', players.delPlayerRoll) +router.get('/', getPlayer);//test list players -router.get('/:id/games/', players.getPlayerRoll); +router.post('/:id/games/', postRoll) + +router.delete('/:id/games/', delPlayerRoll) + +router.get('/:id/games/', getPlayerRoll); module.exports = router \ No newline at end of file From 36550d5d65d32bfdc2c6305891dee03801537e92 Mon Sep 17 00:00:00 2001 From: molivaresr Date: Wed, 23 Feb 2022 10:16:23 +0100 Subject: [PATCH 25/66] =?UTF-8?q?Soluci=C3=B3n=20POST?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/config/server.js | 2 + api/config/sqlconnect.js | 2 +- api/controllers/players.js | 4 +- api/models/player.js | 6 +- package-lock.json | 149 ++++++++++++++++++++++++++++++------- package.json | 2 +- 6 files changed, 132 insertions(+), 33 deletions(-) diff --git a/api/config/server.js b/api/config/server.js index 8fcdf1813..fecb7ca7d 100644 --- a/api/config/server.js +++ b/api/config/server.js @@ -1,10 +1,12 @@ const express = require('express'); const players = require('../routes/players') const ranking = require('../routes/rankings') +const bodyparser = require('body-parser') class Server { constructor(){ this.app = express(); + this.app.use(bodyparser.json()); this.port = process.env.PORT || '3000'; this.route(); } diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js index c36046f67..99e325347 100644 --- a/api/config/sqlconnect.js +++ b/api/config/sqlconnect.js @@ -9,7 +9,7 @@ const sequelize = new Sequelize('dice','root','123456789',{host:'localhost',dial async function connectDb () { try { const connection = mysql.createConnection({host:'localhost', user:'root', password:'123456789'}); - connection.query("CREATE DATABASE IF NOT EXISTS film", function (err){ + connection.query("CREATE DATABASE IF NOT EXISTS dice", function (err){ if(err) throw err; }) } catch (error) { diff --git a/api/controllers/players.js b/api/controllers/players.js index d39473fa2..187d6a980 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -2,8 +2,10 @@ const {request, response} = require('express'); const {Player} = require('../config/sqlconnect'); const postPlayer = async (req, res) => { + console.log('Guardando Jugador') + console.log(req.body) const player = await Player.create(req.body); - res.json(player) + res.json(player) // // try { // // const player = await Player.create(req.body); // // res.json({player}) diff --git a/api/models/player.js b/api/models/player.js index 39690337a..0ed066a7c 100644 --- a/api/models/player.js +++ b/api/models/player.js @@ -8,9 +8,9 @@ module.exports = (sequelize, type) => { autoIncrement: true, }, playerName: type.STRING, - totalGames: type.INTEGER, - winGames: type.INTEGER, - winRate: type.DECIMAL(10,2) + totalGames: type.INTEGER, //Default 0 + winGames: type.INTEGER, // Default 0 + winRate: type.DECIMAL(10,2) // Default 0% } const options = { timestamp: true, diff --git a/package-lock.json b/package-lock.json index 45cf830cd..8ebe56804 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "MIT", "dependencies": { - "body-parser": "^1.19.1", + "body-parser": "^1.19.2", "cors": "^2.8.5", "dotenv": "^16.0.0", "express": "^4.17.2", @@ -199,25 +199,36 @@ } }, "node_modules/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", "dependencies": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", + "qs": "6.9.7", + "raw-body": "2.4.3", "type-is": "~1.6.18" }, "engines": { "node": ">= 0.8" } }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/boxen": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", @@ -268,9 +279,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { "node": ">= 0.8" } @@ -742,6 +753,48 @@ "node": ">= 0.10.0" } }, + "node_modules/express/node_modules/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "dependencies": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dependencies": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1698,11 +1751,11 @@ } }, "node_modules/raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "dependencies": { - "bytes": "3.1.1", + "bytes": "3.1.2", "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" @@ -2513,20 +2566,27 @@ "dev": true }, "body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", "requires": { - "bytes": "3.1.1", + "bytes": "3.1.2", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", "http-errors": "1.8.1", "iconv-lite": "0.4.24", "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", + "qs": "6.9.7", + "raw-body": "2.4.3", "type-is": "~1.6.18" + }, + "dependencies": { + "qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" + } } }, "boxen": { @@ -2570,9 +2630,9 @@ "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, "bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, "cacheable-request": { "version": "6.1.0", @@ -2944,6 +3004,41 @@ "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "requires": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + } + }, + "bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==" + }, + "raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "requires": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + } } }, "fill-range": { @@ -3673,11 +3768,11 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", "requires": { - "bytes": "3.1.1", + "bytes": "3.1.2", "http-errors": "1.8.1", "iconv-lite": "0.4.24", "unpipe": "1.0.0" diff --git a/package.json b/package.json index 04eaaa928..cd509f764 100644 --- a/package.json +++ b/package.json @@ -22,7 +22,7 @@ }, "homepage": "https://github.com/molivaresr/nodeInitialDemo#readme", "dependencies": { - "body-parser": "^1.19.1", + "body-parser": "^1.19.2", "cors": "^2.8.5", "dotenv": "^16.0.0", "express": "^4.17.2", From 504818072c1030914f8b4243fe56c4b003629407 Mon Sep 17 00:00:00 2001 From: molivaresr Date: Wed, 23 Feb 2022 13:31:46 +0100 Subject: [PATCH 26/66] Post player !!! --- api/controllers/players.js | 34 +++++++++++++++++++--------------- api/models/player.js | 20 ++++++++++++++++---- api/routes/players.js | 2 +- 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/api/controllers/players.js b/api/controllers/players.js index 187d6a980..e9133decd 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -2,24 +2,28 @@ const {request, response} = require('express'); const {Player} = require('../config/sqlconnect'); const postPlayer = async (req, res) => { - console.log('Guardando Jugador') - console.log(req.body) - const player = await Player.create(req.body); - res.json(player) - // // try { - // // const player = await Player.create(req.body); - // // res.json({player}) - // // } - // // catch (error) { - // // console.log(error); - // // res.status(500).send('Llamar al administrador') - // // } - //res.status(200).send('Creando Jugador') + try { + const player = await Player.create(req.body); + res.json(player).status(200) + } + catch (error) { + console.log(error); + res.status(500).send('Llamar al administrador') + } }; const putPlayer = async (req, res) => { - res.status(201).send('modificando Jugador') - }; + try { + await Player.update(req.body,{ + where: {id: req.params.id} + }); + res.json(player).status(200) + } + catch (error) { + console.log(error); + res.status(500).send('Llamar al administrador') + } +}; const getPlayer = async (req,res) => { const players = await Player.findAll(); diff --git a/api/models/player.js b/api/models/player.js index 0ed066a7c..8334f520c 100644 --- a/api/models/player.js +++ b/api/models/player.js @@ -7,10 +7,22 @@ module.exports = (sequelize, type) => { primaryKey: true, autoIncrement: true, }, - playerName: type.STRING, - totalGames: type.INTEGER, //Default 0 - winGames: type.INTEGER, // Default 0 - winRate: type.DECIMAL(10,2) // Default 0% + playerName: { + type: type.STRING, + defaultValue:"Anónimo" + }, + totalGames: { + type: type.INTEGER, + defaultValue:0 + }, //Default 0 + winGames: { + type: type.INTEGER, + defaultValue:0 + }, // Default 0 + winRate: { + type: type.DECIMAL(10,2), + defaultValue:0 + } // Default 0% } const options = { timestamp: true, diff --git a/api/routes/players.js b/api/routes/players.js index eaa9f6729..86fb15461 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -5,7 +5,7 @@ const {postPlayer, putPlayer, getPlayer, postRoll, delPlayerRoll, getPlayerRoll} router.post('/', postPlayer); -router.put('/', putPlayer); +router.put('/:id', putPlayer); router.get('/:id/', getPlayer); From f809614207d7c87e24c1191564b8ede962276ab2 Mon Sep 17 00:00:00 2001 From: molivaresr Date: Sat, 26 Feb 2022 17:56:17 +0100 Subject: [PATCH 27/66] player --- api/controllers/players.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/api/controllers/players.js b/api/controllers/players.js index e9133decd..b1511fbd9 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -13,9 +13,11 @@ const postPlayer = async (req, res) => { }; const putPlayer = async (req, res) => { + console.log(req.params.id) try { + const player = await Player.create(req.body); await Player.update(req.body,{ - where: {id: req.params.id} + where: {_id: req.params.id} }); res.json(player).status(200) } @@ -27,7 +29,7 @@ const putPlayer = async (req, res) => { const getPlayer = async (req,res) => { const players = await Player.findAll(); - res.json(players) + res.json({players}) //res.status(200).send('Mostrando un Jugador X_ID') }; From f2c12676cf4fe79fc4531c0126ff6f39b63a942a Mon Sep 17 00:00:00 2001 From: molivaresr Date: Sun, 27 Feb 2022 23:28:25 +0100 Subject: [PATCH 28/66] getRanking is not working --- README.md | 12 +++--- api/config/sqlconnect.js | 10 +++-- api/controllers/game.js | 8 ++++ api/controllers/players.js | 26 +++--------- api/controllers/rankings.js | 33 +++++++++++++++ api/controllers/rollDice.js | 54 ++++++++++++++++++++++++ api/models/player.js | 2 - api/models/{diceRolls.js => rollDice.js} | 10 +++-- api/routes/players.js | 7 +-- api/routes/rankings.js | 13 +++--- public/index.js | 19 --------- 11 files changed, 129 insertions(+), 65 deletions(-) create mode 100644 api/controllers/game.js create mode 100644 api/controllers/rankings.js create mode 100644 api/controllers/rollDice.js rename api/models/{diceRolls.js => rollDice.js} (81%) delete mode 100644 public/index.js diff --git a/README.md b/README.md index bd7ed8204..0232b871b 100644 --- a/README.md +++ b/README.md @@ -21,14 +21,14 @@ El software ha de respectar els principals patrons de disseny. Has de tenir en compte els següents detalls de construcció: -POST /players: crea un jugador -PUT /players: modifica el nom del jugador -DELETE /players/{id}/games: elimina les tirades del jugador -GET /players/{id}/games: retorna el llistat de jugades per un jugador. +Ok POST /players: crea un jugador +Ok PUT /players: modifica el nom del jugador +Ok DELETE /players/{id}/games: elimina les tirades del jugador +Ok GET /players/{id}/games: retorna el llistat de jugades per un jugador. -POST /players/{id}/games: un jugador específic realitza una tirada +Ok POST /players/{id}/games: un jugador específic realitza una tirada -GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits +Ok GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit \ No newline at end of file diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js index 99e325347..5211b7071 100644 --- a/api/config/sqlconnect.js +++ b/api/config/sqlconnect.js @@ -1,6 +1,6 @@ const {Sequelize} = require('sequelize'); const PlayerModel = require('../models/player'); -const DiceRollModel = require('../models/diceRolls'); +const RollDiceModel = require('../models/rollDice'); const mysql = require('mysql2'); // Conecta Base de Datos @@ -18,10 +18,14 @@ async function connectDb () { } const Player = PlayerModel(sequelize, Sequelize); -const diceRoll = DiceRollModel(sequelize, Sequelize); +const RollDice = RollDiceModel(sequelize, Sequelize); sequelize.sync() .then(() => console.log('Tablas sincronizadas')) .catch((error) => console.error('Error en la sincronización de Tablas',error)) -module.exports = {Player, diceRoll, connectDb}; \ No newline at end of file + +Player.hasMany(RollDice,{onDelete:'cascade'}) +RollDice.belongsTo(Player) + +module.exports = {Player, RollDice, connectDb}; \ No newline at end of file diff --git a/api/controllers/game.js b/api/controllers/game.js new file mode 100644 index 000000000..ad34e5770 --- /dev/null +++ b/api/controllers/game.js @@ -0,0 +1,8 @@ +const rollDice = () => { + const diceOne = Math.round(Math.random() * (6-1) + 1); + const diceTwo = Math.round(Math.random() * (6-1) + 1); + const score = diceOne + diceTwo; + const result = score === 7 ? 'Win' : 'Loose'; + return { diceOne, diceTwo, score, result} +} +module.exports = rollDice diff --git a/api/controllers/players.js b/api/controllers/players.js index b1511fbd9..1ea2600d2 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -1,5 +1,5 @@ const {request, response} = require('express'); -const {Player} = require('../config/sqlconnect'); +const {Player, RollDice} = require('../config/sqlconnect'); const postPlayer = async (req, res) => { try { @@ -13,13 +13,11 @@ const postPlayer = async (req, res) => { }; const putPlayer = async (req, res) => { - console.log(req.params.id) try { - const player = await Player.create(req.body); await Player.update(req.body,{ where: {_id: req.params.id} }); - res.json(player).status(200) + res.json({success:'Se ha modificado el nombre del jugador'}) } catch (error) { console.log(error); @@ -28,21 +26,9 @@ const putPlayer = async (req, res) => { }; const getPlayer = async (req,res) => { - const players = await Player.findAll(); - res.json({players}) - //res.status(200).send('Mostrando un Jugador X_ID') + const idPlayer = req.params.id + const playerRoll = await RollDice.findAll({where:{idPlayer:idPlayer}}); + res.status(200).json({playerRoll}) }; -const postRoll = async (req,res) => { - res.status(200).send('Guardando Jugada') - }; - -const delPlayerRoll = async (req,res) => { - res.status(200).send('Eliminado jugadas de Jugador X_ID') - }; - -const getPlayerRoll = async (req, res) => { - res.status(201).send('Listando Jugadas de Jugador X_ID') - }; - -module.exports = {postPlayer, putPlayer, getPlayer, postRoll, delPlayerRoll, getPlayerRoll} \ No newline at end of file +module.exports = {postPlayer, putPlayer, getPlayer} \ No newline at end of file diff --git a/api/controllers/rankings.js b/api/controllers/rankings.js new file mode 100644 index 000000000..44e942e16 --- /dev/null +++ b/api/controllers/rankings.js @@ -0,0 +1,33 @@ +const {request, response} = require('express'); +const {Player, RollDice} = require('../config/sqlconnect') + + +const getPlayers = async (request,response) => { + try { + const players = await Player.findAll({attributes:['_id','playerName','winRate']}); + response.status(200).send({players}) + } catch (error) { + response.status(500).send('Llamar al Admin') + } + +} +const getRanking = async (request, response) => { + + try { + const totalGames = await Player.findAll({attributes:['totalGames']}); + const winGames = await Player.findAll({attributes:['winGames']}); + const winRate = (winGames / totalGames)*100; + const overAll = { + JugadasTotal: totalGames, + Ganadas: winGames, + PorcentajeExito: winRate, + } + response.status(200).send({overAll}) + } catch (error) { + response.status(500).send('Llamar al administrador') + } +} +const getLastPlayer = () => {} +const getFirstPlayers = () => {} + +module.exports = {getFirstPlayers, getLastPlayer, getRanking, getPlayers} \ No newline at end of file diff --git a/api/controllers/rollDice.js b/api/controllers/rollDice.js new file mode 100644 index 000000000..38e092e8b --- /dev/null +++ b/api/controllers/rollDice.js @@ -0,0 +1,54 @@ +const rollDice = require('./game') +const {RollDice, Player} = require('../config/sqlconnect'); + +const postRoll = async (req,res) => { + const idPlayer = req.params.id; + + const {diceOne, diceTwo, score, result} = rollDice(); + console.log(diceOne, diceTwo, score, result) + try { + const roll = await RollDice.create({diceOne, diceTwo, score, result, idPlayer}); + let arr = new Array(0); + if(result === 'Win') { + await Player.increment( + ['totalGames','winGames'], + {where:{_id:idPlayer} + }); + } else { + await Player.increment('totalGames', + {where:{_id:idPlayer}}); + } + const player = await Player.findAll({where:{_id:idPlayer}}) + arr.push(player); + const {totalGames, winGames} = arr[0][0].dataValues; + const winRate = (winGames/totalGames)*100; + await Player.update({winRate},{where:{_id:idPlayer}}) + const playerRolled = await Player.findAll({attribute:['playerName'],where:{_id:idPlayer}}) + res.send({playerRolled, roll}) + } + catch (error) { + res.status(500).send({message:error.message}) + } +}; + +const delPlayerRoll = async (req,res) => { + const idPlayer = req.params.id; + try { + await Player.update({ + totalGames:0, + winGames:0, + winRate:0, + },{where:{_id:idPlayer}}) + await RollDice.destroy({where:{_id:idPlayer}}) + const player = await Player.findAll({where:{_id:idPlayer}}) + res.status(200).send({player}) + } catch (error) { + res.status(500).send({message: error.message}) + } +} +const getPlayerRoll = async (req, res) => { + const idPlayer = req.params.id; + const player = await Player.findAll({where:{_id:idPlayer}}) + res.status(201).send({player}) + }; +module.exports = {postRoll, delPlayerRoll, getPlayerRoll} \ No newline at end of file diff --git a/api/models/player.js b/api/models/player.js index 8334f520c..096125ce0 100644 --- a/api/models/player.js +++ b/api/models/player.js @@ -1,5 +1,3 @@ -//const Player = Sequelize.define('Player', atributos, options) - module.exports = (sequelize, type) => { const atributos = { _id: { diff --git a/api/models/diceRolls.js b/api/models/rollDice.js similarity index 81% rename from api/models/diceRolls.js rename to api/models/rollDice.js index 8a652dbfe..ea318c1e9 100644 --- a/api/models/diceRolls.js +++ b/api/models/rollDice.js @@ -1,14 +1,14 @@ module.exports = (sequelize, type) => { const atributos = { - id: { + _id: { type: type.INTEGER, primaryKey: true, autoIncrement: true, }, - diceA: { + diceOne: { type: type.INTEGER }, - diceB: { + diceTwo: { type: type.INTEGER }, score: { @@ -16,8 +16,10 @@ module.exports = (sequelize, type) => { }, result: { type: type.STRING + }, + idPlayer: { + type: type.INTEGER } - } const options = { timestamps: true diff --git a/api/routes/players.js b/api/routes/players.js index 86fb15461..e264a364d 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -1,7 +1,8 @@ const express = require('express'); const router = express.Router(); -const {postPlayer, putPlayer, getPlayer, postRoll, delPlayerRoll, getPlayerRoll} = require('../controllers/players') - +const {postPlayer, putPlayer, getPlayer} = require('../controllers/players'); +const { getPlayers } = require('../controllers/rankings'); +const {postRoll, delPlayerRoll, getPlayerRoll} = require('../controllers/rollDice'); router.post('/', postPlayer); @@ -9,7 +10,7 @@ router.put('/:id', putPlayer); router.get('/:id/', getPlayer); -router.get('/', getPlayer);//test list players +//router.get('/', getPlayers);//test list players router.post('/:id/games/', postRoll) diff --git a/api/routes/rankings.js b/api/routes/rankings.js index f92a3f853..9b1f75a53 100644 --- a/api/routes/rankings.js +++ b/api/routes/rankings.js @@ -1,19 +1,16 @@ const express = require('express'); const router = express.Router(); +const {getPlayers, getRanking} = require('../controllers/rankings') -router.get('/', (req, res) => { - res.status(200).send('Listando todos las jugadas') -}); +router.get('/', getPlayers); -router.get('/ranking/', (req, res) => { - res.status(200).send('Ranking de Jugadas') -}); +router.get('/ranking/', getRanking); -router.get('/ranking/looser/', (req, res) => { +router.get('/ranking/lastplayer/', (req, res) => { res.status(200).send('Última posición') }); -router.get('/ranking/winner/', (req, res) => { +router.get('/ranking/firstplayer/', (req, res) => { res.status(200).send('Primera Posición') }); module.exports = router; \ No newline at end of file diff --git a/public/index.js b/public/index.js deleted file mode 100644 index e9b16705f..000000000 --- a/public/index.js +++ /dev/null @@ -1,19 +0,0 @@ -const throwDices = () => { - return Math.round(Math.random() * (6-1) + 1); -} - -//Nueva Partida -const diceOne = throwDices(); -const diceTwo = throwDices(); - -const game = diceOne + diceTwo; - -console.log(diceOne); -console.log(diceTwo); -console.log(game) - -if(game === 7) { - console.log('Haz Ganado') - // Sumar a el jugador - // Sumar a el total de jugadas -} else console.log('No haz sacado 7'); \ No newline at end of file From 6892f81312ed1520ce2396a2d550611f9a68173d Mon Sep 17 00:00:00 2001 From: molivaresr Date: Wed, 2 Mar 2022 11:01:39 +0100 Subject: [PATCH 29/66] Ranking No funciona --- api/controllers/players.js | 34 ++++++++++++++++------------ api/controllers/rankings.js | 44 ++++++++++++++++++------------------- api/routes/players.js | 12 +++++----- api/routes/rankings.js | 8 +++---- 4 files changed, 52 insertions(+), 46 deletions(-) diff --git a/api/controllers/players.js b/api/controllers/players.js index 1ea2600d2..828f4808b 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -1,34 +1,40 @@ const {request, response} = require('express'); const {Player, RollDice} = require('../config/sqlconnect'); -const postPlayer = async (req, res) => { +const postPlayer = async (request, response) => { try { - const player = await Player.create(req.body); - res.json(player).status(200) + const player = await Player.create(request.body); + response.json(player).status(200) } catch (error) { console.log(error); - res.status(500).send('Llamar al administrador') + response.status(500).send('Llamar al administrador') } }; -const putPlayer = async (req, res) => { +const putPlayer = async (request, response) => { try { - await Player.update(req.body,{ - where: {_id: req.params.id} + await Player.update(request.body,{ + where: {_id: request.params.id} }); - res.json({success:'Se ha modificado el nombre del jugador'}) + response.json({success:'Se ha modificado el nombre del jugador'}) } catch (error) { console.log(error); - res.status(500).send('Llamar al administrador') + response.status(500).send('Llamar al administrador') } }; -const getPlayer = async (req,res) => { - const idPlayer = req.params.id - const playerRoll = await RollDice.findAll({where:{idPlayer:idPlayer}}); - res.status(200).json({playerRoll}) - }; +const getPlayer = async (request,response) => { + const player = await Player.findAll({where:{_id: request.params.id}}); + response.send(player) + // try { + // const playerRoll = await RollDice.findAll({where:{idPlayer:idPlayer}}); + // response.status(200).json({playerRoll}) + // } + // catch(error) { + // response.status(500).send('Server Error', error) + // }; +} module.exports = {postPlayer, putPlayer, getPlayer} \ No newline at end of file diff --git a/api/controllers/rankings.js b/api/controllers/rankings.js index 44e942e16..4d99a91ef 100644 --- a/api/controllers/rankings.js +++ b/api/controllers/rankings.js @@ -1,33 +1,33 @@ -const {request, response} = require('express'); +const {req, res} = require('express'); const {Player, RollDice} = require('../config/sqlconnect') -const getPlayers = async (request,response) => { +const getPlayers = async (req,res) => { try { const players = await Player.findAll({attributes:['_id','playerName','winRate']}); - response.status(200).send({players}) + res.status(200).send({players}) } catch (error) { - response.status(500).send('Llamar al Admin') - } - -} -const getRanking = async (request, response) => { - - try { - const totalGames = await Player.findAll({attributes:['totalGames']}); - const winGames = await Player.findAll({attributes:['winGames']}); - const winRate = (winGames / totalGames)*100; - const overAll = { - JugadasTotal: totalGames, - Ganadas: winGames, - PorcentajeExito: winRate, - } - response.status(200).send({overAll}) - } catch (error) { - response.status(500).send('Llamar al administrador') + res.status(500).send('Llamar al Admin') } +} +const getRanking = async (req, res) => { + res.send('Hola') + // try { + // const totalGames = await Player.findAll({attributes:['totalGames']}); + // const winGames = await Player.findAll({attributes:['winGames']}); + // const winRate = (winGames / totalGames)*100; + // const overAll = { + // JugadasTotal: totalGames, + // Ganadas: winGames, + // PorcentajeExito: winRate, + // } + + // res.sendstatus(200).send(overAll) + // } catch (error) { + // res.status(500).send('Llamar al administrador') + // } } const getLastPlayer = () => {} const getFirstPlayers = () => {} -module.exports = {getFirstPlayers, getLastPlayer, getRanking, getPlayers} \ No newline at end of file +module.exports = {getRanking, getFirstPlayers, getLastPlayer, getPlayers} \ No newline at end of file diff --git a/api/routes/players.js b/api/routes/players.js index e264a364d..2db5ae065 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -4,18 +4,20 @@ const {postPlayer, putPlayer, getPlayer} = require('../controllers/players'); const { getPlayers } = require('../controllers/rankings'); const {postRoll, delPlayerRoll, getPlayerRoll} = require('../controllers/rollDice'); -router.post('/', postPlayer); +router.get('/:id/', getPlayer); // Muestra un Jugador x el ID -router.put('/:id', putPlayer); +router.get('/', getPlayers);//test list players -router.get('/:id/', getPlayer); +router.get('/:id/games/', getPlayerRoll); -//router.get('/', getPlayers);//test list players +router.post('/', postPlayer); // Crea un usuario router.post('/:id/games/', postRoll) +router.put('/:id', putPlayer); // Modifica el Nombre de usuario + router.delete('/:id/games/', delPlayerRoll) -router.get('/:id/games/', getPlayerRoll); + module.exports = router \ No newline at end of file diff --git a/api/routes/rankings.js b/api/routes/rankings.js index 9b1f75a53..794b6a2a8 100644 --- a/api/routes/rankings.js +++ b/api/routes/rankings.js @@ -4,13 +4,11 @@ const {getPlayers, getRanking} = require('../controllers/rankings') router.get('/', getPlayers); -router.get('/ranking/', getRanking); +router.get('/ranking', getRanking); -router.get('/ranking/lastplayer/', (req, res) => { - res.status(200).send('Última posición') -}); +router.get('/ranking/lastplayer', getRanking); -router.get('/ranking/firstplayer/', (req, res) => { +router.get('/ranking/firstplayer', (req, res) => { res.status(200).send('Primera Posición') }); module.exports = router; \ No newline at end of file From c912caae04d33009af9c8cbf7bffb9489dc125be Mon Sep 17 00:00:00 2001 From: molivaresr Date: Wed, 2 Mar 2022 11:02:44 +0100 Subject: [PATCH 30/66] comentarios para ranking --- api/routes/rankings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/routes/rankings.js b/api/routes/rankings.js index 794b6a2a8..928ed70a1 100644 --- a/api/routes/rankings.js +++ b/api/routes/rankings.js @@ -4,9 +4,9 @@ const {getPlayers, getRanking} = require('../controllers/rankings') router.get('/', getPlayers); -router.get('/ranking', getRanking); +router.get('/ranking', getRanking); // Esta línea no funciona -router.get('/ranking/lastplayer', getRanking); +router.get('/ranking/lastplayer', getRanking); //Aqui funciona router.get('/ranking/firstplayer', (req, res) => { res.status(200).send('Primera Posición') From 3d6ae7517cce827a400e6ceb5cfd1057d01b2b5e Mon Sep 17 00:00:00 2001 From: molivaresr Date: Wed, 2 Mar 2022 13:11:05 +0100 Subject: [PATCH 31/66] GetRanking MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Función funcionando. Ruta pendiente. --- README.md | 4 ++-- api/controllers/rankings.js | 30 +++++++++++++----------------- 2 files changed, 15 insertions(+), 19 deletions(-) diff --git a/README.md b/README.md index 0232b871b..a116bee1e 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ Ok GET /players/{id}/games: retorna el llistat de jugades per un jugador. Ok POST /players/{id}/games: un jugador específic realitza una tirada -Ok GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits -GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors +Ok GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits +Ok GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona) GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit \ No newline at end of file diff --git a/api/controllers/rankings.js b/api/controllers/rankings.js index 4d99a91ef..3fd3c930a 100644 --- a/api/controllers/rankings.js +++ b/api/controllers/rankings.js @@ -5,28 +5,24 @@ const {Player, RollDice} = require('../config/sqlconnect') const getPlayers = async (req,res) => { try { const players = await Player.findAll({attributes:['_id','playerName','winRate']}); - res.status(200).send({players}) + res.sendStatus(200).send({players}) } catch (error) { - res.status(500).send('Llamar al Admin') + res.sendStatus(500).send('Llamar al Admin') } } -const getRanking = async (req, res) => { - res.send('Hola') - // try { - // const totalGames = await Player.findAll({attributes:['totalGames']}); - // const winGames = await Player.findAll({attributes:['winGames']}); - // const winRate = (winGames / totalGames)*100; - // const overAll = { - // JugadasTotal: totalGames, - // Ganadas: winGames, - // PorcentajeExito: winRate, - // } - // res.sendstatus(200).send(overAll) - // } catch (error) { - // res.status(500).send('Llamar al administrador') - // } +const getRanking = async (req, res) => { + try { + console.log('Try') + const totalGames = await RollDice.count() + const winGames = await RollDice.count({where:{result:['Win']}}); + const winRate = ((winGames / totalGames)*100) + res.send(`El porcentaje jugadas ganadas es ${Math.round(winRate)}%`) + } catch (error) { + res.sendStatus(500) + } } + const getLastPlayer = () => {} const getFirstPlayers = () => {} From 3542d0f087e08d33d6f038f9562ff5d7c29776a6 Mon Sep 17 00:00:00 2001 From: molivaresr Date: Thu, 3 Mar 2022 12:44:39 +0100 Subject: [PATCH 32/66] funciones terminadas Rutas funcionando Pendiente solucionar Ranking --- api/controllers/players.js | 36 ++++++++++++++++++++++------ api/controllers/rankings.js | 37 ++++++++++++++++++++-------- api/routes/players.js | 2 -- api/routes/rankings.js | 10 ++++---- package-lock.json | 48 +++++++++++++++++++++++++++++++++++++ package.json | 4 ++++ 6 files changed, 113 insertions(+), 24 deletions(-) diff --git a/api/controllers/players.js b/api/controllers/players.js index 828f4808b..a4a9d768d 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -1,6 +1,13 @@ const {request, response} = require('express'); + + const {Player, RollDice} = require('../config/sqlconnect'); +// const bcrypt = require('bcryptjs'); +// const {check, validationResult} = require('express-validator'); +// const moment = require('moment'); +// const jwt = require('jwt-simple'); + const postPlayer = async (request, response) => { try { const player = await Player.create(request.body); @@ -28,13 +35,28 @@ const putPlayer = async (request, response) => { const getPlayer = async (request,response) => { const player = await Player.findAll({where:{_id: request.params.id}}); response.send(player) - // try { - // const playerRoll = await RollDice.findAll({where:{idPlayer:idPlayer}}); - // response.status(200).json({playerRoll}) - // } - // catch(error) { - // response.status(500).send('Server Error', error) - // }; } +// const createToken = (admin) => { +// const payLoad = { +// admin: admin, +// createdAt: moment().unix(), +// expiredAt: moment().add(5, 'minutes').unix() +// } +// return jwt.encode(payLoad, 'frase secreta'); +// } + +// const login = async (request, response) => { +// const admin = await Player.findOne({where:{email:req.body.email}}); +// if(admin){ +// const equal = bcrypt.compareSync(request.body.password, user.password); +// if(equal) { +// response.json({success: createToken(admin)}) +// } else { +// response.json({error: 'Error Usuario y/o contraseña incorrectos'}) +// } +// } else { +// response.json({error:'Usuario y/o contraseña incorrectos'}) +// } +// } module.exports = {postPlayer, putPlayer, getPlayer} \ No newline at end of file diff --git a/api/controllers/rankings.js b/api/controllers/rankings.js index 3fd3c930a..cc93a77cf 100644 --- a/api/controllers/rankings.js +++ b/api/controllers/rankings.js @@ -1,29 +1,46 @@ -const {req, res} = require('express'); +const {request, response} = require('express'); const {Player, RollDice} = require('../config/sqlconnect') const getPlayers = async (req,res) => { try { const players = await Player.findAll({attributes:['_id','playerName','winRate']}); - res.sendStatus(200).send({players}) + response.sendStatus(200).send({players}) } catch (error) { - res.sendStatus(500).send('Llamar al Admin') + response.sendStatus(500).send('Llamar al Admin') } } -const getRanking = async (req, res) => { +const getRanking = async (request, response) => { try { - console.log('Try') const totalGames = await RollDice.count() const winGames = await RollDice.count({where:{result:['Win']}}); const winRate = ((winGames / totalGames)*100) - res.send(`El porcentaje jugadas ganadas es ${Math.round(winRate)}%`) + response.send(`El porcentaje jugadas ganadas es ${Math.round(winRate)}%`) } catch (error) { - res.sendStatus(500) + response.sendStatus(500) } } -const getLastPlayer = () => {} -const getFirstPlayers = () => {} +const getLastPlayer = async (request, response) => { + const minScore = await Player.min('winRate'); + console.log(minScore) + try { + const lastPlayer = await Player.findAll({where:{winRate:minScore}}); + response.json(lastPlayer); + } catch (error) { + response.sendStatus(500) + } +} +const getFirstPlayer = async (request, response) => { + const maxScore = await Player.max('winRate'); + console.log(maxScore) + try { + const firstPlayer = await Player.findAll({where:{winRate:maxScore}}); + response.json(firstPlayer); + } catch (error) { + response.sendStatus(500) + } +} -module.exports = {getRanking, getFirstPlayers, getLastPlayer, getPlayers} \ No newline at end of file +module.exports = {getRanking, getFirstPlayer, getLastPlayer, getPlayers} \ No newline at end of file diff --git a/api/routes/players.js b/api/routes/players.js index 2db5ae065..0ebf909e4 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -18,6 +18,4 @@ router.put('/:id', putPlayer); // Modifica el Nombre de usuario router.delete('/:id/games/', delPlayerRoll) - - module.exports = router \ No newline at end of file diff --git a/api/routes/rankings.js b/api/routes/rankings.js index 928ed70a1..6c5f5dc86 100644 --- a/api/routes/rankings.js +++ b/api/routes/rankings.js @@ -1,14 +1,14 @@ const express = require('express'); const router = express.Router(); -const {getPlayers, getRanking} = require('../controllers/rankings') +const {getPlayers, getRanking, getLastPlayer, getFirstPlayer} = require('../controllers/rankings') router.get('/', getPlayers); router.get('/ranking', getRanking); // Esta línea no funciona -router.get('/ranking/lastplayer', getRanking); //Aqui funciona +router.get('/ranking/d', getRanking); -router.get('/ranking/firstplayer', (req, res) => { - res.status(200).send('Primera Posición') -}); +router.get('/ranking/lastplayer', getLastPlayer); //Aqui funciona + +router.get('/ranking/firstplayer', getFirstPlayer); module.exports = router; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 8ebe56804..e4fc2542d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,11 +9,15 @@ "version": "1.0.0", "license": "MIT", "dependencies": { + "bcryptjs": "^2.4.3", "body-parser": "^1.19.2", "cors": "^2.8.5", "dotenv": "^16.0.0", "express": "^4.17.2", + "express-validator": "^6.14.0", "joi": "^17.6.0", + "jwt-simple": "^0.5.6", + "moment": "^2.29.1", "morgan": "^1.10.0", "multer": "^1.4.4", "mysql2": "^2.3.3", @@ -189,6 +193,11 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -753,6 +762,18 @@ "node": ">= 0.10.0" } }, + "node_modules/express-validator": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.14.0.tgz", + "integrity": "sha512-ZWHJfnRgePp3FKRSKMtnZVnD1s8ZchWD+jSl7UMseGIqhweCo1Z9916/xXBbJAa6PrA3pUZfkOvIsHZG4ZtIMw==", + "dependencies": { + "lodash": "^4.17.21", + "validator": "^13.7.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, "node_modules/express/node_modules/body-parser": { "version": "1.19.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", @@ -1182,6 +1203,14 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, + "node_modules/jwt-simple": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/jwt-simple/-/jwt-simple-0.5.6.tgz", + "integrity": "sha512-40aUybvhH9t2h71ncA1/1SbtTNCVZHgsTsTgqPUxGWDmUDrXyDf2wMNQKEbdBjbf4AI+fQhbECNTV6lWxQKUzg==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", @@ -2559,6 +2588,11 @@ } } }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -3041,6 +3075,15 @@ } } }, + "express-validator": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.14.0.tgz", + "integrity": "sha512-ZWHJfnRgePp3FKRSKMtnZVnD1s8ZchWD+jSl7UMseGIqhweCo1Z9916/xXBbJAa6PrA3pUZfkOvIsHZG4ZtIMw==", + "requires": { + "lodash": "^4.17.21", + "validator": "^13.7.0" + } + }, "fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -3331,6 +3374,11 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, + "jwt-simple": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/jwt-simple/-/jwt-simple-0.5.6.tgz", + "integrity": "sha512-40aUybvhH9t2h71ncA1/1SbtTNCVZHgsTsTgqPUxGWDmUDrXyDf2wMNQKEbdBjbf4AI+fQhbECNTV6lWxQKUzg==" + }, "keyv": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", diff --git a/package.json b/package.json index cd509f764..557441736 100644 --- a/package.json +++ b/package.json @@ -22,11 +22,15 @@ }, "homepage": "https://github.com/molivaresr/nodeInitialDemo#readme", "dependencies": { + "bcryptjs": "^2.4.3", "body-parser": "^1.19.2", "cors": "^2.8.5", "dotenv": "^16.0.0", "express": "^4.17.2", + "express-validator": "^6.14.0", "joi": "^17.6.0", + "jwt-simple": "^0.5.6", + "moment": "^2.29.1", "morgan": "^1.10.0", "multer": "^1.4.4", "mysql2": "^2.3.3", From 0af9598519777fd24a01815987c1eb97dbab2d08 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Mar 2022 10:01:10 +0100 Subject: [PATCH 33/66] Revisado y postman collection --- .env | 2 +- Joc de Daus.postman_collection.json | 321 ++++ README.md | 4 +- api/config/server.js | 4 +- api/controllers/players.js | 15 +- api/controllers/rankings.js | 15 +- api/routes/rankings.js | 5 +- package-lock.json | 2452 +-------------------------- 8 files changed, 356 insertions(+), 2462 deletions(-) create mode 100644 Joc de Daus.postman_collection.json diff --git a/.env b/.env index 022b4a705..d3e4ac460 100644 --- a/.env +++ b/.env @@ -1 +1 @@ -PORT = 8000 \ No newline at end of file +PORT = 8080 \ No newline at end of file diff --git a/Joc de Daus.postman_collection.json b/Joc de Daus.postman_collection.json new file mode 100644 index 000000000..4d9c60e1e --- /dev/null +++ b/Joc de Daus.postman_collection.json @@ -0,0 +1,321 @@ +{ + "info": { + "_postman_id": "7c0893f4-a3d8-4130-b21c-98e20c2a3d1c", + "name": "Joc de Daus", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "Post -> Crea un jugador", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"playerName\":\"Cassidy\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/api/players", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "api", + "players" + ] + } + }, + "response": [] + }, + { + "name": "Put -> Modifica el nombre de un jugador", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"playerName\":\"Cassidy!!!\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/api/players/4", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "api", + "players", + "4" + ] + } + }, + "response": [] + }, + { + "name": "Delete -> Elimina las jugadas de un jugador", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"playerName\":\"Cassidy!!!\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/api/players/4", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "api", + "players", + "4" + ] + } + }, + "response": [] + }, + { + "name": "Delete -> Retorna las jugadas de un jugador", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"playerName\":\"Cassidy!!!\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/api/players/2/games", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "api", + "players", + "2", + "games" + ] + } + }, + "response": [] + }, + { + "name": "Post -> Crea una nueva jugada", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"playerName\":\"Cassidy!!!\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/api/players/4/games", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "api", + "players", + "4", + "games" + ] + } + }, + "response": [] + }, + { + "name": "Get -> Retorna listado de jugadores y % medio de éxito", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "user", + "value": "Diego", + "type": "default" + } + ], + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/api/players", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "api", + "players" + ] + } + }, + "response": [] + }, + { + "name": "Get -> Retorna el % de jugadas ganas total", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "user", + "value": "Diego", + "type": "default" + } + ], + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/api/players/ranking/ranking", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "api", + "players", + "ranking", + "ranking" + ] + } + }, + "response": [] + }, + { + "name": "Get -> Retorna el último jugador", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "user", + "value": "Diego", + "type": "default" + } + ], + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/api/players/ranking/ranking", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "api", + "players", + "ranking", + "ranking" + ] + } + }, + "response": [] + }, + { + "name": "Get -> Retorna el primer jugador", + "protocolProfileBehavior": { + "disableBodyPruning": true + }, + "request": { + "method": "GET", + "header": [], + "body": { + "mode": "urlencoded", + "urlencoded": [ + { + "key": "user", + "value": "Diego", + "type": "default" + } + ], + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/api/players/ranking/firstplayer", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "api", + "players", + "ranking", + "firstplayer" + ] + } + }, + "response": [] + } + ] +} \ No newline at end of file diff --git a/README.md b/README.md index a116bee1e..558d35fd8 100644 --- a/README.md +++ b/README.md @@ -30,5 +30,5 @@ Ok POST /players/{id}/games: un jugador específic realitza una tirada Ok GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits Ok GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona) -GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit -GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit \ No newline at end of file +OK GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit +OK GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit \ No newline at end of file diff --git a/api/config/server.js b/api/config/server.js index fecb7ca7d..686e42b48 100644 --- a/api/config/server.js +++ b/api/config/server.js @@ -1,7 +1,8 @@ const express = require('express'); +const bodyparser = require('body-parser') + const players = require('../routes/players') const ranking = require('../routes/rankings') -const bodyparser = require('body-parser') class Server { constructor(){ @@ -10,6 +11,7 @@ class Server { this.port = process.env.PORT || '3000'; this.route(); } + route() { this.app.use('/api/players/', players); this.app.use('/api/players/', ranking); diff --git a/api/controllers/players.js b/api/controllers/players.js index a4a9d768d..92538dbfd 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -1,6 +1,5 @@ const {request, response} = require('express'); - const {Player, RollDice} = require('../config/sqlconnect'); // const bcrypt = require('bcryptjs'); @@ -15,7 +14,9 @@ const postPlayer = async (request, response) => { } catch (error) { console.log(error); - response.status(500).send('Llamar al administrador') + response.status(500).json({ + msg:'Llamar al administrador' + }) } }; @@ -24,17 +25,21 @@ const putPlayer = async (request, response) => { await Player.update(request.body,{ where: {_id: request.params.id} }); - response.json({success:'Se ha modificado el nombre del jugador'}) + response.json({ + success:'Se ha modificado el nombre del jugador' + }) } catch (error) { console.log(error); - response.status(500).send('Llamar al administrador') + response.status(500).json({ + msg:'Llamar al administrador' + }) } }; const getPlayer = async (request,response) => { const player = await Player.findAll({where:{_id: request.params.id}}); - response.send(player) + response.json(player) } // const createToken = (admin) => { diff --git a/api/controllers/rankings.js b/api/controllers/rankings.js index cc93a77cf..eacbebb75 100644 --- a/api/controllers/rankings.js +++ b/api/controllers/rankings.js @@ -2,12 +2,14 @@ const {request, response} = require('express'); const {Player, RollDice} = require('../config/sqlconnect') -const getPlayers = async (req,res) => { +const getPlayers = async (request, response) => { try { const players = await Player.findAll({attributes:['_id','playerName','winRate']}); - response.sendStatus(200).send({players}) + response.json(players) } catch (error) { - response.sendStatus(500).send('Llamar al Admin') + response.sendStatus(500).json({ + msg:'Llamar al Admin' + }) } } @@ -15,8 +17,11 @@ const getRanking = async (request, response) => { try { const totalGames = await RollDice.count() const winGames = await RollDice.count({where:{result:['Win']}}); - const winRate = ((winGames / totalGames)*100) - response.send(`El porcentaje jugadas ganadas es ${Math.round(winRate)}%`) + const winRate = Math.round(((winGames / totalGames)*100)) + response.json({ + msg: "El porcentaje jugadas ganadas es", + winRate + }) } catch (error) { response.sendStatus(500) } diff --git a/api/routes/rankings.js b/api/routes/rankings.js index 6c5f5dc86..3ae368d4c 100644 --- a/api/routes/rankings.js +++ b/api/routes/rankings.js @@ -1,14 +1,15 @@ const express = require('express'); const router = express.Router(); -const {getPlayers, getRanking, getLastPlayer, getFirstPlayer} = require('../controllers/rankings') +const {getRanking, getFirstPlayer, getLastPlayer, getPlayers} = require('../controllers/rankings') router.get('/', getPlayers); router.get('/ranking', getRanking); // Esta línea no funciona -router.get('/ranking/d', getRanking); +router.get('/ranking/ranking', getRanking); router.get('/ranking/lastplayer', getLastPlayer); //Aqui funciona router.get('/ranking/firstplayer', getFirstPlayer); + module.exports = router; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e4fc2542d..543693f04 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,2448 +1,8 @@ { "name": "dicegame", "version": "1.0.0", - "lockfileVersion": 2, + "lockfileVersion": 1, "requires": true, - "packages": { - "": { - "name": "dicegame", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "bcryptjs": "^2.4.3", - "body-parser": "^1.19.2", - "cors": "^2.8.5", - "dotenv": "^16.0.0", - "express": "^4.17.2", - "express-validator": "^6.14.0", - "joi": "^17.6.0", - "jwt-simple": "^0.5.6", - "moment": "^2.29.1", - "morgan": "^1.10.0", - "multer": "^1.4.4", - "mysql2": "^2.3.3", - "sequelize": "^6.16.1" - }, - "devDependencies": { - "nodemon": "^2.0.15" - } - }, - "node_modules/@hapi/hoek": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", - "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==" - }, - "node_modules/@hapi/topo": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", - "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/address": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", - "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", - "dependencies": { - "@hapi/hoek": "^9.0.0" - } - }, - "node_modules/@sideway/formula": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", - "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" - }, - "node_modules/@sideway/pinpoint": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", - "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" - }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "node_modules/@types/node": { - "version": "17.0.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", - "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==" - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", - "dependencies": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dependencies": { - "safe-buffer": "5.1.2" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/basic-auth/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/bcryptjs": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", - "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/body-parser": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", - "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.7", - "raw-body": "2.4.3", - "type-is": "~1.6.18" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "engines": [ - "node >= 0.8" - ], - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - } - }, - "node_modules/concat-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "node_modules/concat-stream/node_modules/readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/concat-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/concat-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/core-util-is": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", - "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dependencies": { - "object-assign": "^4", - "vary": "^1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "node_modules/denque": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", - "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/dotenv": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", - "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", - "engines": { - "node": ">=12" - } - }, - "node_modules/dottie": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", - "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", - "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", - "dependencies": { - "accepts": "~1.3.7", - "array-flatten": "1.1.1", - "body-parser": "1.19.1", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.4.1", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "~1.1.2", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "~1.1.2", - "fresh": "0.5.2", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.9.6", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.17.2", - "serve-static": "1.14.2", - "setprototypeof": "1.2.0", - "statuses": "~1.5.0", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/express-validator": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.14.0.tgz", - "integrity": "sha512-ZWHJfnRgePp3FKRSKMtnZVnD1s8ZchWD+jSl7UMseGIqhweCo1Z9916/xXBbJAa6PrA3pUZfkOvIsHZG4ZtIMw==", - "dependencies": { - "lodash": "^4.17.21", - "validator": "^13.7.0" - }, - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/express/node_modules/body-parser": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", - "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", - "dependencies": { - "bytes": "3.1.1", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "on-finished": "~2.3.0", - "qs": "6.9.6", - "raw-body": "2.4.2", - "type-is": "~1.6.18" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/bytes": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", - "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", - "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", - "dependencies": { - "bytes": "3.1.1", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/generate-function": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", - "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", - "dependencies": { - "is-property": "^1.0.2" - } - }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "dependencies": { - "ini": "2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", - "dev": true - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "dev": true - }, - "node_modules/http-errors": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", - "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", - "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflection": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", - "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==", - "engines": [ - "node >= 0.4.0" - ] - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-property": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", - "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "node_modules/isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "node_modules/joi": { - "version": "17.6.0", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", - "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", - "dependencies": { - "@hapi/hoek": "^9.0.0", - "@hapi/topo": "^5.0.0", - "@sideway/address": "^4.1.3", - "@sideway/formula": "^3.0.0", - "@sideway/pinpoint": "^2.0.0" - } - }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "node_modules/jwt-simple": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/jwt-simple/-/jwt-simple-0.5.6.tgz", - "integrity": "sha512-40aUybvhH9t2h71ncA1/1SbtTNCVZHgsTsTgqPUxGWDmUDrXyDf2wMNQKEbdBjbf4AI+fQhbECNTV6lWxQKUzg==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "dependencies": { - "json-buffer": "3.0.0" - } - }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" - }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, - "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.51.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", - "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.34", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", - "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", - "dependencies": { - "mime-db": "1.51.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, - "node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", - "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/moment": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", - "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", - "engines": { - "node": "*" - } - }, - "node_modules/moment-timezone": { - "version": "0.5.34", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", - "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", - "dependencies": { - "moment": ">= 2.9.0" - }, - "engines": { - "node": "*" - } - }, - "node_modules/morgan": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", - "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", - "dependencies": { - "basic-auth": "~2.0.1", - "debug": "2.6.9", - "depd": "~2.0.0", - "on-finished": "~2.3.0", - "on-headers": "~1.0.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/morgan/node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "node_modules/multer": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", - "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", - "dependencies": { - "append-field": "^1.0.0", - "busboy": "^0.2.11", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "on-finished": "^2.3.0", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/multer/node_modules/busboy": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", - "dependencies": { - "dicer": "0.2.5", - "readable-stream": "1.1.x" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/multer/node_modules/dicer": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", - "dependencies": { - "readable-stream": "1.1.x", - "streamsearch": "0.1.2" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/mysql2": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", - "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", - "dependencies": { - "denque": "^2.0.1", - "generate-function": "^2.3.1", - "iconv-lite": "^0.6.3", - "long": "^4.0.0", - "lru-cache": "^6.0.0", - "named-placeholders": "^1.1.2", - "seq-queue": "^0.0.5", - "sqlstring": "^2.3.2" - }, - "engines": { - "node": ">= 8.0" - } - }, - "node_modules/mysql2/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/named-placeholders": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", - "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", - "dependencies": { - "lru-cache": "^4.1.3" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/named-placeholders/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" - } - }, - "node_modules/named-placeholders/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, - "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/nodemon": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", - "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5", - "update-notifier": "^5.1.0" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=8.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "node_modules/pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", - "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/qs": { - "version": "6.9.6", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", - "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", - "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "1.8.1", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, - "node_modules/retry-as-promised": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-5.0.0.tgz", - "integrity": "sha512-6S+5LvtTl2ggBumk04hBo/4Uf6fRJUwIgunGZ7CYEBCeufGFW1Pu6ucUf/UskHeWOIsUcLOGLFXPig5tR5V1nA==" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "0.17.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", - "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", - "dependencies": { - "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "1.8.1", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/seq-queue": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", - "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" - }, - "node_modules/sequelize": { - "version": "6.16.1", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.16.1.tgz", - "integrity": "sha512-YFGqrwkmEhSbpZBxay5+PRKMiZNNUJzgIixCyFkLm9+/5Rqq5jBADEjTAC8RYHzwsOGNboYh18imXrYNCjBZCQ==", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/sequelize" - } - ], - "dependencies": { - "@types/debug": "^4.1.7", - "debug": "^4.3.3", - "dottie": "^2.0.2", - "inflection": "^1.13.1", - "lodash": "^4.17.21", - "moment": "^2.29.1", - "moment-timezone": "^0.5.34", - "pg-connection-string": "^2.5.0", - "retry-as-promised": "^5.0.0", - "semver": "^7.3.5", - "sequelize-pool": "^7.1.0", - "toposort-class": "^1.0.1", - "uuid": "^8.3.2", - "validator": "^13.7.0", - "wkx": "^0.5.0" - }, - "engines": { - "node": ">=10.0.0" - }, - "peerDependenciesMeta": { - "ibm_db": { - "optional": true - }, - "mariadb": { - "optional": true - }, - "mysql2": { - "optional": true - }, - "pg": { - "optional": true - }, - "pg-hstore": { - "optional": true - }, - "snowflake-sdk": { - "optional": true - }, - "sqlite3": { - "optional": true - }, - "tedious": { - "optional": true - } - } - }, - "node_modules/sequelize-pool": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", - "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/sequelize/node_modules/debug": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", - "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/sequelize/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/sequelize/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/serve-static": { - "version": "1.14.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", - "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.2" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/signal-exit": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", - "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", - "dev": true - }, - "node_modules/sqlstring": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", - "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/toposort-class": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/update-notifier/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wkx": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", - "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "engines": { - "node": ">=0.4" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - }, "dependencies": { "@hapi/hoek": { "version": "9.2.1", @@ -4050,11 +1610,6 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -4066,6 +1621,11 @@ "strip-ansi": "^6.0.1" } }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", From a7724c80739f7cf9a2b84793d3b755bfb807b515 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Mar 2022 10:04:06 +0100 Subject: [PATCH 34/66] Update Readme --- README.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 558d35fd8..f183a03e6 100644 --- a/README.md +++ b/README.md @@ -20,15 +20,15 @@ El software ha de respectar els principals patrons de disseny. ---- Has de tenir en compte els següents detalls de construcció: - -Ok POST /players: crea un jugador -Ok PUT /players: modifica el nom del jugador -Ok DELETE /players/{id}/games: elimina les tirades del jugador -Ok GET /players/{id}/games: retorna el llistat de jugades per un jugador. - -Ok POST /players/{id}/games: un jugador específic realitza una tirada - -Ok GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits -Ok GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona) -OK GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit -OK GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit \ No newline at end of file +### Jugador ### +**POST /players: crea un jugador +**PUT /players: modifica el nom del jugador +**DELETE /players/{id}/games: elimina les tirades del jugador +**GET /players/{id}/games: retorna el llistat de jugades per un jugador. +### Jugadas ### +**POST /players/{id}/games: un jugador específic realitza una tirada +### Jugadores ### +**GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits +**GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona) +**GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit +**GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit \ No newline at end of file From 89b10b33688c5782c268124a3f7e37208b810c71 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Mar 2022 10:04:57 +0100 Subject: [PATCH 35/66] Update Readme --- README.md | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index f183a03e6..6f7999d30 100644 --- a/README.md +++ b/README.md @@ -21,14 +21,14 @@ El software ha de respectar els principals patrons de disseny. Has de tenir en compte els següents detalls de construcció: ### Jugador ### -**POST /players: crea un jugador -**PUT /players: modifica el nom del jugador -**DELETE /players/{id}/games: elimina les tirades del jugador -**GET /players/{id}/games: retorna el llistat de jugades per un jugador. +**POST /players: crea un jugador. +**PUT /players: modifica el nom del jugador. +**DELETE /players/{id}/games: elimina les tirades del jugador. +**GET /players/{id}/games: retorna el llistat de jugades per un jugador. ### Jugadas ### -**POST /players/{id}/games: un jugador específic realitza una tirada +**POST /players/{id}/games: un jugador específic realitza una tirada. ### Jugadores ### -**GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits -**GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona) -**GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit -**GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit \ No newline at end of file +**GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. +**GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). +**GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. +**GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. \ No newline at end of file From 603e6702af1429f9583af8c0b95376f64c8dfa93 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Mar 2022 10:05:29 +0100 Subject: [PATCH 36/66] Upd Readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6f7999d30..80a7a9baa 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ Has de tenir en compte els següents detalls de construcció: **GET /players/{id}/games: retorna el llistat de jugades per un jugador. ### Jugadas ### **POST /players/{id}/games: un jugador específic realitza una tirada. -### Jugadores ### +### Ranking ### **GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. **GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). **GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. From a2a385fd26545b642acd3d5d2efa24cd412594c6 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Mar 2022 10:07:02 +0100 Subject: [PATCH 37/66] Upd --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 80a7a9baa..9096ef894 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -

Welcome to Node Rest Server👋

+

Welcome to Node Dice Game👋

**Para iniciar servidor** ``npm i``-> Instala modulos requeridos. From d48799120dccc122469dc65085900b0bb3c8b98c Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Thu, 10 Mar 2022 10:08:09 +0100 Subject: [PATCH 38/66] Update README.md --- README.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 9096ef894..f5a46f030 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,7 @@ -

Welcome to Node Dice Game👋

+

Welcome to Dice Game Node API Rest Server👋

+Proyecto creado con: +Javascript -> NodeJS + **Para iniciar servidor** ``npm i``-> Instala modulos requeridos. @@ -31,4 +34,4 @@ Has de tenir en compte els següents detalls de construcció: **GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. **GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). **GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. -**GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. \ No newline at end of file +**GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. From 31fa0ebcc2875ad18491ad7ada95fb9e300c13df Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Thu, 10 Mar 2022 10:10:35 +0100 Subject: [PATCH 39/66] Update README.md --- README.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f5a46f030..466bd858e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,12 @@

Welcome to Dice Game Node API Rest Server👋

Proyecto creado con: -Javascript -> NodeJS +**Javascript -> NodeJS. +**Express. +**Bodyparser. +**Sequelize. +**DotEnv. -**Para iniciar servidor** +###Para iniciar servidor### ``npm i``-> Instala modulos requeridos. From 9c4e40bfb28f4b0b3a29e918ce9cf2fbbd9bfe01 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Mar 2022 10:12:20 +0100 Subject: [PATCH 40/66] UpdReadme --- README.md | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 9096ef894..cb61eeb0a 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,12 @@

Welcome to Node Dice Game👋

-**Para iniciar servidor** +Proyecto creado con: +**Javascript -> NodeJS. +**Express. +**Bodyparser. +**Sequelize. +**DotEnv. + +###Para iniciar servidor### ``npm i``-> Instala modulos requeridos. From 9792de4913d731ae5168000f7d6758d3e059367b Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Mar 2022 10:13:38 +0100 Subject: [PATCH 41/66] UpdReadme --- README.md | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 4f34f7100..04dfd1b86 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,5 @@ -<<<<<<< HEAD -

Welcome to Node Dice Game👋

-=======

Welcome to Dice Game Node API Rest Server👋

->>>>>>> 31fa0ebcc2875ad18491ad7ada95fb9e300c13df + Proyecto creado con: **Javascript -> NodeJS. **Express. @@ -10,11 +7,8 @@ Proyecto creado con: **Sequelize. **DotEnv. -<<<<<<< HEAD ###Para iniciar servidor### -======= -###Para iniciar servidor### ->>>>>>> 31fa0ebcc2875ad18491ad7ada95fb9e300c13df + ``npm i``-> Instala modulos requeridos. From e73a699dea2ab01ada9e057673d0d58f1a908e06 Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Mar 2022 10:14:16 +0100 Subject: [PATCH 42/66] UpdReadme --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 04dfd1b86..016a47f82 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@

Welcome to Dice Game Node API Rest Server👋

Proyecto creado con: -**Javascript -> NodeJS. -**Express. -**Bodyparser. -**Sequelize. -**DotEnv. +*Javascript -> NodeJS. +*Express. +*Bodyparser. +*Sequelize. +*DotEnv. ###Para iniciar servidor### @@ -30,14 +30,14 @@ El software ha de respectar els principals patrons de disseny. Has de tenir en compte els següents detalls de construcció: ### Jugador ### -**POST /players: crea un jugador. -**PUT /players: modifica el nom del jugador. -**DELETE /players/{id}/games: elimina les tirades del jugador. -**GET /players/{id}/games: retorna el llistat de jugades per un jugador. +*POST /players: crea un jugador. +*PUT /players: modifica el nom del jugador. +*DELETE /players/{id}/games: elimina les tirades del jugador. +*GET /players/{id}/games: retorna el llistat de jugades per un jugador. ### Jugadas ### -**POST /players/{id}/games: un jugador específic realitza una tirada. +*POST /players/{id}/games: un jugador específic realitza una tirada. ### Ranking ### -**GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. -**GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). -**GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. -**GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. +*GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. +*GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). +*GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. +*GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. From e9f5dc8f6920e2a3156547c79f7dd50c1fb2e9bd Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Mar 2022 10:15:25 +0100 Subject: [PATCH 43/66] UpdReadme --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 016a47f82..f537228e1 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@

Welcome to Dice Game Node API Rest Server👋

Proyecto creado con: -*Javascript -> NodeJS. -*Express. -*Bodyparser. -*Sequelize. -*DotEnv. +*Javascript -> NodeJS. +*Express. +*Bodyparser. +*Sequelize. +*DotEnv. ###Para iniciar servidor### @@ -30,14 +30,14 @@ El software ha de respectar els principals patrons de disseny. Has de tenir en compte els següents detalls de construcció: ### Jugador ### -*POST /players: crea un jugador. -*PUT /players: modifica el nom del jugador. -*DELETE /players/{id}/games: elimina les tirades del jugador. -*GET /players/{id}/games: retorna el llistat de jugades per un jugador. +*POST /players: crea un jugador. +*PUT /players: modifica el nom del jugador. +*DELETE /players/{id}/games: elimina les tirades del jugador. +*GET /players/{id}/games: retorna el llistat de jugades per un jugador. ### Jugadas ### -*POST /players/{id}/games: un jugador específic realitza una tirada. +*POST /players/{id}/games: un jugador específic realitza una tirada. ### Ranking ### -*GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. -*GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). -*GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. -*GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. +*GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. +*GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). +*GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. +*GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. \ No newline at end of file From ed844f4a3423b345ae79085dc0ca8badd52f3afa Mon Sep 17 00:00:00 2001 From: Mauricio Date: Thu, 10 Mar 2022 10:16:36 +0100 Subject: [PATCH 44/66] UpdReadme --- README.md | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index f537228e1..459d3c3e4 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,11 @@

Welcome to Dice Game Node API Rest Server👋

Proyecto creado con: -*Javascript -> NodeJS. -*Express. -*Bodyparser. -*Sequelize. -*DotEnv. +* Javascript -> NodeJS. +* Express. +* Bodyparser. +* Sequelize. +* DotEnv. ###Para iniciar servidor### @@ -30,14 +30,14 @@ El software ha de respectar els principals patrons de disseny. Has de tenir en compte els següents detalls de construcció: ### Jugador ### -*POST /players: crea un jugador. -*PUT /players: modifica el nom del jugador. -*DELETE /players/{id}/games: elimina les tirades del jugador. -*GET /players/{id}/games: retorna el llistat de jugades per un jugador. +* POST /players: crea un jugador. +* PUT /players: modifica el nom del jugador. +* DELETE /players/{id}/games: elimina les tirades del jugador. +* GET /players/{id}/games: retorna el llistat de jugades per un jugador. ### Jugadas ### -*POST /players/{id}/games: un jugador específic realitza una tirada. +* POST /players/{id}/games: un jugador específic realitza una tirada. ### Ranking ### -*GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. -*GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). -*GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. -*GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. \ No newline at end of file +* GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. +* GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). +* GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. +* GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. \ No newline at end of file From 483852d8e27c61fd92ed456b191c13c51f058158 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Thu, 10 Mar 2022 10:17:13 +0100 Subject: [PATCH 45/66] Update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 459d3c3e4..7a2c42bc9 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Proyecto creado con: * Sequelize. * DotEnv. -###Para iniciar servidor### +### Para iniciar servidor ### ``npm i``-> Instala modulos requeridos. @@ -40,4 +40,4 @@ Has de tenir en compte els següents detalls de construcció: * GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. * GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). * GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. -* GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. \ No newline at end of file +* GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. From bf4da52c722dc31e5b0d2ee1509ee77a8e3881d8 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Thu, 10 Mar 2022 10:18:26 +0100 Subject: [PATCH 46/66] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 7a2c42bc9..cfcdf2fbb 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,6 @@ Has de tenir en compte els següents detalls de construcció: * POST /players/{id}/games: un jugador específic realitza una tirada. ### Ranking ### * GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. -* GET /players/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors (No funciona). +* GET /players/ranking/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors. * GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. * GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. From 4bbe01605aed89734037bed5251aa95b4fb6ace8 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Thu, 10 Mar 2022 11:43:47 +0100 Subject: [PATCH 47/66] Update package.json --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 557441736..4db29727f 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "index.js", "scripts": { "test": "NO", - "start": "nodemon ./api/app.js" + "start": "node ./api/app.js" }, "repository": { "type": "git", From 22d05bc8fd9e317f31acff6b33b9354d20332fc5 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Thu, 17 Mar 2022 10:19:52 +0100 Subject: [PATCH 48/66] ruta fantasma finalizada --- api/controllers/players.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/api/controllers/players.js b/api/controllers/players.js index 92538dbfd..ee526b3a4 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -19,6 +19,7 @@ const postPlayer = async (request, response) => { }) } }; + const putPlayer = async (request, response) => { try { @@ -38,8 +39,9 @@ const putPlayer = async (request, response) => { }; const getPlayer = async (request,response) => { - const player = await Player.findAll({where:{_id: request.params.id}}); - response.json(player) + const {id} = reques.params.id + const player = await Player.findAll({where:{_id: id}}); + response.json(player) } // const createToken = (admin) => { From 433660fbd41fc2cfe68e972f410b6b72d5a07ed2 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Mon, 2 May 2022 12:14:31 +0200 Subject: [PATCH 49/66] Delete README.md --- api/controllers/README.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 api/controllers/README.md diff --git a/api/controllers/README.md b/api/controllers/README.md deleted file mode 100644 index c2c19c1e3..000000000 --- a/api/controllers/README.md +++ /dev/null @@ -1,3 +0,0 @@ -### Controladores -Archivo controlador de ejemplo. -En el programamos las acciones y operaciones sobre nuestra base de datos, en este caso para obtener los datos de un usuario. \ No newline at end of file From 048be54fbcd83b705f16fa40b8a6e221677ebb72 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Mon, 2 May 2022 12:14:43 +0200 Subject: [PATCH 50/66] Delete README.md --- api/database/README.md | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 api/database/README.md diff --git a/api/database/README.md b/api/database/README.md deleted file mode 100644 index ebaf36fda..000000000 --- a/api/database/README.md +++ /dev/null @@ -1,2 +0,0 @@ -### Bases de datos -Lugar donde se almacena el JSON \ No newline at end of file From 7870256c7ce8130446e1e189bc28f9e7ac8d628f Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Mon, 2 May 2022 12:14:54 +0200 Subject: [PATCH 51/66] Delete README.md --- api/middlewares/README.md | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 api/middlewares/README.md diff --git a/api/middlewares/README.md b/api/middlewares/README.md deleted file mode 100644 index ec8117a21..000000000 --- a/api/middlewares/README.md +++ /dev/null @@ -1,3 +0,0 @@ -### Middlewares -Archivo con el middleware para validar la autenticación del usuario. -Cabecera Cache-control: no-cache \ No newline at end of file From cc92b9a376f824a0c2efe9359a74a8e0d9b74289 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Mon, 2 May 2022 12:15:03 +0200 Subject: [PATCH 52/66] Delete README.md --- api/models/README.md | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 api/models/README.md diff --git a/api/models/README.md b/api/models/README.md deleted file mode 100644 index d428d9459..000000000 --- a/api/models/README.md +++ /dev/null @@ -1,2 +0,0 @@ -### Models -Para crear los esquema y modelos de usuarios \ No newline at end of file From 9cfdedc6838a60dde1f969b2e2560db8d42efb1d Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Mon, 2 May 2022 12:15:12 +0200 Subject: [PATCH 53/66] Delete README.md --- api/routes/README.md | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 api/routes/README.md diff --git a/api/routes/README.md b/api/routes/README.md deleted file mode 100644 index 5f4aab22a..000000000 --- a/api/routes/README.md +++ /dev/null @@ -1,2 +0,0 @@ -### Routes -Archivo en el que definimos las rutas (path) a las que responderá nuestra aplicación y en ellas se encontrará la lógica a ejecutar. \ No newline at end of file From b268e0e1493a0ba142596b3578fd271c430b539a Mon Sep 17 00:00:00 2001 From: molivaresr Date: Fri, 6 May 2022 10:43:44 +0200 Subject: [PATCH 54/66] Fixing details --- api/config/config.js | 17 + api/config/sqlconnect.js | 7 +- api/controllers/players.js | 27 - env.template | 7 + package-lock.json | 2452 +++++++++++++++++++++++++++++++++++- 5 files changed, 2474 insertions(+), 36 deletions(-) create mode 100644 api/config/config.js create mode 100644 env.template diff --git a/api/config/config.js b/api/config/config.js new file mode 100644 index 000000000..85071edd2 --- /dev/null +++ b/api/config/config.js @@ -0,0 +1,17 @@ +require('dotenv').config(); + +const { MYSQL_USER } = process.env +const { MYSQL_PASSWORD } = process.env +const { MYSQL_DATABASE } = process.env +const { MYSQL_HOST } = process.env +const { MYSQL_PORT } = process.env +const { MYSQL_DIALECT } = process.env + +module.exports = { + MYSQL_USER, + MYSQL_PASSWORD, + MYSQL_DATABASE, + MYSQL_HOST, + MYSQL_PORT, + MYSQL_DIALECT, +} \ No newline at end of file diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js index 5211b7071..5f9c20497 100644 --- a/api/config/sqlconnect.js +++ b/api/config/sqlconnect.js @@ -2,21 +2,22 @@ const {Sequelize} = require('sequelize'); const PlayerModel = require('../models/player'); const RollDiceModel = require('../models/rollDice'); const mysql = require('mysql2'); +const config = require('../config/config') // Conecta Base de Datos -const sequelize = new Sequelize('dice','root','123456789',{host:'localhost',dialect: 'mysql'}); async function connectDb () { try { - const connection = mysql.createConnection({host:'localhost', user:'root', password:'123456789'}); + const connection = mysql.createConnection({host:config.MYSQL_HOST, user:config.MYSQL_USER, password:config.MYSQL_PASSWORD}); connection.query("CREATE DATABASE IF NOT EXISTS dice", function (err){ - if(err) throw err; + if(err) throw err; }) } catch (error) { console.error('Unable to connect to the database:', error); } } +const sequelize = new Sequelize(config.MYSQL_DATABASE,config.MYSQL_USER,config.MYSQL_PASSWORD,{host:config.MYSQL_HOST,dialect: config.MYSQL_DIALECT}); const Player = PlayerModel(sequelize, Sequelize); const RollDice = RollDiceModel(sequelize, Sequelize); diff --git a/api/controllers/players.js b/api/controllers/players.js index ee526b3a4..85eb2601d 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -2,11 +2,6 @@ const {request, response} = require('express'); const {Player, RollDice} = require('../config/sqlconnect'); -// const bcrypt = require('bcryptjs'); -// const {check, validationResult} = require('express-validator'); -// const moment = require('moment'); -// const jwt = require('jwt-simple'); - const postPlayer = async (request, response) => { try { const player = await Player.create(request.body); @@ -44,26 +39,4 @@ const getPlayer = async (request,response) => { response.json(player) } -// const createToken = (admin) => { -// const payLoad = { -// admin: admin, -// createdAt: moment().unix(), -// expiredAt: moment().add(5, 'minutes').unix() -// } -// return jwt.encode(payLoad, 'frase secreta'); -// } - -// const login = async (request, response) => { -// const admin = await Player.findOne({where:{email:req.body.email}}); -// if(admin){ -// const equal = bcrypt.compareSync(request.body.password, user.password); -// if(equal) { -// response.json({success: createToken(admin)}) -// } else { -// response.json({error: 'Error Usuario y/o contraseña incorrectos'}) -// } -// } else { -// response.json({error:'Usuario y/o contraseña incorrectos'}) -// } -// } module.exports = {postPlayer, putPlayer, getPlayer} \ No newline at end of file diff --git a/env.template b/env.template new file mode 100644 index 000000000..3be34ea53 --- /dev/null +++ b/env.template @@ -0,0 +1,7 @@ +PORT = 8080 /* Modifique el puerto*/ +MYSQL_USER= /* Modifique su usuario administrador*/ +MYSQL_PASSWORD = /* Modifique por su contraseña de administrador*/ +MYSQL_DATABASE = dice /* Modifique el nombre de la BD*/ +MYSQL_HOST = localhost /* Modifique la dirección del host*/ +MYSQL_PORT = 3306 /* Modifique el puerto de host*/ +MYSQL_DIALECT = mysql /* mysql por defecto*/ \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 543693f04..e4fc2542d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,8 +1,2448 @@ { "name": "dicegame", "version": "1.0.0", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "dicegame", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "bcryptjs": "^2.4.3", + "body-parser": "^1.19.2", + "cors": "^2.8.5", + "dotenv": "^16.0.0", + "express": "^4.17.2", + "express-validator": "^6.14.0", + "joi": "^17.6.0", + "jwt-simple": "^0.5.6", + "moment": "^2.29.1", + "morgan": "^1.10.0", + "multer": "^1.4.4", + "mysql2": "^2.3.3", + "sequelize": "^6.16.1" + }, + "devDependencies": { + "nodemon": "^2.0.15" + } + }, + "node_modules/@hapi/hoek": { + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.2.1.tgz", + "integrity": "sha512-gfta+H8aziZsm8pZa0vj04KO6biEiisppNgA1kbJvFrrWu9Vm7eaUEy76DIxsuTaWvti5fkJVhllWc6ZTE+Mdw==" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-5.1.0.tgz", + "integrity": "sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/@sideway/address/-/address-4.1.3.tgz", + "integrity": "sha512-8ncEUtmnTsMmL7z1YPB47kPUq7LpKWJNFPsRzHiIajGC5uXlWGn+AmkYPcHNl8S4tcEGx+cnORnNYaw2wvL+LQ==", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sideway/formula/-/formula-3.0.0.tgz", + "integrity": "sha512-vHe7wZ4NOXVfkoRb8T5otiENVlT7a3IAiw7H5M2+GO+9CDgcVUUsX1zalAztCmwyOr2RUTGJdgB+ZvSVqmdHmg==" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sideway/pinpoint/-/pinpoint-2.0.0.tgz", + "integrity": "sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==" + }, + "node_modules/@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "dependencies": { + "defer-to-connect": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@types/debug": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", + "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.31", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", + "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" + }, + "node_modules/@types/node": { + "version": "17.0.17", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.17.tgz", + "integrity": "sha512-e8PUNQy1HgJGV3iU/Bp2+D/DXh3PYeyli8LgIwsQcs1Ar1LoaWHSIT6Rw+H2rNJmiq6SNWiDytfx8+gYj7wDHw==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dependencies": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-align": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", + "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "dev": true, + "dependencies": { + "string-width": "^4.1.0" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.7", + "raw-body": "2.4.3", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/boxen": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", + "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", + "dev": true, + "dependencies": { + "ansi-align": "^3.0.0", + "camelcase": "^6.2.0", + "chalk": "^4.1.0", + "cli-boxes": "^2.2.1", + "string-width": "^4.2.2", + "type-fest": "^0.20.2", + "widest-line": "^3.1.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cacheable-request/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacheable-request/node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "dependencies": { + "mimic-response": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "node_modules/denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", + "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", + "engines": { + "node": ">=12" + } + }, + "node_modules/dottie": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", + "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" + }, + "node_modules/duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.17.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.2.tgz", + "integrity": "sha512-oxlxJxcQlYwqPWKVJJtvQiwHgosH/LrLSPA+H4UxpyvSS6jC5aH+5MoHFM+KABgTOt0APue4w66Ha8jCUo9QGg==", + "dependencies": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.4.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.9.6", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.17.2", + "serve-static": "1.14.2", + "setprototypeof": "1.2.0", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-validator": { + "version": "6.14.0", + "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-6.14.0.tgz", + "integrity": "sha512-ZWHJfnRgePp3FKRSKMtnZVnD1s8ZchWD+jSl7UMseGIqhweCo1Z9916/xXBbJAa6PrA3pUZfkOvIsHZG4ZtIMw==", + "dependencies": { + "lodash": "^4.17.21", + "validator": "^13.7.0" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz", + "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==", + "dependencies": { + "bytes": "3.1.1", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.9.6", + "raw-body": "2.4.2", + "type-is": "~1.6.18" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/bytes": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz", + "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz", + "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==", + "dependencies": { + "bytes": "3.1.1", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dependencies": { + "is-property": "^1.0.2" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/global-dirs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", + "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, + "dependencies": { + "ini": "2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "dependencies": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-errors": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "dev": true + }, + "node_modules/import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflection": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", + "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==", + "engines": [ + "node >= 0.4.0" + ] + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-installed-globally": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", + "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "dev": true, + "dependencies": { + "global-dirs": "^3.0.0", + "is-path-inside": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha1-V/4cTkhHTt1lsJkR8msc1Ald2oQ=" + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "node_modules/is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "node_modules/isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + }, + "node_modules/joi": { + "version": "17.6.0", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.6.0.tgz", + "integrity": "sha512-OX5dG6DTbcr/kbMFj0KGYxuew69HPcAE3K/sZpEV2nP6e/j/C0HV+HNiBPCASxdx5T7DMoa0s8UeHWMnb6n2zw==", + "dependencies": { + "@hapi/hoek": "^9.0.0", + "@hapi/topo": "^5.0.0", + "@sideway/address": "^4.1.3", + "@sideway/formula": "^3.0.0", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "node_modules/jwt-simple": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/jwt-simple/-/jwt-simple-0.5.6.tgz", + "integrity": "sha512-40aUybvhH9t2h71ncA1/1SbtTNCVZHgsTsTgqPUxGWDmUDrXyDf2wMNQKEbdBjbf4AI+fQhbECNTV6lWxQKUzg==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.0" + } + }, + "node_modules/latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "dependencies": { + "package-json": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, + "node_modules/lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", + "dependencies": { + "mime-db": "1.51.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "node_modules/mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dependencies": { + "minimist": "^1.2.5" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "node_modules/multer": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", + "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^0.2.11", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "on-finished": "^2.3.0", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/multer/node_modules/busboy": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", + "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "dependencies": { + "dicer": "0.2.5", + "readable-stream": "1.1.x" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/multer/node_modules/dicer": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", + "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "dependencies": { + "readable-stream": "1.1.x", + "streamsearch": "0.1.2" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mysql2": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", + "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "dependencies": { + "denque": "^2.0.1", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^4.0.0", + "lru-cache": "^6.0.0", + "named-placeholders": "^1.1.2", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/named-placeholders": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", + "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "dependencies": { + "lru-cache": "^4.1.3" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/named-placeholders/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/named-placeholders/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" + }, + "node_modules/negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", + "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.0.4", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5", + "update-notifier": "^5.1.0" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", + "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "dependencies": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "dependencies": { + "escape-goat": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qs": { + "version": "6.9.6", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz", + "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==", + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", + "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "1.8.1", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "dependencies": { + "rc": "^1.2.8" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "dependencies": { + "lowercase-keys": "^1.0.0" + } + }, + "node_modules/retry-as-promised": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-5.0.0.tgz", + "integrity": "sha512-6S+5LvtTl2ggBumk04hBo/4Uf6fRJUwIgunGZ7CYEBCeufGFW1Pu6ucUf/UskHeWOIsUcLOGLFXPig5tR5V1nA==" + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "dependencies": { + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/semver-diff/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", + "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", + "dependencies": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "1.8.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha1-1WgS4cAXpuTnw+Ojeh2m143TyT4=" + }, + "node_modules/sequelize": { + "version": "6.16.1", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.16.1.tgz", + "integrity": "sha512-YFGqrwkmEhSbpZBxay5+PRKMiZNNUJzgIixCyFkLm9+/5Rqq5jBADEjTAC8RYHzwsOGNboYh18imXrYNCjBZCQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/sequelize" + } + ], + "dependencies": { + "@types/debug": "^4.1.7", + "debug": "^4.3.3", + "dottie": "^2.0.2", + "inflection": "^1.13.1", + "lodash": "^4.17.21", + "moment": "^2.29.1", + "moment-timezone": "^0.5.34", + "pg-connection-string": "^2.5.0", + "retry-as-promised": "^5.0.0", + "semver": "^7.3.5", + "sequelize-pool": "^7.1.0", + "toposort-class": "^1.0.1", + "uuid": "^8.3.2", + "validator": "^13.7.0", + "wkx": "^0.5.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependenciesMeta": { + "ibm_db": { + "optional": true + }, + "mariadb": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-hstore": { + "optional": true + }, + "snowflake-sdk": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "tedious": { + "optional": true + } + } + }, + "node_modules/sequelize-pool": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", + "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/sequelize/node_modules/debug": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/sequelize/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/sequelize/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/serve-static": { + "version": "1.14.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", + "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/signal-exit": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.6.tgz", + "integrity": "sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ==", + "dev": true + }, + "node_modules/sqlstring": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.2.tgz", + "integrity": "sha512-vF4ZbYdKS8OnoJAWBmMxCQDkiEBkGQYU7UZPtL8flbDRSNkhaXvRJ279ZtI6M+zDaQovVU4tuRgzK5fVhvFAhg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamsearch": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", + "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort-class": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", + "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-notifier": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", + "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", + "dev": true, + "dependencies": { + "boxen": "^5.0.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.4.0", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.4", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/yeoman/update-notifier?sponsor=1" + } + }, + "node_modules/update-notifier/node_modules/semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "dependencies": { + "prepend-http": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validator": { + "version": "13.7.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", + "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wkx": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", + "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + }, "dependencies": { "@hapi/hoek": { "version": "9.2.1", @@ -1610,6 +4050,11 @@ "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" + }, "string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -1621,11 +4066,6 @@ "strip-ansi": "^6.0.1" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", From f2bd21adb020ac20d2ce2bd65fd6024d95355207 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Fri, 6 May 2022 11:10:38 +0200 Subject: [PATCH 55/66] Update instrucciones --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index cfcdf2fbb..aa30af96a 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,9 @@ Proyecto creado con: * DotEnv. ### Para iniciar servidor ### - +**Importante** : Es necesario configurar las variables de entorno se puede crear el archivo .env a partir de env.template: +- Puerto por defecto: El servidor arranca en el puerto 8080, puedes modificarlo en PORT=8080 +- Datos de MySQL: Completa con tu configuración de acceso a MYSQL (Usuario, Password, Host y puerto), modificandolos campos que comiencen con MYSQL. **Atención** MYSQL_DATABASE, es el nombre de la base de datos, por defecto: dice_mauricio y MYSQL_DIALECT no se debe modificar, ya que Sequelize esta optimizado para utilizar mysql. ``npm i``-> Instala modulos requeridos. From 0e535d549b7816ec59bbd4a0cd34f79efbf712ac Mon Sep 17 00:00:00 2001 From: molivaresr Date: Fri, 6 May 2022 11:11:37 +0200 Subject: [PATCH 56/66] Config fixed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Corrección de errores al inicializar --- .gitignore | 3 ++- api/config/sqlconnect.js | 2 +- env.template | 14 +++++++------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/.gitignore b/.gitignore index 5bf806752..7a04ad2bc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ node_modules/ ##MacOs -.DS_Store \ No newline at end of file +.DS_Store +.env \ No newline at end of file diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js index 5f9c20497..6dcf2c85e 100644 --- a/api/config/sqlconnect.js +++ b/api/config/sqlconnect.js @@ -9,7 +9,7 @@ const config = require('../config/config') async function connectDb () { try { const connection = mysql.createConnection({host:config.MYSQL_HOST, user:config.MYSQL_USER, password:config.MYSQL_PASSWORD}); - connection.query("CREATE DATABASE IF NOT EXISTS dice", function (err){ + connection.query(`CREATE DATABASE IF NOT EXISTS \`${config.MYSQL_DATABASE}\`;`, function (err){ if(err) throw err; }) } catch (error) { diff --git a/env.template b/env.template index 3be34ea53..9d3735312 100644 --- a/env.template +++ b/env.template @@ -1,7 +1,7 @@ -PORT = 8080 /* Modifique el puerto*/ -MYSQL_USER= /* Modifique su usuario administrador*/ -MYSQL_PASSWORD = /* Modifique por su contraseña de administrador*/ -MYSQL_DATABASE = dice /* Modifique el nombre de la BD*/ -MYSQL_HOST = localhost /* Modifique la dirección del host*/ -MYSQL_PORT = 3306 /* Modifique el puerto de host*/ -MYSQL_DIALECT = mysql /* mysql por defecto*/ \ No newline at end of file +PORT = 8080 +MYSQL_USER= +MYSQL_PASSWORD = +MYSQL_HOST = localhost +MYSQL_PORT = 3306 +MYSQL_DATABASE = dice_mauricio +MYSQL_DIALECT = mysql \ No newline at end of file From 89383f3d3837fd049b308f8cf4d5f8f3ff5d3ab4 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Fri, 6 May 2022 11:13:11 +0200 Subject: [PATCH 57/66] Delete .env --- .env | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index d3e4ac460..000000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -PORT = 8080 \ No newline at end of file From bc79e9326dbb3f586a68609ee7d34d83ebf009c6 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Fri, 6 May 2022 11:14:24 +0200 Subject: [PATCH 58/66] Update README.md --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index aa30af96a..81efcaf75 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,9 @@ Proyecto creado con: ### Para iniciar servidor ### **Importante** : Es necesario configurar las variables de entorno se puede crear el archivo .env a partir de env.template: -- Puerto por defecto: El servidor arranca en el puerto 8080, puedes modificarlo en PORT=8080 -- Datos de MySQL: Completa con tu configuración de acceso a MYSQL (Usuario, Password, Host y puerto), modificandolos campos que comiencen con MYSQL. **Atención** MYSQL_DATABASE, es el nombre de la base de datos, por defecto: dice_mauricio y MYSQL_DIALECT no se debe modificar, ya que Sequelize esta optimizado para utilizar mysql. +- Puerto por defecto: El servidor arranca en el puerto 8080, puedes modificarlo en ``PORT=8080``. +- Datos de MySQL: Completa con tu configuración de acceso a MYSQL (Usuario, Password, Host y puerto), modificandolos campos que comiencen con MYSQL. +**Atención** ``MYSQL_DATABASE``, es el nombre de la base de datos, por defecto: ``dice_mauricio`` y ``MYSQL_DIALECT`` no se debe modificar, ya que Sequelize esta optimizado para utilizar mysql. ``npm i``-> Instala modulos requeridos. From 99f3f89a72ab1c5fad237f5f87eebbfe8d94aa56 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Fri, 6 May 2022 11:14:47 +0200 Subject: [PATCH 59/66] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 81efcaf75..aa63422f1 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Proyecto creado con: ### Para iniciar servidor ### **Importante** : Es necesario configurar las variables de entorno se puede crear el archivo .env a partir de env.template: - Puerto por defecto: El servidor arranca en el puerto 8080, puedes modificarlo en ``PORT=8080``. -- Datos de MySQL: Completa con tu configuración de acceso a MYSQL (Usuario, Password, Host y puerto), modificandolos campos que comiencen con MYSQL. +- Datos de MySQL: Completa con tu configuración de acceso a MYSQL (Usuario, Password, Host y puerto), modificando los campos que comiencen con MYSQL. **Atención** ``MYSQL_DATABASE``, es el nombre de la base de datos, por defecto: ``dice_mauricio`` y ``MYSQL_DIALECT`` no se debe modificar, ya que Sequelize esta optimizado para utilizar mysql. ``npm i``-> Instala modulos requeridos. From f0c03892f02643b20d92e0ba45250082f9e852c2 Mon Sep 17 00:00:00 2001 From: molivaresr Date: Fri, 6 May 2022 11:42:43 +0200 Subject: [PATCH 60/66] Final --- .env | 1 - api/config/sqlconnect.js | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) delete mode 100644 .env diff --git a/.env b/.env deleted file mode 100644 index d3e4ac460..000000000 --- a/.env +++ /dev/null @@ -1 +0,0 @@ -PORT = 8080 \ No newline at end of file diff --git a/api/config/sqlconnect.js b/api/config/sqlconnect.js index 6dcf2c85e..3f05d3528 100644 --- a/api/config/sqlconnect.js +++ b/api/config/sqlconnect.js @@ -6,6 +6,7 @@ const config = require('../config/config') // Conecta Base de Datos +const sequelize = new Sequelize(config.MYSQL_DATABASE,config.MYSQL_USER,config.MYSQL_PASSWORD,{host:config.MYSQL_HOST,dialect: config.MYSQL_DIALECT}); async function connectDb () { try { const connection = mysql.createConnection({host:config.MYSQL_HOST, user:config.MYSQL_USER, password:config.MYSQL_PASSWORD}); @@ -17,7 +18,6 @@ async function connectDb () { } } -const sequelize = new Sequelize(config.MYSQL_DATABASE,config.MYSQL_USER,config.MYSQL_PASSWORD,{host:config.MYSQL_HOST,dialect: config.MYSQL_DIALECT}); const Player = PlayerModel(sequelize, Sequelize); const RollDice = RollDiceModel(sequelize, Sequelize); From 56d58332447f708a074123265f252fd524d26448 Mon Sep 17 00:00:00 2001 From: molivaresr Date: Tue, 10 May 2022 00:48:10 +0200 Subject: [PATCH 61/66] Correcciones --- Joc de Daus.postman_collection.json | 79 +++++++++++----------------- README.md | 7 ++- api/config/server.js | 4 +- api/controllers/404.js | 11 ++++ api/controllers/players.js | 81 +++++++++++++++++++++-------- api/controllers/rankings.js | 26 +++------ api/controllers/rollDice.js | 36 +++++++------ api/routes/404.js | 11 ++++ api/routes/players.js | 18 ++----- api/routes/rankings.js | 13 ++--- 10 files changed, 156 insertions(+), 130 deletions(-) create mode 100644 api/controllers/404.js create mode 100644 api/routes/404.js diff --git a/Joc de Daus.postman_collection.json b/Joc de Daus.postman_collection.json index 4d9c60e1e..92c8ab6a5 100644 --- a/Joc de Daus.postman_collection.json +++ b/Joc de Daus.postman_collection.json @@ -1,6 +1,6 @@ { "info": { - "_postman_id": "7c0893f4-a3d8-4130-b21c-98e20c2a3d1c", + "_postman_id": "19921c46-44e5-4436-b01b-b42776292d41", "name": "Joc de Daus", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" }, @@ -12,7 +12,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\r\n \"playerName\":\"Cassidy\"\r\n}", + "raw": "{\r\n \"playerName\":\"HolaMundo\"\r\n}", "options": { "raw": { "language": "json" @@ -41,7 +41,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\r\n \"playerName\":\"Cassidy!!!\"\r\n}", + "raw": "{\r\n \"playerName\":\" \"\r\n}", "options": { "raw": { "language": "json" @@ -49,7 +49,7 @@ } }, "url": { - "raw": "http://localhost:8080/api/players/4", + "raw": "http://localhost:8080/api/players/3", "protocol": "http", "host": [ "localhost" @@ -58,7 +58,7 @@ "path": [ "api", "players", - "4" + "3" ] } }, @@ -67,11 +67,11 @@ { "name": "Delete -> Elimina las jugadas de un jugador", "request": { - "method": "PUT", + "method": "DELETE", "header": [], "body": { "mode": "raw", - "raw": "{\r\n \"playerName\":\"Cassidy!!!\"\r\n}", + "raw": "", "options": { "raw": { "language": "json" @@ -79,7 +79,7 @@ } }, "url": { - "raw": "http://localhost:8080/api/players/4", + "raw": "http://localhost:8080/api/players/8/games/", "protocol": "http", "host": [ "localhost" @@ -88,14 +88,16 @@ "path": [ "api", "players", - "4" + "8", + "games", + "" ] } }, "response": [] }, { - "name": "Delete -> Retorna las jugadas de un jugador", + "name": "Get -> Retorna las jugadas de un jugador", "protocolProfileBehavior": { "disableBodyPruning": true }, @@ -104,7 +106,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\r\n \"playerName\":\"Cassidy!!!\"\r\n}", + "raw": "", "options": { "raw": { "language": "json" @@ -135,7 +137,7 @@ "header": [], "body": { "mode": "raw", - "raw": "{\r\n \"playerName\":\"Cassidy!!!\"\r\n}", + "raw": "", "options": { "raw": { "language": "json" @@ -143,7 +145,7 @@ } }, "url": { - "raw": "http://localhost:8080/api/players/4/games", + "raw": "http://localhost:8080/api/players/2/games", "protocol": "http", "host": [ "localhost" @@ -152,7 +154,7 @@ "path": [ "api", "players", - "4", + "2", "games" ] } @@ -168,14 +170,8 @@ "method": "GET", "header": [], "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "user", - "value": "Diego", - "type": "default" - } - ], + "mode": "raw", + "raw": "", "options": { "raw": { "language": "json" @@ -206,14 +202,8 @@ "method": "GET", "header": [], "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "user", - "value": "Diego", - "type": "default" - } - ], + "mode": "raw", + "raw": "", "options": { "raw": { "language": "json" @@ -221,7 +211,7 @@ } }, "url": { - "raw": "http://localhost:8080/api/players/ranking/ranking", + "raw": "http://localhost:8080/api/players/ranking/", "protocol": "http", "host": [ "localhost" @@ -231,7 +221,7 @@ "api", "players", "ranking", - "ranking" + "" ] } }, @@ -246,14 +236,8 @@ "method": "GET", "header": [], "body": { - "mode": "urlencoded", - "urlencoded": [ - { - "key": "user", - "value": "Diego", - "type": "default" - } - ], + "mode": "raw", + "raw": "", "options": { "raw": { "language": "json" @@ -261,7 +245,7 @@ } }, "url": { - "raw": "http://localhost:8080/api/players/ranking/ranking", + "raw": "http://localhost:8080/api/players/ranking/looser", "protocol": "http", "host": [ "localhost" @@ -271,7 +255,7 @@ "api", "players", "ranking", - "ranking" + "looser" ] } }, @@ -293,15 +277,10 @@ "value": "Diego", "type": "default" } - ], - "options": { - "raw": { - "language": "json" - } - } + ] }, "url": { - "raw": "http://localhost:8080/api/players/ranking/firstplayer", + "raw": "http://localhost:8080/api/players/ranking/winner", "protocol": "http", "host": [ "localhost" @@ -311,7 +290,7 @@ "api", "players", "ranking", - "firstplayer" + "winner" ] } }, diff --git a/README.md b/README.md index aa30af96a..280a06ebd 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,11 @@ Proyecto creado con: Construirem una API que doni suport a un joc de daus ;) +### Instrucciones ### +Para crear un nuevo jugador se debe completar el nombre. +El sistema no permite nombres repetidos. +Permite jugar en modo anónimo, debes escribir 'Invitado'. + Al joc de daus s’hi juga amb dos daus de sis cares: En cas que el resultat dels dos daus sigui 7 la partida es guanya, si no es perd. @@ -40,6 +45,6 @@ Has de tenir en compte els següents detalls de construcció: * POST /players/{id}/games: un jugador específic realitza una tirada. ### Ranking ### * GET /players: retorna el llistat de tots els jugadors del sistema amb el seu percentatge mig d’èxits. -* GET /players/ranking/ranking: retorna el percentatge mig d’èxits del conjunt de tots els jugadors. +* GET /players/ranking/: retorna el percentatge mig d’èxits del conjunt de tots els jugadors. * GET /players/ranking/loser: retorna el jugador amb pitjor percentatge d’èxit. * GET /players/ranking/winner: retorna el jugador amb millor percentatge d’èxit. diff --git a/api/config/server.js b/api/config/server.js index 686e42b48..bce856344 100644 --- a/api/config/server.js +++ b/api/config/server.js @@ -3,7 +3,7 @@ const bodyparser = require('body-parser') const players = require('../routes/players') const ranking = require('../routes/rankings') - +const others = require('../routes/404') class Server { constructor(){ this.app = express(); @@ -15,6 +15,8 @@ class Server { route() { this.app.use('/api/players/', players); this.app.use('/api/players/', ranking); + this.app.use('*', others); + } listen() { this.app.listen(this.port, () => { diff --git a/api/controllers/404.js b/api/controllers/404.js new file mode 100644 index 000000000..222a11d29 --- /dev/null +++ b/api/controllers/404.js @@ -0,0 +1,11 @@ +const others = (req, res) => { + try { + res.status(404).json({msg:'Página no existe - 404'}); + } + catch (error) { + console.log(error) + res.status(400).json({msg:'Petición erronéa'}) + } +} + +module.exports = {others} \ No newline at end of file diff --git a/api/controllers/players.js b/api/controllers/players.js index 85eb2601d..74fadf91a 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -1,42 +1,77 @@ const {request, response} = require('express'); - +const res = require('express/lib/response'); const {Player, RollDice} = require('../config/sqlconnect'); const postPlayer = async (request, response) => { - try { - const player = await Player.create(request.body); - response.json(player).status(200) - } - catch (error) { - console.log(error); - response.status(500).json({ - msg:'Llamar al administrador' - }) + const name = request.body + const realLenght = name.playerName.trim().length + const player = await Player.findAll({where:{playerName : name.playerName}}); + const verify = name.playerName.toLowerCase() + const key = 'invitado'; + + if(verify === key) { + await Player.create({playerName: 'Anónimo'}) + response.status(200).json({msg: `Jugador anónimo creado con éxito`}) + } else { + if (realLenght === 0 ) { + response.status(400).json({msg: `No has creado un jugador! Para crear un jugador Anónimo, escribe: invitado `}) + } else { + try { + if(player.length === 0) { + await Player.create({playerName: name.playerName}) + response.status(200).json({msg: `Jugador creado con éxito ${name.playerName}`}) + } + else { + response.status(200).json({msg: 'El Jugador ya existe'}) + } + } + catch (error) { + console.log(error); + response.status(500).json({ + msg:'Llamar al administrador' + }) + } + } } }; const putPlayer = async (request, response) => { + const name = request.body + const realLenght = name.playerName.trim().length + const player = await Player.findAll({where:{playerName : name.playerName}}); + + if(realLenght === 0) { + response.status(400).json({msg: `No has creado un jugador! Para crear un jugador Anónimo, escribe: 'Anónimo'`}) + } else { try { - await Player.update(request.body,{ - where: {_id: request.params.id} - }); - response.json({ - success:'Se ha modificado el nombre del jugador' - }) + if(player.length === 0) { + await Player.update(name.playerName,{ + where: {_id: request.params.id} + }); + response.status(200).json({msg: `Jugador modificado con éxito ${name.playerName}`}) + } + else { + response.status(200).json({msg: 'El Jugador ya existe'}) + } } catch (error) { console.log(error); response.status(500).json({ msg:'Llamar al administrador' }) - } + }} }; -const getPlayer = async (request,response) => { - const {id} = reques.params.id - const player = await Player.findAll({where:{_id: id}}); - response.json(player) -} +const getPlayers = async (request, response) => { + try { + const players = await Player.findAll({attributes:['_id','playerName','winRate']}); + response.json({players: players}) + } catch (error) { + response.jsonStatus(500).json({ + msg:'Llamar al Admin' + }) + } +} -module.exports = {postPlayer, putPlayer, getPlayer} \ No newline at end of file +module.exports = {postPlayer, putPlayer,getPlayers} \ No newline at end of file diff --git a/api/controllers/rankings.js b/api/controllers/rankings.js index eacbebb75..363ea909f 100644 --- a/api/controllers/rankings.js +++ b/api/controllers/rankings.js @@ -2,16 +2,7 @@ const {request, response} = require('express'); const {Player, RollDice} = require('../config/sqlconnect') -const getPlayers = async (request, response) => { - try { - const players = await Player.findAll({attributes:['_id','playerName','winRate']}); - response.json(players) - } catch (error) { - response.sendStatus(500).json({ - msg:'Llamar al Admin' - }) - } -} + const getRanking = async (request, response) => { try { @@ -23,29 +14,28 @@ const getRanking = async (request, response) => { winRate }) } catch (error) { - response.sendStatus(500) + response.status(500).json({msg:'Llamar al administrador'}) } } const getLastPlayer = async (request, response) => { const minScore = await Player.min('winRate'); - console.log(minScore) + console.log(minScore); try { const lastPlayer = await Player.findAll({where:{winRate:minScore}}); - response.json(lastPlayer); + response.status(200).json(lastPlayer); } catch (error) { - response.sendStatus(500) + response.status(500).json({msg:'Llamar al administrador'}) } } const getFirstPlayer = async (request, response) => { const maxScore = await Player.max('winRate'); - console.log(maxScore) try { const firstPlayer = await Player.findAll({where:{winRate:maxScore}}); - response.json(firstPlayer); + response.status(200).json(firstPlayer); } catch (error) { - response.sendStatus(500) + response.status(500).json({msg:'Llamar al administrador'}) } } -module.exports = {getRanking, getFirstPlayer, getLastPlayer, getPlayers} \ No newline at end of file +module.exports = {getRanking, getFirstPlayer, getLastPlayer} \ No newline at end of file diff --git a/api/controllers/rollDice.js b/api/controllers/rollDice.js index 38e092e8b..fad735e89 100644 --- a/api/controllers/rollDice.js +++ b/api/controllers/rollDice.js @@ -1,5 +1,6 @@ const rollDice = require('./game') const {RollDice, Player} = require('../config/sqlconnect'); +const { response } = require('express'); const postRoll = async (req,res) => { const idPlayer = req.params.id; @@ -24,31 +25,36 @@ const postRoll = async (req,res) => { const winRate = (winGames/totalGames)*100; await Player.update({winRate},{where:{_id:idPlayer}}) const playerRolled = await Player.findAll({attribute:['playerName'],where:{_id:idPlayer}}) - res.send({playerRolled, roll}) + res.status(200).json({playerRolled, roll}) } catch (error) { - res.status(500).send({message:error.message}) + res.status(500).json({message:error.message}) } }; const delPlayerRoll = async (req,res) => { - const idPlayer = req.params.id; - try { - await Player.update({ - totalGames:0, - winGames:0, - winRate:0, - },{where:{_id:idPlayer}}) - await RollDice.destroy({where:{_id:idPlayer}}) - const player = await Player.findAll({where:{_id:idPlayer}}) - res.status(200).send({player}) - } catch (error) { - res.status(500).send({message: error.message}) + const idPlayer = req.params.id; + const player = await Player.findAll({where:{_id:idPlayer}}) + if(player.length === 0) { + res.status(400).json({msg:'El jugador no existe'}) + } else { + try { + + await Player.update({ + totalGames:0, + winGames:0, + winRate:0, + },{where:{_id:idPlayer}}) + await RollDice.destroy({where:{_id:idPlayer}}) + res.status(200).json({msg:'Jugadas eliminadas'}) + } catch (error) { + res.status(500).json({message: error.message}) + } } } const getPlayerRoll = async (req, res) => { const idPlayer = req.params.id; const player = await Player.findAll({where:{_id:idPlayer}}) - res.status(201).send({player}) + res.status(201).json({player}) }; module.exports = {postRoll, delPlayerRoll, getPlayerRoll} \ No newline at end of file diff --git a/api/routes/404.js b/api/routes/404.js new file mode 100644 index 000000000..41ddd37d7 --- /dev/null +++ b/api/routes/404.js @@ -0,0 +1,11 @@ +const express = require('express'); +const router = express.Router(); +const {others }= require('../controllers/404') + +router.get('*', others); +router.post('*', others); +router.patch('*', others); +router.put('*', others); +router.delete('*', others); + +module.exports = router \ No newline at end of file diff --git a/api/routes/players.js b/api/routes/players.js index 0ebf909e4..aece30e88 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -1,21 +1,13 @@ const express = require('express'); const router = express.Router(); -const {postPlayer, putPlayer, getPlayer} = require('../controllers/players'); -const { getPlayers } = require('../controllers/rankings'); +const {postPlayer, putPlayer, getPlayers} = require('../controllers/players'); const {postRoll, delPlayerRoll, getPlayerRoll} = require('../controllers/rollDice'); -router.get('/:id/', getPlayer); // Muestra un Jugador x el ID - -router.get('/', getPlayers);//test list players - -router.get('/:id/games/', getPlayerRoll); - router.post('/', postPlayer); // Crea un usuario - -router.post('/:id/games/', postRoll) - router.put('/:id', putPlayer); // Modifica el Nombre de usuario - -router.delete('/:id/games/', delPlayerRoll) +router.post('/:id/games/', postRoll) // Lanza los dados el jugador +router.delete('/:id/games/', delPlayerRoll); // Elimina las jugadas de un jugador +router.get('/', getPlayers);// Muestra el listado de jugadores +router.get('/:id/games/', getPlayerRoll); // Muestra las jugadas de un jugador module.exports = router \ No newline at end of file diff --git a/api/routes/rankings.js b/api/routes/rankings.js index 3ae368d4c..0cead3e1f 100644 --- a/api/routes/rankings.js +++ b/api/routes/rankings.js @@ -1,15 +1,10 @@ const express = require('express'); const router = express.Router(); -const {getRanking, getFirstPlayer, getLastPlayer, getPlayers} = require('../controllers/rankings') +const {getRanking, getFirstPlayer, getLastPlayer} = require('../controllers/rankings') -router.get('/', getPlayers); +router.get('/ranking', getRanking); // Retorna el listado de los jugadores y su % medio de éxito +router.get('/ranking/looser', getLastPlayer); //Retorna el Looser jugador +router.get('/ranking/winner', getFirstPlayer); // Retorna el Winner -router.get('/ranking', getRanking); // Esta línea no funciona - -router.get('/ranking/ranking', getRanking); - -router.get('/ranking/lastplayer', getLastPlayer); //Aqui funciona - -router.get('/ranking/firstplayer', getFirstPlayer); module.exports = router; \ No newline at end of file From 97349e74d7f24b34c5177c9e109428ac00c5264a Mon Sep 17 00:00:00 2001 From: molivaresr Date: Tue, 10 May 2022 00:53:39 +0200 Subject: [PATCH 62/66] Final --- Joc de Daus.postman_collection.json | 29 +++++++++++++++++ api/controllers/players.js | 48 +++++++++++++++++------------ 2 files changed, 57 insertions(+), 20 deletions(-) diff --git a/Joc de Daus.postman_collection.json b/Joc de Daus.postman_collection.json index 92c8ab6a5..4d3b29f89 100644 --- a/Joc de Daus.postman_collection.json +++ b/Joc de Daus.postman_collection.json @@ -34,6 +34,35 @@ }, "response": [] }, + { + "name": "Post -> Crea un jugador anónimo", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"playerName\":\"HolaMundo\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:8080/api/players", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "8080", + "path": [ + "api", + "players" + ] + } + }, + "response": [] + }, { "name": "Put -> Modifica el nombre de un jugador", "request": { diff --git a/api/controllers/players.js b/api/controllers/players.js index 74fadf91a..6c4bb1a74 100644 --- a/api/controllers/players.js +++ b/api/controllers/players.js @@ -14,7 +14,7 @@ const postPlayer = async (request, response) => { response.status(200).json({msg: `Jugador anónimo creado con éxito`}) } else { if (realLenght === 0 ) { - response.status(400).json({msg: `No has creado un jugador! Para crear un jugador Anónimo, escribe: invitado `}) + response.status(400).json({msg: `No has creado un jugador! Para crear un jugador Anónimo, escribe: Invitado `}) } else { try { if(player.length === 0) { @@ -41,26 +41,34 @@ const putPlayer = async (request, response) => { const realLenght = name.playerName.trim().length const player = await Player.findAll({where:{playerName : name.playerName}}); - if(realLenght === 0) { - response.status(400).json({msg: `No has creado un jugador! Para crear un jugador Anónimo, escribe: 'Anónimo'`}) + const verify = name.playerName.toLowerCase() + const key = 'invitado'; + + if(verify === key) { + await Player.create({playerName: 'Anónimo'}) + response.status(200).json({msg: `Jugador anónimo creado con éxito`}) } else { - try { - if(player.length === 0) { - await Player.update(name.playerName,{ - where: {_id: request.params.id} - }); - response.status(200).json({msg: `Jugador modificado con éxito ${name.playerName}`}) - } - else { - response.status(200).json({msg: 'El Jugador ya existe'}) - } - } - catch (error) { - console.log(error); - response.status(500).json({ - msg:'Llamar al administrador' - }) - }} + if(realLenght === 0) { + response.status(400).json({msg: `No has creado un jugador! Para crear un jugador Anónimo, escribe: Invitado`}) + } else { + try { + if(player.length === 0) { + await Player.update(name.playerName,{ + where: {_id: request.params.id} + }); + response.status(200).json({msg: `Jugador modificado con éxito ${name.playerName}`}) + } + else { + response.status(200).json({msg: 'El Jugador ya existe'}) + } + } + catch (error) { + console.log(error); + response.status(500).json({ + msg:'Llamar al administrador' + }) + }} + } }; const getPlayers = async (request, response) => { From f267c1710f79192c9092d62bc81c70ac562c1f83 Mon Sep 17 00:00:00 2001 From: molivaresr Date: Tue, 10 May 2022 00:55:23 +0200 Subject: [PATCH 63/66] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8bdc3f15b..72838560e 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Proyecto creado con: Construirem una API que doni suport a un joc de daus ;) -### Instrucciones ### +### Instrucciones ### Para crear un nuevo jugador se debe completar el nombre. El sistema no permite nombres repetidos. Permite jugar en modo anónimo, debes escribir 'Invitado'. From cd313d1bbe96e1e5b0ef4d2bcfc7f5e945c1619a Mon Sep 17 00:00:00 2001 From: molivaresr Date: Tue, 10 May 2022 00:56:14 +0200 Subject: [PATCH 64/66] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 72838560e..3a39e2649 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,7 @@ Proyecto creado con: Construirem una API que doni suport a un joc de daus ;) -### Instrucciones ### +## Instrucciones ## Para crear un nuevo jugador se debe completar el nombre. El sistema no permite nombres repetidos. Permite jugar en modo anónimo, debes escribir 'Invitado'. From 0595881d9c915cae6b45ce2cc4ef3a0d8d03f1ba Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Tue, 10 May 2022 00:58:33 +0200 Subject: [PATCH 65/66] Update README.md --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3a39e2649..ae90b45d2 100644 --- a/README.md +++ b/README.md @@ -17,14 +17,15 @@ Proyecto creado con: ``npm start`` -> Inicializa servidor. -Construirem una API que doni suport a un joc de daus ;) -## Instrucciones ## + +### Instrucciones ### Para crear un nuevo jugador se debe completar el nombre. El sistema no permite nombres repetidos. -Permite jugar en modo anónimo, debes escribir 'Invitado'. +Permite jugar en modo anónimo, debes escribir 'Invitado'. -Al joc de daus s’hi juga amb dos daus de sis cares: +Construirem una API que doni suport a un joc de daus ;). +Al joc de daus s’hi juga amb dos daus de sis cares: En cas que el resultat dels dos daus sigui 7 la partida es guanya, si no es perd. Per poder jugar al joc t’has de registrar com a jugador amb un nom. Un jugador pot veure un llistat de totes les tirades que ha fet i el seu percentatge d’èxit. From 78f73084f5b0fe705484a7c6b778b91033587a88 Mon Sep 17 00:00:00 2001 From: Mauricio Olivares Rojas <69109375+molro@users.noreply.github.com> Date: Tue, 10 May 2022 01:00:10 +0200 Subject: [PATCH 66/66] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index ae90b45d2..b1c636fd4 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ Proyecto creado con: ``npm start`` -> Inicializa servidor. - +(Colección de Postman)[https://github.com/molro/nodeInitialDemo/blob/sprint42/Joc%20de%20Daus.postman_collection.json] ### Instrucciones ### Para crear un nuevo jugador se debe completar el nombre.