From 5913cd95c233d5ed35bc07cf955df730830d9f2d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?holmess=20-=20Sara=20Fern=C3=A1ndez=20Gonz=C3=A1lez=20-=20?= =?UTF-8?q?UO288195?= <54588352+holmess23@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:54:53 +0100 Subject: [PATCH 01/29] Add files via upload --- docs/images/business.png | Bin 0 -> 24772 bytes docs/images/technical.png | Bin 0 -> 35026 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/business.png create mode 100644 docs/images/technical.png diff --git a/docs/images/business.png b/docs/images/business.png new file mode 100644 index 0000000000000000000000000000000000000000..0aa617c3273608880b19786ed36ad0c491dafc8a GIT binary patch literal 24772 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 literal 0 HcmV?d00001 diff --git a/docs/images/technical.png b/docs/images/technical.png new file mode 100644 index 0000000000000000000000000000000000000000..2402d0a5424e47fb908c8b107a28926381280ea2 GIT binary patch literal 35026 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
5~jx?_$pGYc_J56>`rRKswVYro^Qw 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 literal 0 HcmV?d00001 From a1451a07263254d71bd40dbf8617d403456159d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?holmess=20-=20Sara=20Fern=C3=A1ndez=20Gonz=C3=A1lez=20-=20?= =?UTF-8?q?UO288195?= <54588352+holmess23@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:56:16 +0100 Subject: [PATCH 02/29] =?UTF-8?q?A=C3=B1adido=20final=2001=5Fintroduction?= =?UTF-8?q?=5Fand=5Fgoals.adoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/01_introduction_and_goals.adoc | 35 ++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index ddb2ae3d..9ad22dd9 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -3,6 +3,19 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-introduction-and-goals]] == Introduction and Goals +Saber y Ganar es el proyecto de Arquitectura de Software desarrollado por el equipo 6A. Los integrantes de este equipo son: + +* Ángel Luis Álvarez Iglesias +* Álvaro García Miranda +* Ben James Coleman Kheyyali +* Eloy Martín Reig +* Óscar Abad López +* Sara Fernández González + +Con el profesor: Jorge Álvarez Fidalgo + +Este proyecto consiste en una aplicación con un juego de preguntas y respuestas. Además los usuarios registrados podrán ver sus estadísticas y las de otros jugadores. + [role="arc42help"] **** Describes the relevant requirements and the driving forces that software architects and development team must consider. @@ -17,6 +30,11 @@ These include === Requirements Overview +* El sistema permitirá a los usuarios registrarse e iniciar sesión. +* El sistema permitirá a los usuarios acceder a un juego de preguntas en el que tendrán un tiempo para contestar. Este juego consistirá en una pregunta con cuatro posibles respuestas generado de manera automática. +* El sistema permitirá a los usuarios ver sus estadísticas así como el historial de sus preguntas respondidas. +* El sistema permitirá a los usuarios buscar a otros usuarios y ver sus estadísticas de juego. + [role="arc42help"] **** .Contents @@ -42,6 +60,16 @@ See https://docs.arc42.org/section-1/[Introduction and Goals] in the arc42 docum **** === Quality Goals +Segun ISO/IEC 25010 + +[options="header",cols="1,2,2"] +|=== +|Objetivo de Calidad|Realización|Prioridad +| Usabilidad | Para que la aplicación sea usable se buscará mantener un diseño uniforme y basarse en la predictibilidad para que el aprendizaje de uso de la aplicación sea sencillo y para que no se complique la experiencia del usuario.| 5 +| Testabilidad | Se realizarán pruebas lo más exhaustivas posible para asegurar el correcto funcionamiento de todos los servicios presentes en la aplicación. | 4 +| Fiabilidad | Se buscará que el uso de recursos dentro de la aplicación sea lo más optimizado posible para que el funcionamiento de la aplicación no se vea afectado en velocidad o eficacia. | 4 +| Seguridad | Se debe buscar cumplir unos mínimos para que no sea fácil el acceso a cuentas que no te pertenecen y que la información de los usuarios no quede fácilmente expuesta. Pero no es uno de los objetivos clave. | 1 +|=== [role="arc42help"] **** @@ -87,7 +115,8 @@ Table with role names, person names, and their expectations with respect to the [options="header",cols="1,2,2"] |=== -|Role/Name|Contact|Expectations -| __ | __ | __ -| __ | __ | __ +|Rol|Descripción|Expectativas +| Cliente | Nuestro cliente es la empresa ficticia HappySw, este papel es realizado por los profesores de la asignatura. | Una aplicación que cumpla todos los requisitos enumerado en 1.1 +| Equipo de desarrollo | Los alumnos parte de este trabajo que han sido nombrados en la introducción. | Desarrollar una aplicación completa que tenga un reflejo adecuado en la documentación. Tiene que cumplir con los requisitos impuestos y además demostrar el trabajo puesto en el proyecto. +| Usuarios | Las personas objetivo de la aplicación que probarían o usarían el producto final. Los jugadores. | Un juego divertido que funcione bien y que haga preguntas diversas para que suponga algún reto. |=== From 6af397f8550f7763a2bcc3e087520f90b35de659 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?holmess=20-=20Sara=20Fern=C3=A1ndez=20Gonz=C3=A1lez=20-=20?= =?UTF-8?q?UO288195?= <54588352+holmess23@users.noreply.github.com> Date: Thu, 22 Feb 2024 09:56:54 +0100 Subject: [PATCH 03/29] =?UTF-8?q?A=C3=B1adido=20final=2003=5Fsystem=5Fscop?= =?UTF-8?q?e=5Fand=5Fcontext.adoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/03_system_scope_and_context.adoc | 70 ++--------------------- 1 file changed, 4 insertions(+), 66 deletions(-) diff --git a/docs/src/03_system_scope_and_context.adoc b/docs/src/03_system_scope_and_context.adoc index c528e907..7f17503d 100644 --- a/docs/src/03_system_scope_and_context.adoc +++ b/docs/src/03_system_scope_and_context.adoc @@ -1,75 +1,13 @@ -ifndef::imagesdir[:imagesdir: ../images] - [[section-system-scope-and-context]] == System Scope and Context - -[role="arc42help"] -**** -.Contents -System scope and context - as the name suggests - delimits your system (i.e. your scope) from all its communication partners -(neighboring systems and users, i.e. the context of your system). It thereby specifies the external interfaces. - -If necessary, differentiate the business context (domain specific inputs and outputs) from the technical context (channels, protocols, hardware). - -.Motivation -The domain interfaces and technical interfaces to communication partners are among your system's most critical aspects. Make sure that you completely understand them. - -.Form -Various options: - -* Context diagrams -* Lists of communication partners and their interfaces. - - -.Further Information - -See https://docs.arc42.org/section-3/[Context and Scope] in the arc42 documentation. - -**** - - === Business Context -[role="arc42help"] -**** -.Contents -Specification of *all* communication partners (users, IT-systems, ...) with explanations of domain specific inputs and outputs or interfaces. -Optionally you can add domain specific formats or communication protocols. +:imagesdir: ../images +image::business.png[] -.Motivation -All stakeholders should understand which data are exchanged with the environment of the system. - -.Form -All kinds of diagrams that show the system as a black box and specify the domain interfaces to communication partners. - -Alternatively (or additionally) you can use a table. -The title of the table is the name of your system, the three columns contain the name of the communication partner, the inputs, and the outputs. - -**** - -**** - -**** === Technical Context -[role="arc42help"] -**** -.Contents -Technical interfaces (channels and transmission media) linking your system to its environment. In addition a mapping of domain specific input/output to the channels, i.e. an explanation which I/O uses which channel. - -.Motivation -Many stakeholders make architectural decision based on the technical interfaces between the system and its context. Especially infrastructure or hardware designers decide these technical interfaces. - -.Form -E.g. UML deployment diagram describing channels to neighboring systems, -together with a mapping table showing the relationships between channels and input/output. - -**** - -**** - -**** - -**** +:imagesdir: ../images +image::technical.png[] From 022abb78ea9ede2d7c387bf20827bdb177fc6356 Mon Sep 17 00:00:00 2001 From: sara Date: Thu, 22 Feb 2024 10:49:13 +0100 Subject: [PATCH 04/29] conexion login a main --- .idea/.gitignore | 8 +++ .idea/misc.xml | 6 ++ .idea/modules.xml | 8 +++ .idea/proyecto.iml | 9 +++ .idea/vcs.xml | 6 ++ package-lock.json | 102 +++++++++++++++++++++++++++++++++ package.json | 5 ++ webapp/src/App.js | 38 +++++++----- webapp/src/components/Login.js | 31 +++++----- webapp/src/components/Main.js | 13 +++++ 10 files changed, 199 insertions(+), 27 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/proyecto.iml create mode 100644 .idea/vcs.xml create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 webapp/src/components/Main.js diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..07115cdf --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..84a4b34f --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/proyecto.iml b/.idea/proyecto.iml new file mode 100644 index 00000000..d6ebd480 --- /dev/null +++ b/.idea/proyecto.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..35eb1ddf --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..2e9159a0 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,102 @@ +{ + "name": "proyecto", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "react-router-dom": "^6.22.0" + } + }, + "node_modules/@remix-run/router": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.0.tgz", + "integrity": "sha512-HOil5aFtme37dVQTB6M34G95kPM3MMuqSmIRVCC52eKV+Y/tGSqw9P3rWhlAx6A+mz+MoX+XxsGsNJbaI5qCgQ==", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "peer": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/react": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", + "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", + "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.0" + }, + "peerDependencies": { + "react": "^18.2.0" + } + }, + "node_modules/react-router": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.0.tgz", + "integrity": "sha512-q2yemJeg6gw/YixRlRnVx6IRJWZD6fonnfZhN1JIOhV2iJCPeRNSH3V1ISwHf+JWcESzLC3BOLD1T07tmO5dmg==", + "dependencies": { + "@remix-run/router": "1.15.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8" + } + }, + "node_modules/react-router-dom": { + "version": "6.22.0", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.0.tgz", + "integrity": "sha512-z2w+M4tH5wlcLmH3BMMOMdrtrJ9T3oJJNsAlBJbwk+8Syxd5WFJ7J5dxMEW0/GEXD1BBis4uXRrNIz3mORr0ag==", + "dependencies": { + "@remix-run/router": "1.15.0", + "react-router": "6.22.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/scheduler": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", + "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", + "peer": true, + "dependencies": { + "loose-envify": "^1.1.0" + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 00000000..64324e87 --- /dev/null +++ b/package.json @@ -0,0 +1,5 @@ +{ + "dependencies": { + "react-router-dom": "^6.22.0" + } +} diff --git a/webapp/src/App.js b/webapp/src/App.js index d932005b..29665283 100644 --- a/webapp/src/App.js +++ b/webapp/src/App.js @@ -5,34 +5,46 @@ import CssBaseline from '@mui/material/CssBaseline'; import Container from '@mui/material/Container'; import Typography from '@mui/material/Typography'; import Link from '@mui/material/Link'; +import Main from "./components/Main"; function App() { const [showLogin, setShowLogin] = useState(true); - + const [login, setLogin] = useState(false); const handleToggleView = () => { setShowLogin(!showLogin); }; + + const sendLogin = (loginSuccess) => { + setLogin(loginSuccess) + } return ( + - - + {login ?
: ( + <> + + Welcome to the 2024 edition of the Software Architecture course - - {showLogin ? : } - + + {showLogin ? : } + {showLogin ? ( - - Don't have an account? Register here. - + + Don't have an account? Register here. + ) : ( - - Already have an account? Login here. - + + Already have an account? Login here. + )} - + + + )} + ); } export default App; + diff --git a/webapp/src/components/Login.js b/webapp/src/components/Login.js index 0ad6268e..8af843eb 100644 --- a/webapp/src/components/Login.js +++ b/webapp/src/components/Login.js @@ -2,8 +2,9 @@ import React, { useState } from 'react'; import axios from 'axios'; import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; +import Main from "./Main"; -const Login = () => { +const Login = ({sendLogin}) => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); @@ -12,7 +13,7 @@ const Login = () => { const [openSnackbar, setOpenSnackbar] = useState(false); const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; - + sendLogin(loginSuccess); const loginUser = async () => { try { const response = await axios.post(`${apiEndpoint}/login`, { username, password }); @@ -22,7 +23,7 @@ const Login = () => { setCreatedAt(userCreatedAt); setLoginSuccess(true); - + sendLogin(loginSuccess); setOpenSnackbar(true); } catch (error) { setError(error.response.data.error); @@ -35,16 +36,7 @@ const Login = () => { return ( - {loginSuccess ? ( -
- - Hello {username}! - - - Your account was created on {new Date(createdAt).toLocaleDateString()}. - -
- ) : ( +
Login @@ -72,9 +64,20 @@ const Login = () => { setError('')} message={`Error: ${error}`} /> )}
- )}
); }; export default Login; + + +// ( +//
+// +// Hello {username}! +// +// +// Your account was created on {new Date(createdAt).toLocaleDateString()}. +// +//
+// ) diff --git a/webapp/src/components/Main.js b/webapp/src/components/Main.js new file mode 100644 index 00000000..d6480d9a --- /dev/null +++ b/webapp/src/components/Main.js @@ -0,0 +1,13 @@ +import React, {useState} from 'react'; + +const Main = (props) => { + // userData contiene los datos del usuario que fueron pasados como props desde el componente Login + + return ( +
+

Welcome, {props.username}!

+
+ ); +}; + +export default Main; \ No newline at end of file From e0b2616246587d4f67ca32e5125524b6ff59528f Mon Sep 17 00:00:00 2001 From: sara Date: Thu, 22 Feb 2024 13:45:03 +0100 Subject: [PATCH 05/29] base vista Main --- webapp/src/App.js | 9 +++++++-- webapp/src/components/GamesPanel.js | 26 ++++++++++++++++++++++++++ webapp/src/components/Login.js | 3 ++- webapp/src/components/Main.js | 10 +++++++--- webapp/src/components/NavBar.js | 21 +++++++++++++++++++++ 5 files changed, 63 insertions(+), 6 deletions(-) create mode 100644 webapp/src/components/GamesPanel.js create mode 100644 webapp/src/components/NavBar.js diff --git a/webapp/src/App.js b/webapp/src/App.js index 29665283..e924c00a 100644 --- a/webapp/src/App.js +++ b/webapp/src/App.js @@ -10,6 +10,7 @@ import Main from "./components/Main"; function App() { const [showLogin, setShowLogin] = useState(true); const [login, setLogin] = useState(false); + const [user, setUser] = useState(''); const handleToggleView = () => { setShowLogin(!showLogin); }; @@ -18,16 +19,20 @@ function App() { setLogin(loginSuccess) } + const sendUsername = (username) => { + setUser(username) + } + return ( - {login ?
: ( + {login ?
: ( <> Welcome to the 2024 edition of the Software Architecture course - {showLogin ? : } + {showLogin ? : } {showLogin ? ( diff --git a/webapp/src/components/GamesPanel.js b/webapp/src/components/GamesPanel.js new file mode 100644 index 00000000..d24fed8a --- /dev/null +++ b/webapp/src/components/GamesPanel.js @@ -0,0 +1,26 @@ +import React from 'react'; +import Grid from '@mui/material/Grid'; +import Paper from '@mui/material/Paper'; +import Typography from '@mui/material/Typography'; + +function Game({ title }) { + return ( + + + {title} + + + ); +} + +function GamesPanel() { + return ( + + + + + + ); +} + +export default GamesPanel; \ No newline at end of file diff --git a/webapp/src/components/Login.js b/webapp/src/components/Login.js index 8af843eb..196dae29 100644 --- a/webapp/src/components/Login.js +++ b/webapp/src/components/Login.js @@ -4,7 +4,7 @@ import axios from 'axios'; import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; import Main from "./Main"; -const Login = ({sendLogin}) => { +const Login = ({sendLogin, sendUsername}) => { const [username, setUsername] = useState(''); const [password, setPassword] = useState(''); const [error, setError] = useState(''); @@ -24,6 +24,7 @@ const Login = ({sendLogin}) => { setCreatedAt(userCreatedAt); setLoginSuccess(true); sendLogin(loginSuccess); + sendUsername(username); setOpenSnackbar(true); } catch (error) { setError(error.response.data.error); diff --git a/webapp/src/components/Main.js b/webapp/src/components/Main.js index d6480d9a..a701bea9 100644 --- a/webapp/src/components/Main.js +++ b/webapp/src/components/Main.js @@ -1,12 +1,16 @@ import React, {useState} from 'react'; +import NavBar from "./NavBar"; +import GamesPanel from "./GamesPanel"; +import Container from "@mui/material/Container"; const Main = (props) => { // userData contiene los datos del usuario que fueron pasados como props desde el componente Login return ( -
-

Welcome, {props.username}!

-
+ + + + ); }; diff --git a/webapp/src/components/NavBar.js b/webapp/src/components/NavBar.js new file mode 100644 index 00000000..7dcfda76 --- /dev/null +++ b/webapp/src/components/NavBar.js @@ -0,0 +1,21 @@ +import React from 'react'; +import AppBar from '@mui/material/AppBar'; +import Toolbar from '@mui/material/Toolbar'; +import Button from '@mui/material/Button'; +import Typography from '@mui/material/Typography'; + +function NavBar() { + return ( + + + + Saber y Ganar + + + + + + ); +} + +export default NavBar; \ No newline at end of file From 35c0920dfe062fdf3f5992402f0155437cc21911 Mon Sep 17 00:00:00 2001 From: uo289039 <124291361+uo289039@users.noreply.github.com> Date: Thu, 22 Feb 2024 13:51:36 +0100 Subject: [PATCH 06/29] Update 02_architecture_constraints.adoc --- docs/src/02_architecture_constraints.adoc | 30 ++++++++++------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/docs/src/02_architecture_constraints.adoc b/docs/src/02_architecture_constraints.adoc index 226e501f..e354ada9 100644 --- a/docs/src/02_architecture_constraints.adoc +++ b/docs/src/02_architecture_constraints.adoc @@ -1,27 +1,23 @@ -ifndef::imagesdir[:imagesdir: ../images] - [[section-architecture-constraints]] == Architecture Constraints +|=== +| *_Restricciones de arquitectura_* | *_Descripción_* + +| *_Tecnología de Desarrollo_* | El equipo de desarrollo debe desarrollar la aplicación empleando tecnologias web compatibles con los requerimientos y estandares actuales de RTVE. + +| *_Plataforma de Implementación_* | La aplicación deberá implementarse sobre una plataforma de alojamiento web que cumpla con los requisitos de rendimiento, seguridad y escalabilidad de RTVE. -[role="arc42help"] -**** -.Contents -Any requirement that constraints software architects in their freedom of design and implementation decisions or decision about the development process. These constraints sometimes go beyond individual systems and are valid for whole organizations and companies. +| *_Cumplimiento de Normativas de Privacidad_* | La arquitectura debe seguir las regulaciones de privacidad de datos actualizadas para garantizar la privacidad de los concursantes. -.Motivation -Architects should know exactly where they are free in their design decisions and where they must adhere to constraints. -Constraints must always be dealt with; they may be negotiable, though. +| *_Compatibilidad con Navegadores_* | Para garantizar una experiencia de usuario consistente, la aplicación debe ser compatible con un gran abanico de navegadores web seguros. -.Form -Simple tables of constraints with explanations. -If needed you can subdivide them into -technical constraints, organizational and political constraints and -conventions (e.g. programming or versioning guidelines, documentation or naming conventions) +| *_Seguridad de la Información_* | La solicitud deberá seguir estas medidas de seguridad: autenticación de concursantes, control de acceso y cifrado de datos; con el fin de proteger la información confidencial de los concursantes, pero permitiéndoles comprobarla. +| *_Escalabilidad_* | La arquitectura debe ser escalable para manejar un mayor número de concursantes sin comprometer el rendimiento. -.Further Information +| *_Mantenibilidad del Código_* | La mejor opción es emplear técnicas de desarrollo de software que promuevan un código limpio y bien documentado. Esto facilitará la actualización y el mantenimiento. -See https://docs.arc42.org/section-2/[Architecture Constraints] in the arc42 documentation. +| *_Tiempo de Desarrollo_* | El equipo de desarrollo deberá desarrollar la aplicación cumpliendo los plazos establecidos. Incluso si eso significa utilizar tecnologías de desarrollo alternativas o cambiar las decisiones arquitectónicas originales. -**** +|=== From 0ce9a620414f4744f304c8ac7c907e701671c46c Mon Sep 17 00:00:00 2001 From: uo289039 <124291361+uo289039@users.noreply.github.com> Date: Thu, 22 Feb 2024 13:52:13 +0100 Subject: [PATCH 07/29] Update 04_solution_strategy.adoc --- docs/src/04_solution_strategy.adoc | 42 ++++++++++++++---------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 7bf03f7a..cb83de0d 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -1,32 +1,28 @@ -ifndef::imagesdir[:imagesdir: ../images] - [[section-solution-strategy]] == Solution Strategy +Elaboramos una aplicacíon, basada en Saber y Ganar, en la que los concursantes pueden registrarse para particiapr, donde en cada ronda tendran que responder varias preguntas, de distintas categorias, donde se guardará +un registro con las preguntas respondidas por el usuario y podrá revisar su histórico, también podrá ver que preguntas acerto y cuales falló. -[role="arc42help"] -**** -.Contents -A short summary and explanation of the fundamental decisions and solution strategies, that shape system architecture. It includes - -* technology decisions -* decisions about the top-level decomposition of the system, e.g. usage of an architectural pattern or design pattern -* decisions on how to achieve key quality goals -* relevant organizational decisions, e.g. selecting a development process or delegating certain tasks to third parties. - -.Motivation -These decisions form the cornerstones for your architecture. They are the foundation for many other detailed decisions or implementation rules. - -.Form -Keep the explanations of such key decisions short. +.Tecnologías usadas para llevar a cabo: -Motivate what was decided and why it was decided that way, -based upon problem statement, quality goals and key constraints. -Refer to details in the following sections. +* MongoDB: MongoDB es una base de datos NoSQL de código abierto y orientado a documentos. Guarda la información en estructuras de datos BSON (una especificación similar a JSON) con un esquema dinámico, haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida. +* React JS: Es un framework creado por Facebook ampliamente utlizado para crear componentes de la interfaz de usuario. Escogido por el gran volumen de documentación y por tratar de simplicar la creación de interfaces interactivas de usuario. +* WikiData: Es una base de conocimientos gratuita modificada tanto por seres humanos como por máquinas, y es de donde obtendremos la información para nuestras preguntas. +* IntelliJ IDEA: entorno de desarrollo integrado para el desarrollo de programas informáticos. Se emplea para desarrollar la documetación y para el desarrollo de la aplicación +.Diseño +Empleamos un diseño que respetará el estilo mítico del programa de televisión, pero que también +cumpliera con lo solicitado, que cada participante tendrá su propia cuenta donde se +guardará su información (su puntuación, el hitórico de preguntas...). -.Further Information +.Seguridad +Uno de nuestros principales objetivos a cumplir es la seguridad del usuario, permitiendole acceder a su respectiva información sin riesgos. -See https://docs.arc42.org/section-4/[Solution Strategy] in the arc42 documentation. +.Testabilidad +Se realizarán pruebas para cada parte individual de la aplicación, para asegurar el correcto funcionamiento de los diferentes modulos individuales. También se realizarán pruebas tras la unificación del proyecto, +con el fin de garantizar que la aplicación final se encuentre en buen estado y no se han producido errores de merge. -**** +.Interfaz +La interfaz gráfica será elegida entre todos los miembros del equipo, decidiendo que diseño o idea se ajusta mejor a la aplicación esperada y que elementos resultan más adecuados. +Para ello se tendrán en cuenta las necesidades de los difentes tipos de usuarios. From 666598c662ff2fa747ab56dc42f0ac974fa0fd60 Mon Sep 17 00:00:00 2001 From: uo289039 <124291361+uo289039@users.noreply.github.com> Date: Thu, 22 Feb 2024 14:30:53 +0100 Subject: [PATCH 08/29] Update 04_solution_strategy.adoc --- docs/src/04_solution_strategy.adoc | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index cb83de0d..ea603bb1 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -1,3 +1,4 @@ +ifndef::imagesdir[:imagesdir: ../images] [[section-solution-strategy]] == Solution Strategy @@ -11,18 +12,18 @@ un registro con las preguntas respondidas por el usuario y podrá revisar su his * WikiData: Es una base de conocimientos gratuita modificada tanto por seres humanos como por máquinas, y es de donde obtendremos la información para nuestras preguntas. * IntelliJ IDEA: entorno de desarrollo integrado para el desarrollo de programas informáticos. Se emplea para desarrollar la documetación y para el desarrollo de la aplicación -.Diseño +=== Diseño Empleamos un diseño que respetará el estilo mítico del programa de televisión, pero que también cumpliera con lo solicitado, que cada participante tendrá su propia cuenta donde se guardará su información (su puntuación, el hitórico de preguntas...). -.Seguridad +=== Seguridad Uno de nuestros principales objetivos a cumplir es la seguridad del usuario, permitiendole acceder a su respectiva información sin riesgos. -.Testabilidad +=== Testabilidad Se realizarán pruebas para cada parte individual de la aplicación, para asegurar el correcto funcionamiento de los diferentes modulos individuales. También se realizarán pruebas tras la unificación del proyecto, con el fin de garantizar que la aplicación final se encuentre en buen estado y no se han producido errores de merge. -.Interfaz +=== Interfaz La interfaz gráfica será elegida entre todos los miembros del equipo, decidiendo que diseño o idea se ajusta mejor a la aplicación esperada y que elementos resultan más adecuados. Para ello se tendrán en cuenta las necesidades de los difentes tipos de usuarios. From 61d0ab26b5285de08d8ebedde1401a0a29f9e027 Mon Sep 17 00:00:00 2001 From: angelalvaigle Date: Thu, 22 Feb 2024 16:20:28 +0100 Subject: [PATCH 09/29] doc: chapters 05 and 06 - v1 --- docs/src/05_building_block_view.adoc | 231 +++++---------------------- docs/src/06_runtime_view.adoc | 72 +++------ 2 files changed, 62 insertions(+), 241 deletions(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index df5c29c8..03c1d05e 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -1,212 +1,65 @@ -ifndef::imagesdir[:imagesdir: ../images] - [[section-building-block-view]] == Building Block View -[role="arc42help"] -**** -.Content -The building block view shows the static decomposition of the system into building blocks (modules, components, subsystems, classes, interfaces, packages, libraries, frameworks, layers, partitions, tiers, functions, macros, operations, data structures, ...) as well as their dependencies (relationships, associations, ...) - -This view is mandatory for every architecture documentation. -In analogy to a house this is the _floor plan_. - -.Motivation -Maintain an overview of your source code by making its structure understandable through -abstraction. - -This allows you to communicate with your stakeholder on an abstract level without disclosing implementation details. - -.Form -The building block view is a hierarchical collection of black boxes and white boxes -(see figure below) and their descriptions. - -image::05_building_blocks-EN.png["Hierarchy of building blocks"] - -*Level 1* is the white box description of the overall system together with black -box descriptions of all contained building blocks. - -*Level 2* zooms into some building blocks of level 1. -Thus it contains the white box description of selected building blocks of level 1, together with black box descriptions of their internal building blocks. - -*Level 3* zooms into selected building blocks of level 2, and so on. - +=== Whitebox of the Overall System -.Further Information +[plantuml, "whitebox-overall-system", png] +---- +actor user as "Usuario" +Component WIQ +Component Wikidata -See https://docs.arc42.org/section-5/[Building Block View] in the arc42 documentation. - -**** - -=== Whitebox Overall System - -[role="arc42help"] -**** -Here you describe the decomposition of the overall system using the following white box template. It contains - - * an overview diagram - * a motivation for the decomposition - * black box descriptions of the contained building blocks. For these we offer you alternatives: - - ** use _one_ table for a short and pragmatic overview of all contained building blocks and their interfaces - ** use a list of black box descriptions of the building blocks according to the black box template (see below). - Depending on your choice of tool this list could be sub-chapters (in text files), sub-pages (in a Wiki) or nested elements (in a modeling tool). - - - * (optional:) important interfaces, that are not explained in the black box templates of a building block, but are very important for understanding the white box. -Since there are so many ways to specify interfaces why do not provide a specific template for them. - In the worst case you have to specify and describe syntax, semantics, protocols, error handling, - restrictions, versions, qualities, necessary compatibilities and many things more. -In the best case you will get away with examples or simple signatures. - -**** - -_****_ +user -right-> WIQ: interactúa +WIQ <-right-> Wikidata: consulta +---- Motivation:: - -__ - +WIQ es una aplicación Web en la que los usuarios puedan registrarse y entrar a jugar. +El juego consiste en responder una serie de preguntas de diferentes tipos y temáticas obteniendo un premio por cada pregunta acertada. +Un aspecto importante del sistema es que las preguntas serán generadas automáticamente a partir de los datos de Wikidata (https://www.wikidata.org/). Contained Building Blocks:: -__ - -Important Interfaces:: -__ - -[role="arc42help"] -**** -Insert your explanations of black boxes from level 1: - -If you use tabular form you will only describe your black boxes with name and -responsibility according to the following schema: [cols="1,2" options="header"] |=== -| **Name** | **Responsibility** -| __ | __ -| __ | __ +| **Nombre** | **Responsabildad** +| Usuario | Interactúa con la aplicación. +| WIQ | Aplicación con la que interactúa el usuario. Se comunica con Wikidata para generar preguntas automáticamente. +| Wikidata | Base de datos colaborativa de conocimiento libre que almacena datos estructurados. |=== +[plantuml, "level-1", png] +---- +actor user as "Usuario" -If you use a list of black box descriptions then you fill in a separate black box template for every important building block . -Its headline is the name of the black box. -**** - - -==== - -[role="arc42help"] -**** -Here you describe -according the the following black box template: - -* Purpose/Responsibility -* Interface(s), when they are not extracted as separate paragraphs. This interfaces may include qualities and performance characteristics. -* (Optional) Quality-/Performance characteristics of the black box, e.g.availability, run time behavior, .... -* (Optional) directory/file location -* (Optional) Fulfilled requirements (if you need traceability to requirements). -* (Optional) Open issues/problems/risks - -**** - -__ - -__ - -_<(Optional) Quality/Performance Characteristics>_ - -_<(Optional) Directory/File Location>_ - -_<(Optional) Fulfilled Requirements>_ - -_<(optional) Open Issues/Problems/Risks>_ - - - - -==== +Component web as "WebApp" { + Component front as "Frontend Web" + Component back as "Backend" + Database db as "MongoDB" +} -__ - -==== - -__ - - -==== - -... - -==== - - - -=== Level 2 - -[role="arc42help"] -**** -Here you can specify the inner structure of (some) building blocks from level 1 as white boxes. - -You have to decide which building blocks of your system are important enough to justify such a detailed description. -Please prefer relevance over completeness. Specify important, surprising, risky, complex or volatile building blocks. -Leave out normal, simple, boring or standardized parts of your system -**** - -==== White Box __ - -[role="arc42help"] -**** -...describes the internal structure of _building block 1_. -**** - -__ - -==== White Box __ - - -__ - -... - -==== White Box __ - - -__ - - - -=== Level 3 - -[role="arc42help"] -**** -Here you can specify the inner structure of (some) building blocks from level 2 as white boxes. - -When you need more detailed levels of your architecture please copy this -part of arc42 for additional levels. -**** - - -==== White Box <_building block x.1_> - -[role="arc42help"] -**** -Specifies the internal structure of _building block x.1_. -**** - - -__ - - -==== White Box <_building block x.2_> - -__ +Component Wikidata +user <-right-> front: interactúa +front <-right-> back: interactúa +back <-right-> db: interactúa +back <-down-> Wikidata: interactúa +---- +Motivation:: +Muestra los principales componentes de WIQ. -==== White Box <_building block y.1_> +Contained Building Blocks:: -__ +[cols="1,2" options="header"] +|=== +| **Nombre** | **Responsabildad** +| Usuario | Interactúa con el frontend web de la aplicación. +| Frontend Web | Componente responsable de la interfaz de usuario del sistema. Proporciona acceso a las funcionalidades del sistema a través de un navegador web. +| Backend | Contiene la lógica de negocio y la gestión de datos del sistema. Expone endpoints para interactuar con los clientes a través de API. +| MongoDB | Sistema de gestión de bases de datos NoSQL, que utiliza un modelo de datos flexible basado en documentos JSON con esquemas dinámicos. +| Wikidata | Base de datos colaborativa de conocimiento libre que almacena datos estructurados. +|=== diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index e10f375b..f9ee4a1a 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -1,65 +1,33 @@ -ifndef::imagesdir[:imagesdir: ../images] - [[section-runtime-view]] == Runtime View +=== Runtime Level 1 -[role="arc42help"] -**** -.Contents -The runtime view describes concrete behavior and interactions of the system’s building blocks in form of scenarios from the following areas: - -* important use cases or features: how do building blocks execute them? -* interactions at critical external interfaces: how do building blocks cooperate with users and neighboring systems? -* operation and administration: launch, start-up, stop -* error and exception scenarios - -Remark: The main criterion for the choice of possible scenarios (sequences, workflows) is their *architectural relevance*. It is *not* important to describe a large number of scenarios. You should rather document a representative selection. - -.Motivation -You should understand how (instances of) building blocks of your system perform their job and communicate at runtime. -You will mainly capture scenarios in your documentation to communicate your architecture to stakeholders that are less willing or able to read and understand the static models (building block view, deployment view). - -.Form -There are many notations for describing scenarios, e.g. - -* numbered list of steps (in natural language) -* activity diagrams or flow charts -* sequence diagrams -* BPMN or EPCs (event process chains) -* state machines -* ... - +==== Registro de usuario -.Further Information +El registro de usuarios en la aplicación se gestiona a través del microservicio de usuario (userservice). +El usuario introduce un nombre y una contraseña y, si el usuario se crea correctamente, se muestra un mensaje de confirmación. +En caso contrario, se muestra un mensaje de error. -See https://docs.arc42.org/section-6/[Runtime View] in the arc42 documentation. +[plantuml, "runtime-6-1-1", svg] -**** - -=== +---- +actor user as "Usuario" +participant wiq as "WIQ" +user -> wiq: Introducir usuario y contraseña +wiq --> user: Interacción visual +---- +==== Inicio de sesión -* __ -* __ +El inicio de sesión de la aplicación se gestiona a través del microservicio de autenticación (authservice). +El usuario introduce sus credenciales y, si los datos son verídicos, se muestra una vista de la aplicación con las opciones disponibles. -It is possible to use a sequence diagram: +[plantuml, "runtime-6-1-1", svg] -[plantuml,"Sequence diagram",png] ---- -actor Alice -actor Bob -database Pod as "Bob's Pod" -Alice -> Bob: Authentication Request -Bob --> Alice: Authentication Response -Alice --> Pod: Store route -Alice -> Bob: Another authentication Request -Alice <-- Bob: another authentication Response +actor user as "Usuario" +participant wiq as "WIQ" +user -> wiq: Introducir credenciales +wiq --> user: Interacción visual ---- - -=== - -=== ... - -=== From 10440e2f555963254597adc4d998ce869f78f556 Mon Sep 17 00:00:00 2001 From: uo289039 <124291361+uo289039@users.noreply.github.com> Date: Thu, 22 Feb 2024 17:14:50 +0100 Subject: [PATCH 10/29] Update 04_solution_strategy.adoc --- docs/src/04_solution_strategy.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index ea603bb1..9fd18a37 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -5,7 +5,7 @@ ifndef::imagesdir[:imagesdir: ../images] Elaboramos una aplicacíon, basada en Saber y Ganar, en la que los concursantes pueden registrarse para particiapr, donde en cada ronda tendran que responder varias preguntas, de distintas categorias, donde se guardará un registro con las preguntas respondidas por el usuario y podrá revisar su histórico, también podrá ver que preguntas acerto y cuales falló. -.Tecnologías usadas para llevar a cabo: +=== Tecnologías usadas para llevar a cabo: * MongoDB: MongoDB es una base de datos NoSQL de código abierto y orientado a documentos. Guarda la información en estructuras de datos BSON (una especificación similar a JSON) con un esquema dinámico, haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida. * React JS: Es un framework creado por Facebook ampliamente utlizado para crear componentes de la interfaz de usuario. Escogido por el gran volumen de documentación y por tratar de simplicar la creación de interfaces interactivas de usuario. From 2475ecf365ad0de37960e560f01c5997205f6a8e Mon Sep 17 00:00:00 2001 From: uo289039 <124291361+uo289039@users.noreply.github.com> Date: Thu, 22 Feb 2024 17:46:11 +0100 Subject: [PATCH 11/29] Format changed 04_solution_strategy.adoc --- docs/src/04_solution_strategy.adoc | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 9fd18a37..d8efd021 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -1,28 +1,24 @@ -ifndef::imagesdir[:imagesdir: ../images] [[section-solution-strategy]] == Solution Strategy -Elaboramos una aplicacíon, basada en Saber y Ganar, en la que los concursantes pueden registrarse para particiapr, donde en cada ronda tendran que responder varias preguntas, de distintas categorias, donde se guardará -un registro con las preguntas respondidas por el usuario y podrá revisar su histórico, también podrá ver que preguntas acerto y cuales falló. +|=== +| *_Restricciones de arquitectura_* | *_Descripción_* +| *_Solución Estratégica_* | Elaboramos una aplicacíon, basada en Saber y Ganar, en la que los concursantes pueden registrarse para participar, donde en cada ronda tendran que responder varias preguntas, de distintas categorias, donde se guardará un registro con las preguntas respondidas por el usuario y podrá revisar su histórico, también podrá ver que preguntas acerto y cuales falló. -=== Tecnologías usadas para llevar a cabo: +| *_Tecnologías usadas para llevar a cabo_* | * MongoDB: MongoDB es una base de datos NoSQL de código abierto y orientado a documentos. Guarda la información en estructuras de datos BSON (una especificación similar a JSON) con un esquema dinámico, haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida. * React JS: Es un framework creado por Facebook ampliamente utlizado para crear componentes de la interfaz de usuario. Escogido por el gran volumen de documentación y por tratar de simplicar la creación de interfaces interactivas de usuario. * WikiData: Es una base de conocimientos gratuita modificada tanto por seres humanos como por máquinas, y es de donde obtendremos la información para nuestras preguntas. * IntelliJ IDEA: entorno de desarrollo integrado para el desarrollo de programas informáticos. Se emplea para desarrollar la documetación y para el desarrollo de la aplicación -=== Diseño -Empleamos un diseño que respetará el estilo mítico del programa de televisión, pero que también -cumpliera con lo solicitado, que cada participante tendrá su propia cuenta donde se -guardará su información (su puntuación, el hitórico de preguntas...). +| *_Diseño_* | Empleamos un diseño que respetará el estilo mítico del programa de televisión, pero que también cumpliera con lo solicitado, que cada participante tendrá su propia cuenta donde se guardará su información (su puntuación, el hitórico de preguntas...). -=== Seguridad +| *_Seguridad_* | Uno de nuestros principales objetivos a cumplir es la seguridad del usuario, permitiendole acceder a su respectiva información sin riesgos. -=== Testabilidad -Se realizarán pruebas para cada parte individual de la aplicación, para asegurar el correcto funcionamiento de los diferentes modulos individuales. También se realizarán pruebas tras la unificación del proyecto, -con el fin de garantizar que la aplicación final se encuentre en buen estado y no se han producido errores de merge. +| *_Testabilidad_* | Se realizarán pruebas para cada parte individual de la aplicación, para asegurar el correcto funcionamiento de los diferentes modulos individuales. También se realizarán pruebas tras la unificación del proyecto, con el fin de garantizar que la aplicación final se encuentre en buen estado y no se han producido errores de merge. +|=== === Interfaz La interfaz gráfica será elegida entre todos los miembros del equipo, decidiendo que diseño o idea se ajusta mejor a la aplicación esperada y que elementos resultan más adecuados. From 8be44864ce0c11fe015d3705e4b24209a95bf274 Mon Sep 17 00:00:00 2001 From: UO284238 Date: Thu, 22 Feb 2024 19:10:55 +0100 Subject: [PATCH 12/29] =?UTF-8?q?Adici=C3=B3n=20apartados=2010=20y=2011=20?= =?UTF-8?q?de=20la=20documentaci=C3=B3n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/images/quality_tree.png | Bin 0 -> 26572 bytes docs/src/10_quality_requirements.adoc | 78 +++++++-------------- docs/src/11_risks_and_technical_debts.adoc | 41 +++++++++++ docs/src/11_technical_risks.adoc | 25 ------- 4 files changed, 65 insertions(+), 79 deletions(-) create mode 100644 docs/images/quality_tree.png create mode 100644 docs/src/11_risks_and_technical_debts.adoc delete mode 100644 docs/src/11_technical_risks.adoc diff --git a/docs/images/quality_tree.png b/docs/images/quality_tree.png new file mode 100644 index 0000000000000000000000000000000000000000..38369de8023436287988f24b1915e2b2a367b98b GIT binary patch literal 26572 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 ZT$-Y8Zg`sl|DI>VDP0qMp3eE3{|6eOQb_;+ literal 0 HcmV?d00001 diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index 68475e80..3a8338b0 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -1,73 +1,43 @@ ifndef::imagesdir[:imagesdir: ../images] -[[section-quality-scenarios]] +[[section-quality-requirements]] == Quality Requirements +A continuación se muestra el árbol de atributos de calidad, cuyas hojas son los escenarios de calidad descritos en la tabla. -[role="arc42help"] -**** - -.Content -This section contains all quality requirements as quality tree with scenarios. The most important ones have already been described in section 1.2. (quality goals) - -Here you can also capture quality requirements with lesser priority, -which will not create high risks when they are not fully achieved. - -.Motivation -Since quality requirements will have a lot of influence on architectural -decisions you should know for every stakeholder what is really important to them, -concrete and measurable. - - -.Further Information - -See https://docs.arc42.org/section-10/[Quality Requirements] in the arc42 documentation. - -**** === Quality Tree -[role="arc42help"] -**** -.Content -The quality tree (as defined in ATAM – Architecture Tradeoff Analysis Method) with quality/evaluation scenarios as leafs. - -.Motivation -The tree structure with priorities provides an overview for a sometimes large number of quality requirements. - -.Form -The quality tree is a high-level overview of the quality goals and requirements: +image::quality_tree.png["Quality Tree"] -* tree-like refinement of the term "quality". Use "quality" or "usefulness" as a root -* a mind map with quality categories as main branches - -In any case the tree should include links to the scenarios of the following section. +=== Quality Scenarios +.Quality Scenarios +|=== +|Atributo de Calidad|Descripción -**** +| SC1 +| Para mantener la usabilidad de la aplicación, se buscará mantener un diseño uniforme. -=== Quality Scenarios +| SC2 +| Para no complicar el aprendizaje de uso, la experiencia del usuario se basará en la predictabilidad. -[role="arc42help"] -**** -.Contents -Concretization of (sometimes vague or implicit) quality requirements using (quality) scenarios. +| SC3 +| Se realizarán pruebas exhaustivas para asegurar el correcto funcionamiento de todos los servicios presentes en la aplicación. -These scenarios describe what should happen when a stimulus arrives at the system. +| SC4 +| Para mantener la fiabilidad, se buscará un uso de recursos optimizado. -For architects, two kinds of scenarios are important: +| SC5 +| Se buscará un rendimiento eficiente y rápido para no afectar la experiencia de usuario. -* Usage scenarios (also called application scenarios or use case scenarios) describe the system’s runtime reaction to a certain stimulus. This also includes scenarios that describe the system’s efficiency or performance. Example: The system reacts to a user’s request within one second. -* Change scenarios describe a modification of the system or of its immediate environment. Example: Additional functionality is implemented or requirements for a quality attribute change. +| SC6 +| En cuanto a la seguridad, se bloqueará el acceso a cuentas ajenas. -.Motivation -Scenarios make quality requirements concrete and allow to -more easily measure or decide whether they are fulfilled. +| SC7 +| Se mantendrán los datos de usuario privados y seguros. -Especially when you want to assess your architecture using methods like -ATAM you need to describe your quality goals (from section 1.2) -more precisely down to a level of scenarios that can be discussed and evaluated. +|=== -.Form -Tabular or free form text. -**** +.Nota del editor: +A medida que se desarrolla el proyecto, se actualizará esta sección con escenarios de calidad más específicos. \ No newline at end of file diff --git a/docs/src/11_risks_and_technical_debts.adoc b/docs/src/11_risks_and_technical_debts.adoc new file mode 100644 index 00000000..53057440 --- /dev/null +++ b/docs/src/11_risks_and_technical_debts.adoc @@ -0,0 +1,41 @@ +ifndef::imagesdir[:imagesdir: ../images] + +[[section-technical-risks]] +== Risks and Technical Debts + +A continuación, se presentan en formato tabla los riesgos y posibles deudas técnicas consideredas por el equipo de desarrollo. + +.Development Team Risks +|=== +|Riesgo|Descripción|Medida Preventiva + +| Faltas de comunicación entre los miembros del equipo. +| Las faltas de comunicación podrán causar conflictos en la aplicación desarrollada, que supone una deuda técnica. +| Se hará uso de varias vías de comunicación para evitar faltas y despejar dudas. Ejemplos de estos son Discord y WhatsApp. + +| Posible abandono de algún miembro del equipo. +| El abandono debido a la carga de trabajo incurrirá una deuda técnica que deberá compensar el resto de miembros del equipo. +| Se repartirán las tareas en grupos de trabajo de 2 o más miembros para minimizar el impacto que supondría un abandono. + +| Inexperiencia con las tecnologías empleadas. +| Debido a la posible inexperiencia con las tecnologías empleadas en el proyecto, se pueden producir deudas técnicas. +| Para minimizar el impacto, se recomienda investigar y probar las tecnologías para alcanzar un grado de control mínimo sobre ellas. + +|=== + +.Software Risks +|=== +|Riesgo|Descripción|Medida Preventiva + +| Conflictos en el repositorio GitHub. +| El acceso múltiple y simultáneo al repositorio desde varios usuarios supone un riesgo de sobreescritura y conflictos de código. +| Se hará uso de ramas de trabajo para realizar las tareas, además de las vías de comunicación para coordinar las modificaciones al repositorio. + +| Conflictos con los programas desarrollados. +| El trabajo en paralelo sobre los módulos de la aplicación supone un riesgo de conflicto si no hay estándares para código común a dichos módulos. +| Se planteará una plantilla de código o nomenclatura de clases, métodos, etc común para aquellos módulos que tengan puntos en común. + +|=== + +.Nota del editor: +A medida que se desarrolla el proyecto, se actualizará esta sección con los riesgos o deudas técnicas consideradas para los ámbitos de la aplicación. diff --git a/docs/src/11_technical_risks.adoc b/docs/src/11_technical_risks.adoc deleted file mode 100644 index dc5575fc..00000000 --- a/docs/src/11_technical_risks.adoc +++ /dev/null @@ -1,25 +0,0 @@ -ifndef::imagesdir[:imagesdir: ../images] - -[[section-technical-risks]] -== Risks and Technical Debts - - -[role="arc42help"] -**** -.Contents -A list of identified technical risks or technical debts, ordered by priority - -.Motivation -“Risk management is project management for grown-ups” (Tim Lister, Atlantic Systems Guild.) - -This should be your motto for systematic detection and evaluation of risks and technical debts in the architecture, which will be needed by management stakeholders (e.g. project managers, product owners) as part of the overall risk analysis and measurement planning. - -.Form -List of risks and/or technical debts, probably including suggested measures to minimize, mitigate or avoid risks or reduce technical debts. - - -.Further Information - -See https://docs.arc42.org/section-11/[Risks and Technical Debt] in the arc42 documentation. - -**** From 40fb76e803b09007f6ababa9c1182dcfc13c9c96 Mon Sep 17 00:00:00 2001 From: UO284238 Date: Thu, 22 Feb 2024 19:21:54 +0100 Subject: [PATCH 13/29] =?UTF-8?q?Correcci=C3=B3n=20nombre=20archivo=2011.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...{11_risks_and_technical_debts.adoc => 11_technical_risks.adoc} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename docs/src/{11_risks_and_technical_debts.adoc => 11_technical_risks.adoc} (100%) diff --git a/docs/src/11_risks_and_technical_debts.adoc b/docs/src/11_technical_risks.adoc similarity index 100% rename from docs/src/11_risks_and_technical_debts.adoc rename to docs/src/11_technical_risks.adoc From 8ab05a6fd0f4bbe8e4ffc86b581ef9e482fa9c8f Mon Sep 17 00:00:00 2001 From: angelalvaigle Date: Thu, 22 Feb 2024 19:46:44 +0100 Subject: [PATCH 14/29] doc: chapters 05 and 06 - v2 --- docs/images/5_image_1.png | Bin 0 -> 4838 bytes docs/images/5_image_2.png | Bin 0 -> 12616 bytes docs/src/05_building_block_view.adoc | 30 ++------------------------- 3 files changed, 2 insertions(+), 28 deletions(-) create mode 100644 docs/images/5_image_1.png create mode 100644 docs/images/5_image_2.png diff --git a/docs/images/5_image_1.png b/docs/images/5_image_1.png new file mode 100644 index 0000000000000000000000000000000000000000..c3062b0bab375df6bcac94aae0ffecbc5b7eec8a GIT binary patch literal 4838 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 literal 0 HcmV?d00001 diff --git a/docs/images/5_image_2.png b/docs/images/5_image_2.png new file mode 100644 index 0000000000000000000000000000000000000000..6110a5e38eae5621047ab797b0deff290aef0a98 GIT binary patch literal 12616 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 literal 0 HcmV?d00001 diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 03c1d05e..eb3aec0f 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -4,16 +4,7 @@ == Building Block View === Whitebox of the Overall System - -[plantuml, "whitebox-overall-system", png] ----- -actor user as "Usuario" -Component WIQ -Component Wikidata - -user -right-> WIQ: interactúa -WIQ <-right-> Wikidata: consulta ----- +image::5_image_1.png["whitebox-overall-system"] Motivation:: WIQ es una aplicación Web en la que los usuarios puedan registrarse y entrar a jugar. @@ -30,24 +21,7 @@ Contained Building Blocks:: | Wikidata | Base de datos colaborativa de conocimiento libre que almacena datos estructurados. |=== -[plantuml, "level-1", png] - ----- -actor user as "Usuario" - -Component web as "WebApp" { - Component front as "Frontend Web" - Component back as "Backend" - Database db as "MongoDB" -} - -Component Wikidata - -user <-right-> front: interactúa -front <-right-> back: interactúa -back <-right-> db: interactúa -back <-down-> Wikidata: interactúa ----- +image::5_image_2.png["level-1"] Motivation:: Muestra los principales componentes de WIQ. From bddd1399aa69fea53c4027f30ac3c7addcc53c1c Mon Sep 17 00:00:00 2001 From: uo289039 <124291361+uo289039@users.noreply.github.com> Date: Thu, 22 Feb 2024 20:01:08 +0100 Subject: [PATCH 15/29] Update 04_solution_strategy.adoc --- docs/src/04_solution_strategy.adoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index d8efd021..7b043cc1 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -8,8 +8,11 @@ | *_Tecnologías usadas para llevar a cabo_* | * MongoDB: MongoDB es una base de datos NoSQL de código abierto y orientado a documentos. Guarda la información en estructuras de datos BSON (una especificación similar a JSON) con un esquema dinámico, haciendo que la integración de los datos en ciertas aplicaciones sea más fácil y rápida. + * React JS: Es un framework creado por Facebook ampliamente utlizado para crear componentes de la interfaz de usuario. Escogido por el gran volumen de documentación y por tratar de simplicar la creación de interfaces interactivas de usuario. + * WikiData: Es una base de conocimientos gratuita modificada tanto por seres humanos como por máquinas, y es de donde obtendremos la información para nuestras preguntas. + * IntelliJ IDEA: entorno de desarrollo integrado para el desarrollo de programas informáticos. Se emplea para desarrollar la documetación y para el desarrollo de la aplicación | *_Diseño_* | Empleamos un diseño que respetará el estilo mítico del programa de televisión, pero que también cumpliera con lo solicitado, que cada participante tendrá su propia cuenta donde se guardará su información (su puntuación, el hitórico de preguntas...). From edcac654563dc408fc65a6219ba3c6f36699bb72 Mon Sep 17 00:00:00 2001 From: uo289039 <124291361+uo289039@users.noreply.github.com> Date: Thu, 22 Feb 2024 20:04:05 +0100 Subject: [PATCH 16/29] Final Update 04_solution_strategy.adoc --- docs/src/04_solution_strategy.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 7b043cc1..c03644b3 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -23,6 +23,6 @@ Uno de nuestros principales objetivos a cumplir es la seguridad del usuario, per | *_Testabilidad_* | Se realizarán pruebas para cada parte individual de la aplicación, para asegurar el correcto funcionamiento de los diferentes modulos individuales. También se realizarán pruebas tras la unificación del proyecto, con el fin de garantizar que la aplicación final se encuentre en buen estado y no se han producido errores de merge. |=== -=== Interfaz -La interfaz gráfica será elegida entre todos los miembros del equipo, decidiendo que diseño o idea se ajusta mejor a la aplicación esperada y que elementos resultan más adecuados. +| *_Interfaz_* |La interfaz gráfica será elegida entre todos los miembros del equipo, decidiendo que diseño o idea se ajusta mejor a la aplicación esperada y que elementos resultan más adecuados. Para ello se tendrán en cuenta las necesidades de los difentes tipos de usuarios. +|=== From 7606a7d413cb66c36a58e45d7b07d82ee31ce344 Mon Sep 17 00:00:00 2001 From: uo289039 <124291361+uo289039@users.noreply.github.com> Date: Thu, 22 Feb 2024 20:04:44 +0100 Subject: [PATCH 17/29] Ultimate update 04_solution_strategy.adoc --- docs/src/04_solution_strategy.adoc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index c03644b3..9cc9bb4d 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -21,8 +21,7 @@ Uno de nuestros principales objetivos a cumplir es la seguridad del usuario, permitiendole acceder a su respectiva información sin riesgos. | *_Testabilidad_* | Se realizarán pruebas para cada parte individual de la aplicación, para asegurar el correcto funcionamiento de los diferentes modulos individuales. También se realizarán pruebas tras la unificación del proyecto, con el fin de garantizar que la aplicación final se encuentre en buen estado y no se han producido errores de merge. -|=== -| *_Interfaz_* |La interfaz gráfica será elegida entre todos los miembros del equipo, decidiendo que diseño o idea se ajusta mejor a la aplicación esperada y que elementos resultan más adecuados. +| *_Interfaz_* | La interfaz gráfica será elegida entre todos los miembros del equipo, decidiendo que diseño o idea se ajusta mejor a la aplicación esperada y que elementos resultan más adecuados. Para ello se tendrán en cuenta las necesidades de los difentes tipos de usuarios. |=== From 43d0adbc920ad48eab7e372e5c498bfcf3d66dfd Mon Sep 17 00:00:00 2001 From: Uniovi283728 <113524917+Uniovi283728@users.noreply.github.com> Date: Fri, 23 Feb 2024 10:40:41 +0100 Subject: [PATCH 18/29] =?UTF-8?q?"Merge"=20de=20documentaci=C3=B3n=209?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cambiado manualmente el contenido por problemas al intentar hacer merge. --- docs/src/09_architecture_decisions.adoc | 44 ++++++------------------- 1 file changed, 10 insertions(+), 34 deletions(-) diff --git a/docs/src/09_architecture_decisions.adoc b/docs/src/09_architecture_decisions.adoc index 51e9aad9..f5ba43a2 100644 --- a/docs/src/09_architecture_decisions.adoc +++ b/docs/src/09_architecture_decisions.adoc @@ -1,35 +1,11 @@ -ifndef::imagesdir[:imagesdir: ../images] - [[section-design-decisions]] -== Architecture Decisions - - -[role="arc42help"] -**** -.Contents -Important, expensive, large scale or risky architecture decisions including rationales. -With "decisions" we mean selecting one alternative based on given criteria. - -Please use your judgement to decide whether an architectural decision should be documented -here in this central section or whether you better document it locally -(e.g. within the white box template of one building block). - -Avoid redundancy. -Refer to section 4, where you already captured the most important decisions of your architecture. - -.Motivation -Stakeholders of your system should be able to comprehend and retrace your decisions. - -.Form -Various options: - -* ADR (https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions[Documenting Architecture Decisions]) for every important decision -* List or table, ordered by importance and consequences or: -* more detailed in form of separate sections per decision - -.Further Information - -See https://docs.arc42.org/section-9/[Architecture Decisions] in the arc42 documentation. -There you will find links and examples about ADR. - -**** +== Design Decisions + +[options="header",cols="1,4"] +|=== +|Decision|Explanation +| Priorizar usabilidad, rendimiento y disponibilidad frente a seguridad | Tratándose de una aplicación de ocio que no gestiona datos personales importantes, resultarían más problemáticos una caída del acceso al servicio o un fallo o retardo en su funcionamiento que un acceso no autorizado a los pocos datos que guarda. +| Uso de arquitectura de microservicios | Simplifica la implementación de las distintas partes del programa, permitiendo centrarse en funcionalidades concretas, además de contar con algunos de los microservicios ya hechos en el material desde el que hemos partido. +| Uso de MongoDB | La integración de datos es más fácil y rápida que con bases de datos relacionales, y un miembro del equipo ya tenía experiencia con el sistema. +| Uso de React | Estando centrada en la facilitación del desarrollo de single-page applications, parece la biblioteca más adecuada para simplificar la implementación de las interfaces de usuario. Cuenta con suficiente documentación para facilitar su propio uso. +|=== From 55e4eede6374c28e68910e948071b3d30053e4ed Mon Sep 17 00:00:00 2001 From: Uniovi283728 <113524917+Uniovi283728@users.noreply.github.com> Date: Fri, 23 Feb 2024 10:44:04 +0100 Subject: [PATCH 19/29] =?UTF-8?q?"Merge"=20de=20la=20documentaci=C3=B3n=20?= =?UTF-8?q?12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cambiado manualmente por problemas con el merge. --- docs/src/12_glossary.adoc | 44 +++++++-------------------------------- 1 file changed, 8 insertions(+), 36 deletions(-) diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index 192b2353..7c1eac9b 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -1,42 +1,14 @@ -ifndef::imagesdir[:imagesdir: ../images] - [[section-glossary]] == Glossary -[role="arc42help"] -**** -.Contents -The most important domain and technical terms that your stakeholders use when discussing the system. - -You can also see the glossary as source for translations if you work in multi-language teams. - -.Motivation -You should clearly define your terms, so that all stakeholders - -* have an identical understanding of these terms -* do not use synonyms and homonyms - - -.Form - -A table with columns and . - -Potentially more columns in case you need translations. - - -.Further Information - -See https://docs.arc42.org/section-12/[Glossary] in the arc42 documentation. - -**** - -[cols="e,2e" options="header"] +[options="header"] |=== -|Term |Definition - -| -| +| Término | Definición +| Backend | Parte "interna" de la arquitectura de la aplicación, que contiene la lógica que permite la propia funcionalidad del programa y está oculta a los ojos del usuario. +| Base de datos | Sistema electrónico que contiene un conjunto de datos e información organizada y facilita el acceso y la gestión y manipulación de los mismos. +| Frontend | Parte "externa" de la arquitectura de la aplicación que incluye la interfaz de usuario y los elementos visuales que se muestran de cara al público. +| JSON | Formato de texto diseñado para el almacenamiento e intercambio de datos que forma parte del sistema de JavaScript. +| Microservicios | Cada uno de los segmentos de la aplicación que ofrecen su propio servicio y funcionalidad específicos, ejecutándose en sus propios procesos y comunicándose entre ellos. +| Testabilidad | Cualidad de un producto software que permite que sea probado debidamente. -| -| |=== From 42ee45a0ab75b4cfbcd8858a578e3e52673c18ee Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?holmess=20-=20Sara=20Fern=C3=A1ndez=20Gonz=C3=A1lez=20-=20?= =?UTF-8?q?UO288195?= <54588352+holmess23@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:08:55 +0100 Subject: [PATCH 20/29] Correcciones de idioma en 01_introduction_and_goals.adoc --- docs/src/01_introduction_and_goals.adoc | 87 +------------------------ 1 file changed, 2 insertions(+), 85 deletions(-) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index 9ad22dd9..56fccd60 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -1,7 +1,7 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-introduction-and-goals]] -== Introduction and Goals +== Introducción y Objetivos Saber y Ganar es el proyecto de Arquitectura de Software desarrollado por el equipo 6A. Los integrantes de este equipo son: @@ -16,50 +16,7 @@ Con el profesor: Jorge Álvarez Fidalgo Este proyecto consiste en una aplicación con un juego de preguntas y respuestas. Además los usuarios registrados podrán ver sus estadísticas y las de otros jugadores. -[role="arc42help"] -**** -Describes the relevant requirements and the driving forces that software architects and development team must consider. -These include - -* underlying business goals, -* essential features, -* essential functional requirements, -* quality goals for the architecture and -* relevant stakeholders and their expectations -**** - -=== Requirements Overview - -* El sistema permitirá a los usuarios registrarse e iniciar sesión. -* El sistema permitirá a los usuarios acceder a un juego de preguntas en el que tendrán un tiempo para contestar. Este juego consistirá en una pregunta con cuatro posibles respuestas generado de manera automática. -* El sistema permitirá a los usuarios ver sus estadísticas así como el historial de sus preguntas respondidas. -* El sistema permitirá a los usuarios buscar a otros usuarios y ver sus estadísticas de juego. - -[role="arc42help"] -**** -.Contents -Short description of the functional requirements, driving forces, extract (or abstract) -of requirements. Link to (hopefully existing) requirements documents -(with version number and information where to find it). - -.Motivation -From the point of view of the end users a system is created or modified to -improve support of a business activity and/or improve the quality. - -.Form -Short textual description, probably in tabular use-case format. -If requirements documents exist this overview should refer to these documents. - -Keep these excerpts as short as possible. Balance readability of this document with potential redundancy w.r.t to requirements documents. - - -.Further Information - -See https://docs.arc42.org/section-1/[Introduction and Goals] in the arc42 documentation. - -**** - -=== Quality Goals +=== Objetivos de Calidad Segun ISO/IEC 25010 [options="header",cols="1,2,2"] @@ -71,48 +28,8 @@ Segun ISO/IEC 25010 | Seguridad | Se debe buscar cumplir unos mínimos para que no sea fácil el acceso a cuentas que no te pertenecen y que la información de los usuarios no quede fácilmente expuesta. Pero no es uno de los objetivos clave. | 1 |=== -[role="arc42help"] -**** -.Contents -The top three (max five) quality goals for the architecture whose fulfillment is of highest importance to the major stakeholders. -We really mean quality goals for the architecture. Don't confuse them with project goals. -They are not necessarily identical. - -Consider this overview of potential topics (based upon the ISO 25010 standard): - -image::01_2_iso-25010-topics-EN.drawio.png["Categories of Quality Requirements"] - -.Motivation -You should know the quality goals of your most important stakeholders, since they will influence fundamental architectural decisions. -Make sure to be very concrete about these qualities, avoid buzzwords. -If you as an architect do not know how the quality of your work will be judged... - -.Form -A table with quality goals and concrete scenarios, ordered by priorities -**** - === Stakeholders -[role="arc42help"] -**** -.Contents -Explicit overview of stakeholders of the system, i.e. all person, roles or organizations that - -* should know the architecture -* have to be convinced of the architecture -* have to work with the architecture or with code -* need the documentation of the architecture for their work -* have to come up with decisions about the system or its development - -.Motivation -You should know all parties involved in development of the system or affected by the system. -Otherwise, you may get nasty surprises later in the development process. -These stakeholders determine the extent and the level of detail of your work and its results. - -.Form -Table with role names, person names, and their expectations with respect to the architecture and its documentation. -**** - [options="header",cols="1,2,2"] |=== |Rol|Descripción|Expectativas From e3e59ca8145340b010b65b0b90c18f5750d901b3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?holmess=20-=20Sara=20Fern=C3=A1ndez=20Gonz=C3=A1lez=20-=20?= =?UTF-8?q?UO288195?= <54588352+holmess23@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:13:41 +0100 Subject: [PATCH 21/29] Correcciones de idioma en 03_system_scope_and_context.adoc --- docs/src/03_system_scope_and_context.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/src/03_system_scope_and_context.adoc b/docs/src/03_system_scope_and_context.adoc index 7f17503d..c2879d1e 100644 --- a/docs/src/03_system_scope_and_context.adoc +++ b/docs/src/03_system_scope_and_context.adoc @@ -1,13 +1,13 @@ [[section-system-scope-and-context]] -== System Scope and Context +== Alcance y Contexto del Sistema -=== Business Context +=== Contexto de Negocio :imagesdir: ../images image::business.png[] -=== Technical Context +=== Contexto Técnico :imagesdir: ../images image::technical.png[] From 84ecc47d5879bb783d248d877985ec6fc19e4ea8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?holmess=20-=20Sara=20Fern=C3=A1ndez=20Gonz=C3=A1lez=20-=20?= =?UTF-8?q?UO288195?= <54588352+holmess23@users.noreply.github.com> Date: Tue, 27 Feb 2024 09:16:13 +0100 Subject: [PATCH 22/29] =?UTF-8?q?A=C3=B1adido=20criterio=20de=20calidad=20?= =?UTF-8?q?rendimiento=20en=2001=5Fintroduction=5Fand=5Fgoals.adoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/01_introduction_and_goals.adoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index 56fccd60..bb36c349 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -24,7 +24,8 @@ Segun ISO/IEC 25010 |Objetivo de Calidad|Realización|Prioridad | Usabilidad | Para que la aplicación sea usable se buscará mantener un diseño uniforme y basarse en la predictibilidad para que el aprendizaje de uso de la aplicación sea sencillo y para que no se complique la experiencia del usuario.| 5 | Testabilidad | Se realizarán pruebas lo más exhaustivas posible para asegurar el correcto funcionamiento de todos los servicios presentes en la aplicación. | 4 -| Fiabilidad | Se buscará que el uso de recursos dentro de la aplicación sea lo más optimizado posible para que el funcionamiento de la aplicación no se vea afectado en velocidad o eficacia. | 4 +| Rendimiento | Una de las prioridades del proyecto es que funcione en tiempo y forma y que no se generen grandes pantallas de carga y que el jugador no tenga que esperar demasiado para poder jugar cómodamente. | 4 +| Fiabilidad | Se buscará que el uso de recursos dentro de la aplicación sea lo más optimizado posible para que el funcionamiento de la aplicación no se vea afectado en velocidad o eficacia. | 3 | Seguridad | Se debe buscar cumplir unos mínimos para que no sea fácil el acceso a cuentas que no te pertenecen y que la información de los usuarios no quede fácilmente expuesta. Pero no es uno de los objetivos clave. | 1 |=== From 113d185d4e11adfe9e20edfe8832c2094d49033c Mon Sep 17 00:00:00 2001 From: sara Date: Tue, 27 Feb 2024 09:24:54 +0100 Subject: [PATCH 23/29] modificacion a denominacion Home --- webapp/src/App.js | 4 ++-- webapp/src/components/{Main.js => Home.js} | 6 +++--- webapp/src/components/Login.js | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) rename webapp/src/components/{Main.js => Home.js} (73%) diff --git a/webapp/src/App.js b/webapp/src/App.js index e924c00a..ce11cb27 100644 --- a/webapp/src/App.js +++ b/webapp/src/App.js @@ -5,7 +5,7 @@ import CssBaseline from '@mui/material/CssBaseline'; import Container from '@mui/material/Container'; import Typography from '@mui/material/Typography'; import Link from '@mui/material/Link'; -import Main from "./components/Main"; +import Home from "./components/Home"; function App() { const [showLogin, setShowLogin] = useState(true); @@ -26,7 +26,7 @@ function App() { return ( - {login ?
: ( + {login ? : ( <> diff --git a/webapp/src/components/Main.js b/webapp/src/components/Home.js similarity index 73% rename from webapp/src/components/Main.js rename to webapp/src/components/Home.js index a701bea9..d0e35ed6 100644 --- a/webapp/src/components/Main.js +++ b/webapp/src/components/Home.js @@ -3,15 +3,15 @@ import NavBar from "./NavBar"; import GamesPanel from "./GamesPanel"; import Container from "@mui/material/Container"; -const Main = (props) => { +const Home = (props) => { // userData contiene los datos del usuario que fueron pasados como props desde el componente Login return ( - + ); }; -export default Main; \ No newline at end of file +export default Home; \ No newline at end of file diff --git a/webapp/src/components/Login.js b/webapp/src/components/Login.js index 196dae29..b1fd13fd 100644 --- a/webapp/src/components/Login.js +++ b/webapp/src/components/Login.js @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import axios from 'axios'; import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; -import Main from "./Main"; +import Home from "./Home"; const Login = ({sendLogin, sendUsername}) => { const [username, setUsername] = useState(''); From 1330d0280ee4500841ada34152b1d8697e6d8c60 Mon Sep 17 00:00:00 2001 From: sara Date: Tue, 27 Feb 2024 10:15:12 +0100 Subject: [PATCH 24/29] esquema mongoDB preguntas --- .idea/jsLibraryMappings.xml | 6 + .idea/workspace.xml | 75 + package-lock.json | 6 + practicas/.idea/workspace.xml | 59 + questions/createqservice/package-lock.json | 5411 ++++++++++++++++++ questions/createqservice/package.json | 31 + questions/createqservice/question-model.js | 16 + questions/createqservice/question-service.js | 58 + 8 files changed, 5662 insertions(+) create mode 100644 .idea/jsLibraryMappings.xml create mode 100644 .idea/workspace.xml create mode 100644 package-lock.json create mode 100644 practicas/.idea/workspace.xml create mode 100644 questions/createqservice/package-lock.json create mode 100644 questions/createqservice/package.json create mode 100644 questions/createqservice/question-model.js create mode 100644 questions/createqservice/question-service.js diff --git a/.idea/jsLibraryMappings.xml b/.idea/jsLibraryMappings.xml new file mode 100644 index 00000000..cc3da93f --- /dev/null +++ b/.idea/jsLibraryMappings.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 00000000..aeba49f7 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,75 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1709024704264 + + + + + + \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..b84eb7f4 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "ASW", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/practicas/.idea/workspace.xml b/practicas/.idea/workspace.xml new file mode 100644 index 00000000..b3240dc7 --- /dev/null +++ b/practicas/.idea/workspace.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1709024560970 + + + + + + \ No newline at end of file diff --git a/questions/createqservice/package-lock.json b/questions/createqservice/package-lock.json new file mode 100644 index 00000000..f21b26cb --- /dev/null +++ b/questions/createqservice/package-lock.json @@ -0,0 +1,5411 @@ +{ + "name": "userservice", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "userservice", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "express": "^4.18.2", + "mongoose": "^8.0.4" + }, + "devDependencies": { + "jest": "^29.7.0", + "mongodb-memory-server": "^9.1.5", + "supertest": "^6.3.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/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/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/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==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz", + "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/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/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/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==", + "dev": true + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz", + "integrity": "sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "20.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz", + "integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "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.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/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/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "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.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "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/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "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==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/bson": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz", + "integrity": "sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "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==", + "dev": true + }, + "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/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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/caniuse-lite": { + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "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/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "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/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "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.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "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": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "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/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "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/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.623", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz", + "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "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": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.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==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "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": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "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/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/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/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "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/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "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/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "devOptional": true + }, + "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-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "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-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/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==", + "dev": true + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "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.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.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.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mongodb": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.2.0.tgz", + "integrity": "sha512-d7OSuGjGWDZ5usZPqfvb36laQ9CPhnWkAGHT61x5P95p/8nMVeH8asloMwW6GcYFeB0Vj4CB/1wOTDG2RA9BFA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.2.0", + "mongodb-connection-string-url": "^2.6.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongodb-memory-server": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-9.1.5.tgz", + "integrity": "sha512-m7yewXoyctu2lwISq/sazwOV/LBkPmAm4ulwoP6J4zzv78ESlAIuQEHoL2+45CTlwxiRM5hfVBQe9HIYEFaBWw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "mongodb-memory-server-core": "9.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-9.1.5.tgz", + "integrity": "sha512-mevjdWrxym+MzMoNsFfCtrXwK3ndb0xHKj+fHT1xoT4l+uflEqvLHt+aRdJrTW5GTGYeVlYHQpQ8hLKMeEL6cg==", + "dev": true, + "dependencies": { + "async-mutex": "^0.4.0", + "camelcase": "^6.3.0", + "debug": "^4.3.4", + "find-cache-dir": "^3.3.2", + "follow-redirects": "^1.15.3", + "https-proxy-agent": "^7.0.2", + "mongodb": "^5.9.1", + "new-find-package-json": "^2.0.0", + "semver": "^7.5.4", + "tar-stream": "^3.0.0", + "tslib": "^2.6.2", + "yauzl": "^2.10.0" + }, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/bson": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", + "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", + "dev": true, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mongodb-memory-server-core/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/mongodb": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.2.tgz", + "integrity": "sha512-H60HecKO4Bc+7dhOv4sJlgvenK4fQNqqUIlXxZYQNbfEWSALGAwGoyJd/0Qwk4TttFXUOHJ2ZJQe/52ScaUwtQ==", + "dev": true, + "dependencies": { + "bson": "^5.5.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "@mongodb-js/saslprep": "^1.1.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-memory-server-core/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==", + "dev": true + }, + "node_modules/mongoose": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.0.4.tgz", + "integrity": "sha512-wN9qvdevX3+922VnLT7CpaZRT3jmVCBOK2QMHMGeScQxDRnFMPpkuI9StEPpZo/3x8t+kbzH7F8RMPsyNwyM4w==", + "dependencies": { + "bson": "^6.2.0", + "kareem": "2.5.1", + "mongodb": "6.2.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/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/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/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/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/new-find-package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/new-find-package-json/-/new-find-package-json-2.0.0.tgz", + "integrity": "sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/new-find-package-json/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/new-find-package-json/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==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "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/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "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": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "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/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "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/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, + "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.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "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/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "devOptional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "devOptional": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamx": { + "version": "2.15.6", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", + "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "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-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/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==", + "dev": true + }, + "node_modules/supertest": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", + "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.1.2" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "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/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "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/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "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/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "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": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/questions/createqservice/package.json b/questions/createqservice/package.json new file mode 100644 index 00000000..e5972290 --- /dev/null +++ b/questions/createqservice/package.json @@ -0,0 +1,31 @@ +{ + "name": "userservice", + "version": "1.0.0", + "description": "User service, in charge of handling users in the application", + "main": "service.js", + "scripts": { + "start": "node question-service.js", + "test": "jest" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/arquisoft/wiq_es6a.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/arquisoft/wiq_es6a/issues" + }, + "homepage": "https://github.com/arquisoft/wiq_es6a#readme", + "dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "express": "^4.18.2", + "mongoose": "^8.0.4" + }, + "devDependencies": { + "jest": "^29.7.0", + "mongodb-memory-server": "^9.1.5", + "supertest": "^6.3.4" + } +} diff --git a/questions/createqservice/question-model.js b/questions/createqservice/question-model.js new file mode 100644 index 00000000..78b116ab --- /dev/null +++ b/questions/createqservice/question-model.js @@ -0,0 +1,16 @@ +const mongoose = require('mongoose'); + +const questionSchema = new mongoose.Schema({ + tipo: { + type: String, + required: true, + }, + atributo: { + type: String, + required: true, + }, +}); + +const Question = mongoose.model('Question', questionSchema); + +module.exports = Question \ No newline at end of file diff --git a/questions/createqservice/question-service.js b/questions/createqservice/question-service.js new file mode 100644 index 00000000..c4e0e876 --- /dev/null +++ b/questions/createqservice/question-service.js @@ -0,0 +1,58 @@ +// question-service.js +const express = require('express'); +const mongoose = require('mongoose'); +const bcrypt = require('bcrypt'); +const bodyParser = require('body-parser'); +const User = require('./question-model') + +const app = express(); +const port = 8001; + +// Middleware to parse JSON in request body +app.use(bodyParser.json()); + +// Connect to MongoDB +const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/userdb'; +mongoose.connect(mongoUri); + + + +// Function to validate required fields in the request body +function validateRequiredFields(req, requiredFields) { + for (const field of requiredFields) { + if (!(field in req.body)) { + throw new Error(`Missing required field: ${field}`); + } + } +} + +app.post('/adduser', async (req, res) => { + try { + // Check if required fields are present in the request body + validateRequiredFields(req, ['username', 'password']); + + // Encrypt the password before saving it + const hashedPassword = await bcrypt.hash(req.body.password, 10); + + const newUser = new User({ + username: req.body.username, + password: hashedPassword, + }); + + await newUser.save(); + res.json(newUser); + } catch (error) { + res.status(400).json({ error: error.message }); + }}); + +const server = app.listen(port, () => { + console.log(`User Service listening at http://localhost:${port}`); +}); + +// Listen for the 'close' event on the Express.js server +server.on('close', () => { + // Close the Mongoose connection + mongoose.connection.close(); + }); + +module.exports = server \ No newline at end of file From cf0f2a798fb864e03abf796cf690dbf94fcfe60d Mon Sep 17 00:00:00 2001 From: UO284238 Date: Tue, 27 Feb 2024 20:37:18 +0100 Subject: [PATCH 25/29] =?UTF-8?q?Correcci=C3=B3n=20de=20idioma=20e=20indic?= =?UTF-8?q?adores=20de=20los=20cap=C3=ADtulos=2010=20y=2011.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/10_quality_requirements.adoc | 25 ++++++++++++------------- docs/src/11_technical_risks.adoc | 6 +++--- 2 files changed, 15 insertions(+), 16 deletions(-) diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index 3a8338b0..713d1bcd 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -1,40 +1,39 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-quality-requirements]] -== Quality Requirements - +== Requisitos de Calidad A continuación se muestra el árbol de atributos de calidad, cuyas hojas son los escenarios de calidad descritos en la tabla. -=== Quality Tree +=== Árbol de Calidad -image::quality_tree.png["Quality Tree"] +image::quality_tree.png["Árbol de Calidad"] -=== Quality Scenarios +=== Escenarios de Calidad -.Quality Scenarios +.Escenarios de Calidad |=== |Atributo de Calidad|Descripción -| SC1 +| EC1 | Para mantener la usabilidad de la aplicación, se buscará mantener un diseño uniforme. -| SC2 +| EC2 | Para no complicar el aprendizaje de uso, la experiencia del usuario se basará en la predictabilidad. -| SC3 +| EC3 | Se realizarán pruebas exhaustivas para asegurar el correcto funcionamiento de todos los servicios presentes en la aplicación. -| SC4 +| EC4 | Para mantener la fiabilidad, se buscará un uso de recursos optimizado. -| SC5 +| EC5 | Se buscará un rendimiento eficiente y rápido para no afectar la experiencia de usuario. -| SC6 +| EC6 | En cuanto a la seguridad, se bloqueará el acceso a cuentas ajenas. -| SC7 +| EC7 | Se mantendrán los datos de usuario privados y seguros. |=== diff --git a/docs/src/11_technical_risks.adoc b/docs/src/11_technical_risks.adoc index 53057440..aa3a68ae 100644 --- a/docs/src/11_technical_risks.adoc +++ b/docs/src/11_technical_risks.adoc @@ -1,11 +1,11 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-technical-risks]] -== Risks and Technical Debts +== Riesgos y Deudas Técnicas A continuación, se presentan en formato tabla los riesgos y posibles deudas técnicas consideredas por el equipo de desarrollo. -.Development Team Risks +.Riesgos del ámbito de Desarrollo |=== |Riesgo|Descripción|Medida Preventiva @@ -23,7 +23,7 @@ A continuación, se presentan en formato tabla los riesgos y posibles deudas té |=== -.Software Risks +.Riesgos del ámbito de Software |=== |Riesgo|Descripción|Medida Preventiva From 03bec409c5961af2877200ba5f854521d06b95e2 Mon Sep 17 00:00:00 2001 From: uo289039 <124291361+uo289039@users.noreply.github.com> Date: Thu, 29 Feb 2024 11:06:27 +0100 Subject: [PATCH 26/29] Corregido el idioma 02_architecture_constraints.adoc --- docs/src/02_architecture_constraints.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/02_architecture_constraints.adoc b/docs/src/02_architecture_constraints.adoc index e354ada9..1e6feba9 100644 --- a/docs/src/02_architecture_constraints.adoc +++ b/docs/src/02_architecture_constraints.adoc @@ -1,5 +1,5 @@ [[section-architecture-constraints]] -== Architecture Constraints +== Restricciones de arquitectura |=== | *_Restricciones de arquitectura_* | *_Descripción_* From 5ead38429546d5c99c23b79492c7c7c4a5bbfd37 Mon Sep 17 00:00:00 2001 From: uo289039 <124291361+uo289039@users.noreply.github.com> Date: Thu, 29 Feb 2024 11:07:52 +0100 Subject: [PATCH 27/29] Arreglado idioma 04_solution_strategy.adoc --- docs/src/04_solution_strategy.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 9cc9bb4d..a48894a0 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -1,9 +1,9 @@ [[section-solution-strategy]] -== Solution Strategy +== Solución Estratégica |=== -| *_Restricciones de arquitectura_* | *_Descripción_* -| *_Solución Estratégica_* | Elaboramos una aplicacíon, basada en Saber y Ganar, en la que los concursantes pueden registrarse para participar, donde en cada ronda tendran que responder varias preguntas, de distintas categorias, donde se guardará un registro con las preguntas respondidas por el usuario y podrá revisar su histórico, también podrá ver que preguntas acerto y cuales falló. +| *_Solución Estratégica_* | *_Descripción_* +| *_Definición_* | Elaboramos una aplicacíon, basada en Saber y Ganar, en la que los concursantes pueden registrarse para participar, donde en cada ronda tendran que responder varias preguntas, de distintas categorias, donde se guardará un registro con las preguntas respondidas por el usuario y podrá revisar su histórico, también podrá ver que preguntas acerto y cuales falló. | *_Tecnologías usadas para llevar a cabo_* | From 3cd3d52fb332bd4acd57afadfdad21e552b4fe96 Mon Sep 17 00:00:00 2001 From: sara Date: Thu, 29 Feb 2024 18:41:05 +0100 Subject: [PATCH 28/29] planteamiento sistema de preguntas --- .idea/workspace.xml | 37 +++++++++++----- questions/SPARQLQueryDispatcher.js | 12 ++++++ questions/createqservice/question-service.js | 45 ++++++++++---------- 3 files changed, 61 insertions(+), 33 deletions(-) create mode 100644 questions/SPARQLQueryDispatcher.js diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 7c5aea98..57ce6308 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -4,21 +4,22 @@