From 2c191aed23f43e5d2a949a46dadfb9b1152db399 Mon Sep 17 00:00:00 2001 From: yagonavajas <uo287746@uniovi.es> Date: Mon, 12 Feb 2024 18:22:45 +0100 Subject: [PATCH 01/61] cambios en 01adoc --- .vscode/settings.json | 3 ++ docs/src/01_introduction_and_goals.adoc | 37 +++++++++++++------------ 2 files changed, 23 insertions(+), 17 deletions(-) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..ae1c8ac --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "asciidoc.antora.enableAntoraSupport": true +} \ No newline at end of file diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index aa23a98..c2d5364 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -3,13 +3,14 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-introduction-and-goals]] == Introduction and Goals (wiq_es04c) -Trabajo realizado por David Alvarez, Zohaib Akhtar Kausar, Sara Lamuño Garcia, Yago Navajas Gonzalez y Santiago Lopez Laso. +nombre_del_proyecto es un proyecto desarrollado en la asignatura Arquitectura del Software. Consiste en la creacion de una aplicacion web al estilo "Saber y Ganar". Es decir, es un juego de preguntas de cultura general. + +Los desarrolladores de la aplicacion son por David Alvarez, Zohaib Akhtar Kausar, Sara Lamuño Garcia, Yago Navajas Gonzalez y Santiago Lopez Laso. [role="arc42help"] **** -Describes the relevant requirements and the driving forces that software architects and development team must consider. -These include +La aplicacion tendra su base para las preguntas y las respuestas en Wikidata , la base de conocimiento editada en colaboracion. * underlying business goals, * essential features, @@ -23,9 +24,8 @@ These include [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). +* Los usuarios se deberan loggear en la pagina, esto servira para tener registro de unas serie de parametros, como puede ser las veces que se ha jugado. +* Se podran responder preguntas autogeneradas y ver si han acertado fallado asi como la respuesta correcta. .Motivation From the point of view of the end users a system is created or modified to @@ -38,22 +38,21 @@ 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 [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. +[options="header",cols="1,2,2"] +|=== +|Prioridad | Objetivo | Descripcion +|Usabilidad | | +|Privacidad | | +|Mantenibilidad | | +|=== + -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"] @@ -91,6 +90,10 @@ Table with role names, person names, and their expectations with respect to the [options="header",cols="1,2,2"] |=== |Role/Name|Contact|Expectations -| _<Role-1>_ | _<Contact-1>_ | _<Expectation-1>_ -| _<Role-2>_ | _<Contact-2>_ | _<Expectation-2>_ +| Equipo de Desarrollo | Yago Navajas Gonzalez -> UO287746@uniovi.es + +David Alvarez -> UOxxxxxx@uniovi.es + +Zohaib Akhtar Kausar -> UOxxxxxx@uniovi.es + +Sara Lamuño Garcia -> UOxxxxxx@uniovi.es + +Santiago Lopez Laso -> UOxxxxxx@uniovi.es | Los estudiantes que llevaran a cabo el desarrollo de la aplicacion +| Profesores | _<Contact-2>_ | Supervisores de los avances y encargados de evaluar la aplicacion final |=== From 269611de74ef1d4e39951738bbaa06727ceb717a Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Mon, 12 Feb 2024 18:34:57 +0100 Subject: [PATCH 02/61] Puesta de UO en doc01.adoc --- docs/src/01_introduction_and_goals.adoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index c2d5364..961d4cb 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -5,7 +5,7 @@ ifndef::imagesdir[:imagesdir: ../images] nombre_del_proyecto es un proyecto desarrollado en la asignatura Arquitectura del Software. Consiste en la creacion de una aplicacion web al estilo "Saber y Ganar". Es decir, es un juego de preguntas de cultura general. -Los desarrolladores de la aplicacion son por David Alvarez, Zohaib Akhtar Kausar, Sara Lamuño Garcia, Yago Navajas Gonzalez y Santiago Lopez Laso. +Los desarrolladores de la aplicacion son por David Álvarez Díaz, Zohaib Akhtar Kausar, Sara Lamuño García, Yago Navajas González y Santiago López Laso. [role="arc42help"] @@ -91,9 +91,9 @@ Table with role names, person names, and their expectations with respect to the |=== |Role/Name|Contact|Expectations | Equipo de Desarrollo | Yago Navajas Gonzalez -> UO287746@uniovi.es + -David Alvarez -> UOxxxxxx@uniovi.es + +David Álvarez Díaz -> UO283196@uniovi.es + Zohaib Akhtar Kausar -> UOxxxxxx@uniovi.es + -Sara Lamuño Garcia -> UOxxxxxx@uniovi.es + -Santiago Lopez Laso -> UOxxxxxx@uniovi.es | Los estudiantes que llevaran a cabo el desarrollo de la aplicacion +Sara Lamuño García -> UO283706@uniovi.es + +Santiago Lopez Laso -> UOxxxxxx@uniovi.es | Los estudiantes que llevarán a cabo el desarrollo de la aplicación | Profesores | _<Contact-2>_ | Supervisores de los avances y encargados de evaluar la aplicacion final |=== From 14a39bd18ddc1c875076c66a2cfbb037f4429993 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Mon, 12 Feb 2024 20:34:56 +0100 Subject: [PATCH 03/61] Cambio en los UO del grupo en doc01.adoc --- docs/src/01_introduction_and_goals.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index 961d4cb..6ee631e 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -92,8 +92,8 @@ Table with role names, person names, and their expectations with respect to the |Role/Name|Contact|Expectations | Equipo de Desarrollo | Yago Navajas Gonzalez -> UO287746@uniovi.es + David Álvarez Díaz -> UO283196@uniovi.es + -Zohaib Akhtar Kausar -> UOxxxxxx@uniovi.es + +Zohaib Akhtar Kausar -> UO291060@uniovi.es + Sara Lamuño García -> UO283706@uniovi.es + -Santiago Lopez Laso -> UOxxxxxx@uniovi.es | Los estudiantes que llevarán a cabo el desarrollo de la aplicación +Santiago Lopez Laso -> UO277369@uniovi.es | Los estudiantes que llevarán a cabo el desarrollo de la aplicación | Profesores | _<Contact-2>_ | Supervisores de los avances y encargados de evaluar la aplicacion final |=== From 1d405dbb559e984f5ec69b564ca56dbf79737d96 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Mon, 12 Feb 2024 22:50:37 +0100 Subject: [PATCH 04/61] =?UTF-8?q?A=C3=B1adidos=20diagramas=20para=20la=20d?= =?UTF-8?q?ocumentaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...e casos de uso para el juego de palabras.jpg | Bin 0 -> 19358 bytes .../Digrama de secuencia Juego de preguntas.jpg | Bin 0 -> 41232 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/Diagrama de casos de uso para el juego de palabras.jpg create mode 100644 docs/images/Digrama de secuencia Juego de preguntas.jpg diff --git a/docs/images/Diagrama de casos de uso para el juego de palabras.jpg b/docs/images/Diagrama de casos de uso para el juego de palabras.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d002bc24a16347c9ec25ff4361535c83c60c29be GIT binary patch literal 19358 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 literal 0 HcmV?d00001 diff --git a/docs/images/Digrama de secuencia Juego de preguntas.jpg b/docs/images/Digrama de secuencia Juego de preguntas.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c48c2654b7db2f10fa7ddf685ac88d9e3bdf1886 GIT binary patch literal 41232 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 literal 0 HcmV?d00001 From 7b455e0075b7c33ba0cd401e0ce9a03d06146c69 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Mon, 12 Feb 2024 22:53:29 +0100 Subject: [PATCH 05/61] =?UTF-8?q?A=C3=B1adido=20diagrama=20b=C3=A1sico=20d?= =?UTF-8?q?e=20secuencia?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/06_runtime_view.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index e10f375..eae7c7e 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -60,6 +60,6 @@ Alice <-- Bob: another authentication Response === <Runtime Scenario 2> -=== ... +image::Digrama de secuencia Juego de preguntas.jpg["Diagrama de secuencia"] === <Runtime Scenario n> From 7219dfa5a7e2cda1b9897e5e348ea608d3d949b8 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Mon, 12 Feb 2024 23:16:39 +0100 Subject: [PATCH 06/61] =?UTF-8?q?A=C3=B1adido=20diagrama=20de=20casos=20de?= =?UTF-8?q?=20uso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/06_runtime_view.adoc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index eae7c7e..c9f24b0 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -62,4 +62,6 @@ Alice <-- Bob: another authentication Response image::Digrama de secuencia Juego de preguntas.jpg["Diagrama de secuencia"] -=== <Runtime Scenario n> +=== <Runtime Scenario 3> + +image::Diagrama de casos de uso para el juego de palabras.jpg["Diagrama de caso de uso"] From 4d36ebef1da6ddb2b7423f2d7d3f369c05de7873 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Tue, 13 Feb 2024 20:43:02 +0100 Subject: [PATCH 07/61] Avance documentacion06.adoc --- docs/src/06_runtime_view.adoc | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index c9f24b0..637df5b 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -59,9 +59,26 @@ Alice <-- Bob: another authentication Response ---- === <Runtime Scenario 2> - +------------------------------------------------------------------------------------------------------------------------------------- +| -> Diagrama de secuencia | +| -> Descripción: diagrama de los usos básicos en la aplicación, como inicio de sesión, empezar a jugar y contestar las preguntas. | +| -> Aspectos notables: | +| - El usuario tiene que estar autentificado en la aplicación para poder entrar al juego. | +| - Los usuarios estarán en una base de datos para recoger los datos de manera más sencilla. | +| - En el diagrama se pone la opción de respuesta correcta, pero si fuera incorrecta también se seguiría jugando. | +------------------------------------------------------------------------------------------------------------------------------------- image::Digrama de secuencia Juego de preguntas.jpg["Diagrama de secuencia"] === <Runtime Scenario 3> +-------------------------------------------------------------------------------------------------------------------------------------- +| -> Diagrama de casos de uso | +| -> Descripción: diagrama básico de los distintos casos de uso que hay en el proyecto | +| -> Aspectos notables: | +| - El caso de uso de iniciar sesión del usuario está relacionado con el caso de uso de autentificar sesión del sistema, | +| - ya que para que el usuario pueda iniciar sesión debe de estar autentificado. | +| - Lo mismo ocurre con el caso de uso de contestar preguntas del usuario con el caso de uso de verificar respuestas del sistema, | +| - ya que para que el usuario pueda contestar preguntas, el sistema primero debe de verificar si dicha respuesta es correcta | +| - o no para pasar a la siguiente pregunta. | +-------------------------------------------------------------------------------------------------------------------------------------- image::Diagrama de casos de uso para el juego de palabras.jpg["Diagrama de caso de uso"] From c5433a0cc4cf851db2e81c4e0e4120eb0c05bbd0 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 14 Feb 2024 12:00:52 +0100 Subject: [PATCH 08/61] =?UTF-8?q?A=C3=B1adidos=20t=C3=A9rminos=20al=20glos?= =?UTF-8?q?ario=20del=20documento12.adoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/12_glossary.adoc | 35 ++++++++++++++++++++++++++++++----- 1 file changed, 30 insertions(+), 5 deletions(-) diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index 192b235..0959e74 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -34,9 +34,34 @@ See https://docs.arc42.org/section-12/[Glossary] in the arc42 documentation. |=== |Term |Definition -|<Term-1> -|<definition-1> +|React +|Biblioteca de Javascript que se encarga en la creación de interfaces de usuario de una manera fácil. Es eficiente y se puede incorporar +al código de una forma sencilla. + +|Node.js +|Entorno que usa Javascript, donde destaca en la creación de servidores web. Su programación es dirigida por eventos, es multi-plataforma, open-source +y soporta la concurrencia. + +|Microservicio +|Enfoque arquitectónico, donde el software se va a dividir en servicios de tamaño pequeño, que estarán unidos por la intervención de API's +(en nuestro caso Wikidata). Son rápidos, sencillos a la hora de su desarrollo y autonómos cuando estos están en ejecución. + +|API +|O también Application Programming Interface, es un intermediario que ayuda a las diferentes aplicaciones del proyecto a posibilitar la comunicación +entre ellas. Favorece a la eficiencia y agilidad del funcionamiento de dichas aplicaciones. + +|MongoDB +|Es uno de los tantos tipos de bases de datos, como MariaDB. Usa NoSQL, soporta múltiples lenguajes de programación y también soporta su funcionamiento en +gran variedad de sistemas operativos. Algo a tener en cuenta es que MongoDB realiza el guardado de datos de una forma distinta a la de las bases de datos de +tipo relacional, con tablas de datos, este lo guarda en archivos BSON, que es un derivado de JSON. + +|BSON +|O Binary JSON, son los archivos que usa la base de datos MongoDB para almacenar los datos de una manera más ágil y sencilla que con las tablas. Una +curiosidad de este tipo de archivo es que no tiene un tipo de MIME definido, mientras que JSON sí que lo tiene. + +|Mongoose +|Biblioteca que es encargada de crear una conexión con la base de datos MongoDB con el entorno de Node.js. Hace que el acceso y creación de los datos de MongoDB sea más fácil de realizar que con MongoDB en sí. + +|Docker +|Aplicación que realiza el despliegue de cualquier aplicación en formato de contenedores, similares a los contenedores que tienen los barcos. Es open-source y permite que el proceso de desplegar una aplicación sea bastante más fácil y ordenado. -|<Term-2> -|<definition-2> -|=== From 0813774fe5c04e906d4033387949bdfea9316713 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 14 Feb 2024 12:25:59 +0100 Subject: [PATCH 09/61] =?UTF-8?q?A=C3=B1adido=20diagrama=20de=20secuencia?= =?UTF-8?q?=20con=20plantuml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/06_runtime_view.adoc | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index 637df5b..fb80e36 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -58,6 +58,31 @@ Alice -> Bob: Another authentication Request Alice <-- Bob: another authentication Response ---- +[plantuml,"Sequence diagram",png] +Diagrama de secuencia con plantuml (se contempla sólo el uso correcto de la aplicación) +---- +actor usuario +actor system +database bbdd as "bbdd" +actor juego +usuario -> system: inicio sesión +system --> usuario: pedir nombre/contraseña +usuario -> system: dar nombre/contraseña +system -> bbdd: verificar usuario +bbdd --> system: verificación correcta +system --> usuario: inicio sesión correcto +usuario -> system: acceder al juego +system -> juego: iniciar juego +juego --> system: generar pregunta/respuestas +system --> usuario: mostrar pregunta/respuestas +usuario -> system: responder +system -> juego: verificar respuesta +juego --> system: respuesta correcta +system --> usuario: correcta +system -> juego: generar siguiente pregunta/respuestas + +---- + === <Runtime Scenario 2> ------------------------------------------------------------------------------------------------------------------------------------- | -> Diagrama de secuencia | From 076a4d96cad5edc9c5fab95fc8fb9a53ac217136 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 14 Feb 2024 12:48:17 +0100 Subject: [PATCH 10/61] =?UTF-8?q?Puesta=20de=20decisi=C3=B3n=20de=20la=20o?= =?UTF-8?q?rganizaci=C3=B3n=20en=20el=20documento04.adoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/04_solution_strategy.adoc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 7bf03f7..75bca28 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -25,6 +25,24 @@ based upon problem statement, quality goals and key constraints. Refer to details in the following sections. +Decisiones organizativas + +En la primera semana nos hemos dividido en dos equipos con el objetivo de tocar todas las partes del proyecto. La estructura de los equipos es la siguiente: + +---- +-> Equipo documentación + Sara Lamuño García -> UO283706@uniovi.es + Yago Navajas Gonzalez -> UO287746@uniovi.es +-> Equipo desarrollo del proyecto + David Álvarez Díaz -> UO283196@uniovi.es + Zohaib Akhtar Kausar -> UO291060@uniovi.es + Santiago Lopez Laso -> UO277369@uniovi.es +---- + +La realización de las actas de las reuniones diarias se le ha asignado la tarea a Sara Lamuño García. + +En las siguientes semanas habrá rotación o cambio de miembros en ambos equipos. + .Further Information See https://docs.arc42.org/section-4/[Solution Strategy] in the arc42 documentation. From 408324fd6eb6f0541732237d29da6b9d955ed728 Mon Sep 17 00:00:00 2001 From: Santiago <uo277369@uniovi.es> Date: Thu, 15 Feb 2024 00:06:42 +0100 Subject: [PATCH 11/61] =?UTF-8?q?Hechos=20los=20apartados=202=20y=203=20de?= =?UTF-8?q?=20la=20documentaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/images/diagrama_contexto_tecnico.png | Bin 0 -> 13753 bytes docs/src/02_architecture_constraints.adoc | 33 +++------ docs/src/03_system_scope_and_context.adoc | 82 ++++------------------ 3 files changed, 21 insertions(+), 94 deletions(-) create mode 100644 docs/images/diagrama_contexto_tecnico.png diff --git a/docs/images/diagrama_contexto_tecnico.png b/docs/images/diagrama_contexto_tecnico.png new file mode 100644 index 0000000000000000000000000000000000000000..797aa6afc079a25752ddae28597eb3837dd326ee GIT binary patch literal 13753 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 Ts(s<_P&f)Qs#go8Zg~GMLKoj| literal 0 HcmV?d00001 diff --git a/docs/src/02_architecture_constraints.adoc b/docs/src/02_architecture_constraints.adoc index 226e501..4c16bef 100644 --- a/docs/src/02_architecture_constraints.adoc +++ b/docs/src/02_architecture_constraints.adoc @@ -1,27 +1,12 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-architecture-constraints]] -== Architecture Constraints - - -[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. - -.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. - -.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) - - -.Further Information - -See https://docs.arc42.org/section-2/[Architecture Constraints] in the arc42 documentation. - -**** +== Restricciones de arquitectura +.Restricciones +[options="header",cols="1,2"] +|=== +|Restricción|Descripción +|Wikidata|Se usará la API de WIkidata para generar las preguntas automáticamente. +|Git|Control de versiones del proyecto. +|GitHub|Portal donde se guardará el código fuente del proyecto. +|=== \ No newline at end of file diff --git a/docs/src/03_system_scope_and_context.adoc b/docs/src/03_system_scope_and_context.adoc index c528e90..7173c5c 100644 --- a/docs/src/03_system_scope_and_context.adoc +++ b/docs/src/03_system_scope_and_context.adoc @@ -3,73 +3,15 @@ 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. - -.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. - -**** - -**<Diagram or Table>** - -**<optionally: Explanation of external domain interfaces>** - -=== 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. - -**** - -**<Diagram or Table>** - -**<optionally: Explanation of technical interfaces>** - -**<Mapping Input/Output to Channels>** +=== Contexto de negocio +En esta tabla se muestra el contexto de negocio de la aplicación. Las entradas son los mensajes que van desde el agente externo hacia la aplicación, y las salidas son los mensajes que van desde la aplicación hacia al agente externo. +[options="header",cols="1,2,3"] +|=== +|Agente externo|Entradas|Salidas +|Usuario|Datos registro, datos login, respuesta a cada pregunta|Preguntas, histórico +|Wikidata|Ítems(elementos) de Wikidata|Petición a la API de Wikidata +|=== + +=== Contexto técnico + +image::diagrama_contexto_tecnico.png["Diagrama de contexto técnico"] \ No newline at end of file From 0a66741c1f8210633b67d8748eb381e7c9a82a81 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Thu, 15 Feb 2024 12:27:11 +0100 Subject: [PATCH 12/61] =?UTF-8?q?Decisiones=20organizativas=202=C2=AAseman?= =?UTF-8?q?a=20en=2004?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/04_solution_strategy.adoc | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 75bca28..54b671b 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -43,6 +43,26 @@ La realización de las actas de las reuniones diarias se le ha asignado la tarea En las siguientes semanas habrá rotación o cambio de miembros en ambos equipos. +En la segunda semana hemos decidido ponernos de manera más profunda con la documentación, asignando diferentes apartados de esta a cada miembro del equipo: + +[options="header",cols="1,2"] +|=== +| Miembro +| Documentación +| Sara Lamuño García +| 4, 6, 12 +| Yago Navajas Gonzalez +| 1 +| David Álvarez Díaz +| +| Zohaib Akhtar Kausar +| 10, 11 +| Santiago Lopez Laso +| 2, 3 +|=== + +Se han creado el mismo número de Issues como apartados de la documentación hay para asignarla a cada miembro. + .Further Information See https://docs.arc42.org/section-4/[Solution Strategy] in the arc42 documentation. From 48a8090f7ce41aeacd859932b7e40dd5efa6bb48 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Thu, 15 Feb 2024 12:37:12 +0100 Subject: [PATCH 13/61] =?UTF-8?q?A=C3=B1adidos=20m=C3=A1s=20t=C3=A9rminos?= =?UTF-8?q?=20en=20la=20documentacion12?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/12_glossary.adoc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index 0959e74..d534de7 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -65,3 +65,7 @@ curiosidad de este tipo de archivo es que no tiene un tipo de MIME definido, mie |Docker |Aplicación que realiza el despliegue de cualquier aplicación en formato de contenedores, similares a los contenedores que tienen los barcos. Es open-source y permite que el proceso de desplegar una aplicación sea bastante más fácil y ordenado. +|GitHub Actions +|Plataforma que ayuda a automatizar los proyectos, haciendo posible el despliegue de estos desde el mismo Github. Soporta una gran variedad de lenguajes de +programación y sistemas operativos. + From 5c0eed4a27651d02bc17a03219768445369bee90 Mon Sep 17 00:00:00 2001 From: Santiago <uo277369@uniovi.es> Date: Fri, 16 Feb 2024 20:30:27 +0100 Subject: [PATCH 14/61] cambiado diagrama contexto tecnico a .drawio.png --- .../images/diagrama_contexto_tecnico.drawio.png | Bin 0 -> 18628 bytes docs/images/diagrama_contexto_tecnico.png | Bin 13753 -> 0 bytes docs/src/03_system_scope_and_context.adoc | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/images/diagrama_contexto_tecnico.drawio.png delete mode 100644 docs/images/diagrama_contexto_tecnico.png diff --git a/docs/images/diagrama_contexto_tecnico.drawio.png b/docs/images/diagrama_contexto_tecnico.drawio.png new file mode 100644 index 0000000000000000000000000000000000000000..e5f0cf85dbb3039e2391e3f0d698cc6bc608985d GIT binary patch literal 18628 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 D0+Kam literal 0 HcmV?d00001 diff --git a/docs/images/diagrama_contexto_tecnico.png b/docs/images/diagrama_contexto_tecnico.png deleted file mode 100644 index 797aa6afc079a25752ddae28597eb3837dd326ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13753 zcmeHuXH-<%vMz!Gf(@u3K}jNlpddL(mYhLAvZ6#45NN<A36cZ_$&z!93P_SHCNeZR zsem-mK!apn5!`#9@ZPxR-Z##;?~VI!jn#A2tXXr`S5;rleypx4hajRM!ok5oD9B&c z#KAdajDv%#N{9<@?3`DXaB%n@DqNMk=3=}s`rsM4%nHGG>Kl_(hs-Jn)P=MUPo9YC z!Qqu4C&!iH$C1%H6=|fQipQ_+6naM#Pw$bdq(mp;D4)8J;Y|uj@=8jo_L~wmWCUlP zr+C_mct)8ak!or+9;14L;~n&}&N^l~s<o}U+Coh>ia0n7R|88xhnzz=hKzhT4~f(9 zaqPU%I5-^7XmIL}XyV~iNLb_GP|724KH=^TV)zdalGc=#lxzrNR-$wH<VC}0ot~cF z={ds_sb0Bs?MA&I3+YMCCNDgKSOMFyLZfQuu?H+7B5{hCI&6$$c6_if`$HD0>GUrf zXbGN|sO4GPn&qe^39`r@jaGfJCk`)vI9n%A516;b`o<Lz(PlV&f79Z1UsY;b6@iUX zQY&fiCUYc7n7QbieKS7%S)G=22%TtZOwixF!>bwpIyot*B;6_Gm{~%e>bL(rvr<%R zON&F4U$O&6+2X=g#6-N$W&(|!KoIE@hZ8@Yt?NbX+-~ei#dB((z}x@%`^L&DEQ--H z%MWK;k<<8c`-iu`au^@hErd`$anR&q<U9PG6L;dsMEsRw3J51&vjiCioQb>qcxgcw zPSaCalu%O{DG!2(xVCzX>BqMOZwK$<%Tj9bi(PIv=eb<<{N)d?`}}diT`CH^7XHVk zHeXD%4>EQ>_WIlq4~mrx9(%%(c^C9*Gr!@;Wd>^f%d)+?nj@b68%4#O8kP1Z>59nM z5hj&Tz8U}2Lf@K7%+005ybV*=jz^|NWide=NfS&jo){YX0y(F%>$%=SS5b$by%q z+4P-ZgW%c2`>Oa~)A5n)S^``f76F%@ID}nh;S*fEQIT>K#vO%2h*@ASJ-jL<$5(o| z^@hB)U5#_)DO~@#XH}=X$77z+G>%p@Mm`ew{FcX1Xf^g|4r8Mcdm|%jF5x5U&t$6+ z-?XGB4Rj{c$ZFm*QLnMChQf=KUwKk$4=u@spZF%?Y=8NNCTnYBi*;alY5DeYtV6vV zoR-wrS~3r4d`?c`$UdN1^$yXJ#+K(`I(*c-LX5E%-rH{RG=YvGY~3Gj=%%NzcYjFc zsmt_B9ZL>GiLuJimZv6?4*k4i{oT&_r}~jA$7222k{L}h@ome`+m?mJlpkNxA$FW- zL4R7Sovbvq|9QnQk=<KtGnz(FfLV3)b`v$bs!^xUjwaqx@SFU^E6?$o^GS|Qm!RwG zXnz>U<8NwwDaUy{Re~l9chyj);WAM6V?F;=B6alw-<w%k@;oPHio73>wMCwhc_<>d zUK2MLUs!r$XJ<M<{wBs&Q~Iv0<coW4=U&jp47|esF&T#@TiQ@-J<TiK>d*WYA?3Ep z#AjIRCd9+T^Gbl;`sq-5R02U5)m!R|+wusnPx;7GFBD2=oKM_3+jU-kNyQrHp^Mai z7-GD0KF{{%^%ojBL~VPMOifRVC^e<^#mm%bV~!?Ll;y>yB{d(X?4noa;9yW><7-V4 z7iVTRn?>ie<JCRqzo(z4QxKnVGhW0wSbw<2wS1|blSuStZ?5*8{z7DwY?i!HuSq1E z_L$p}it7h}u0Tpo8_vg(QWLmCVTuS^VMokR*`0-<vL;bMa;uuDsj0SDzPZh{C6LaF z^}$Ebw8jZ^=+PvcMQVHgP)7K^JyOaXMzgXotebzGYuy%wT4zaeGZim=u=I7X#KLx{ z^n<>wZlPg{f$-L^v=Fga9t%|`Cw>Z>!I!>bo=a^4xu--Ux`iq$D`#)7SJ_V~qAm}X z-HDz!yuP{AA+Dw6=s5BADH~Up%$>e`A^S;r;iU8I2@2uM3C?3Fd7WJa2IcJuBGDY> z?i)_Mu_uPKnc3OzbfwC$>*Nc%uH>^Fy{BanswIuVXdK;g?5j(>;<kGE>0@mHN9=r> z<Sol)=1=^N$(KUWm!0MZU=2O~+glsI<_CM&==rR#RoYL{J(vs~wy7>q2tRLKlOT)? zOcZj(V!A3FrcYhckKi=f_N6qo94P)=^J`3L%{NoGe#J0Xb+J1`Y53K>nG-oVIp1nG z3b%ZMC^<Dpofd`=X9SC7pVEw0J7=Zcdix~hoQ$s9#8UzAe^m=jq&}nj#tJR3r8?{u z!7-}N0t11n_~qN5hqSq^y3bkXI)59Z6>&;GRlE7KMdG_>Sp8V0u$IAb%|~+>jhC58 zi=P@E&E9rRb)*&Du*A;xwxCk%XoWj<=C!0fJUq<J&yU*9EXDHOv23RmviA}DHc}aG zPC6Qd+u&J0o~^;;YW@83O<Z>lR@USyFsn|rshZf@xr`?g^47`dw8G^#C)GyWe~qr3 z6x;kR9qTlUfylO4{Y?z{=%q0$`VB3Y>0$S=YG=*_<#KN1c1eer(l<%3??xG?nV6Z@ zQ_yQ^av_BV<s8V~vCQpin?0?4l@J@hzB%veo9&`u*oa72C!z^-w_aVH2<hqWwnTPC zq^3)hSZuETxTfknzrH+Ykfo9!+?z;~@9fWiZ)kIh(^Dg9Moikd7_?knpDXG;%46P| zjJzZ6rQ;gIZ6=JI#r7H4!l{-|I7O&{nCmMjA=v`ySfAH+pQUnTLN0-d31aTTWw#>p z_@s4@!Fh2^B2_^!D@G6=b}++WKu1LkW>BsvP^luNL{UQEg&G2TOkpX1l9N^CTAt3r z$4GY0+SRk7B-gXLhVw=FuEz~v8P<QcaOQPjy=w8LG#?><w#M+x92)SDVpv^KBCYDp z)6EJapm%#l7ly}}b921b-Rl!xJM3OgIJU2|$V43V%WCYkP^AAHo9IyXHfuD8QEFyi zk%_IXmM3x+eSh<-WqZ63mM%-oKRA(z@A_lzk-sX)rHUwZEUI1<M%fiBVk#pN&qZ^Z zs1iR})Wv>G{>Y*l&l*aD5o$(d4iw*PLI{i`8{f03S?=pZ7h86vzBFs;e)K}vbEM+F zwY~q`toIRO%eL!NrGeQOau<uxb{(R>j!|8%H~yI=zLld_VvcP<VuNW#WW`4lMP0A0 zWox9NEqzXl_M^#cFlgOQ^(R_Q>_x9Nb2ORXZ8%N0C(KwaVP|@Hdoc~%Wbxj7*63&Q zh?b~JE$`o}J8-bDWJ&oF(Yt*=<Zd%k!8KZ8@8Ga-GI~soO(#FwqfC~W*ZEt;1j+iD z!aR%i_!NBYU)dK>6uMK}iin7_GcSUTsVy&C1$=E!P~tpZRJ+bbYfmeR`ogYTI1+I| z3%5bzr7Y73rZUsdPMTmS@V<4jz|PGkKOrJYPUHNq?{+-{SG&+K#{8(Lw_>^<;3dFe z>9rh9fpIqnz_lJV@q)!`5tJC8jc;}1V)r=>D<n8cB93GqpIw{$5Uv!>QD7`#SglyQ z`XvZ3v?nZi3jN}iTv^j>5n4hT+h4aG=}{QLpuaNlE<`tt+y-kIZ*@Cc5%5(mgs$K~ zHHqgbc=wtG`N#w5SYN(;nQ!7qoN~0v`I~WU^@`MbY;?2*r$#WHDC*~=f`!$a!fx7S ze|itQsCA+(M}HDpVVCa=qU3@kmBDlgvT4WHH=^y*D1#44N1ywW0Ld=pKW4mVXEgD) zcPI~~h8pI0{gf)R?uDZ@aRo;vIxNgEoMrHwkt4Y1&d{AAA*B?|Gn&>Y$1bCCo6&{x z@x_b2snXV$4Y*~aH6NL5A1Z6#{rO2(1|<=yz%EMaI3wTlOVnwuUt42N+rB;?7pg3e zFjwlvnDT^?<}}<@pfS2D`*U~9gS4PF`Sa=cCCs*tFQ`BGpl`gIe9FPk1gT4F6uPU~ z{2YPiqrouYs(~ky5-{OQIm)=u#N96kcfah|9X1cc(k);DX%I03=rTwK;!z-r|LQN# zV(OVgyRSxf8qCuP_D1ax#D&r^@I6O#ZFvqnxyT07Ggj@8#)ZoG?tP;RFHh{ftZOvC z9lAe~f}bhqFz6nzXnTW)8?`6M6E7~b3+!+@b<U^lJu9e%=t9CL5ulbIM))QVx8mM7 zBlv>m@190)^1M{vd-u<tnn23!y<h))VrnqIeR%KPKYJqfYI|?DH}5IjxX{mgN?$s| z&t$Zx)jxZBO2p43z4z;1o=)*I(e6o+C5{Uv*_$oRw@sd4&m1xj+vG+5{^?PhJn^1^ zQ^CMTb}eMnb%Uqdd)JiZ?~AE(_Eq7&E6cVguBP7nHcn21V?ZJ0z>{O}BT3gXXnZIg zzlX7k?k3NPT@i(H15d8*8P+JwR`%?!VV5~R2rz~28Wt5j85g=IOE2uf{&)^0?t@`d zibHMkdpa5_R8v3R)gqeR>fp<_681Lx(w=$|#)VpRB#uHne|(Z9o}iKbV@F4w(?V>G zPpxK3%~gV6G+D~<kt0WRM>~%mC($rk7HaIEvpMEPn#0I1CBPIyFFsawr{7evG*JK5 z-L<V><CLg?5yu{to=laJTF9=V$T^Kij8pOCtOGh1#%f%%D)h>%wSA<isj2(=(P(rP za!xgdyZNJ7=sU92XEdfvjyx|7%55P38ir8X_H}-K-na&3W^Qf_>E_QAi8p+ikrCNi z(yFTMi^-6bL|)L6bw3Z;6DYSEzrEM1?hU^JzzWxo6LBuIzVed_mmcz29~)U?&#h(1 zLtfP;3L|qt=(zhYqe*G6fIG_UU0L`ouOBRR_w+0<M|Da^(3rQ!TXCkm^8rlH?Kn{F z?F;I`SNDd$w#5~h)Fm2c-Ls&uXC)h@>5<&jl8)oQhfi`QTTG5l`jfPE0QEcb$%aP+ zB2M%2b6IX{KOx~s;=1)VLn)d_l$@~e1w<L07b!h%p)^DbPMGy_AG%cZWw+Ju9glP% zi@g1wtm+HEF}myhEkZYW#0&B&>X^t#netjO_w~-#ww=j`M1P$^1@sMstBF;1o3}pa zs+C9hI*B-L8Ay?8SSN=)Np5Xz1vtEDRE379ySZnCi+XXPENY2{HK?*JbyZbWz`FCQ z@l>Cmt<$uHSCU9U)iX+Bv;zi6;Utfe+TV~5Lr>BzKEX~w9XA-_G}A33%IGhWE+$v< z*6~?AS{<_|`bkdPdv9;=^D42tHY3k%Y#^efD=7O~Sy`RtzZ+mDUq;pjcEW`j_7=ot zeowZWX;GR~^y(7ds({D^PzBCUj4(@MiiG1GWrCy12(QMsdncl!mO3UbE-o?>Ir%<x zJW=yKqlsO*pU?LVs@aP_y7<&ECbBdN{%9O~ve5zJtrmHvJ!hr}J+`BKde4ah2zQi+ zsrEc2!)Mzp{pOx$D{^@pI2rlGfnN}DyB@q^C^>lbk=y0q)x}5u@JdkY;8h?Ga(|S~ z6{^a8Zxf(<GP3Wxr%7dhd)vt+{(awl`}o0u?@qicK5*0@w+775?Lo*Y*WCkghB2iF z;tG|A4#e5My?fxi0=IsPi{m;Fce4J;fw-eL-X4g1bNR-BI8&<P194o(4v;18vd8$o z;J-Y{*Nz>$`)5x#wnq<s{qxC1?DxBW@|1T({J;Xe-t-41n{9MHP#O8T`atEX@1y%F z8$DgUb6|Ga&9Z%!bveZjERaV@e{bIcy+I)d7O;NDc_6NABKkm_@J|SwdvTC<&GbNA zu-l6Raa!vKP}v)?eemgW#@fLL?pC!2!%Sj-4~uR8JwxWw!LU)Q18miG9@<-BTXdJo zp@$69Ljkl6nNtD50e&1NweuHo$&3lTRa%bI9>=L8Gx|?F?f@!tva%LOgYPawYSpK^ zuFQ;0VZih+d3&sW_J^t{Ufgp`gO0>#(VB2$sy$J(+F`o=B#Y_*+g4zE`l<Mg22Y`v zfb=6HhSP@#8LP++$3-y-pWW_-szi?79lc&<+Dt@~ot23C$QC2yV4k5EX{oX@Kj`qO z-b-hV(!{On^#cdtN=OEq11Zv+09tO-B3PjQXMWS@OFYy0W8z)4(}MoR03w6^I3SWs zO2eCd>s|0l7~(Yl=Av_5+LBV#MFonD<vHiY5uuHvpPrqq{H?|^lrH`GdOhn<es}sI zPWKfW4YSP*mva^ftlv;WK<!((ST$$t^7+WJ+LfJ+@tyA6%wzUgj7DB6yCMQ+8Qn6V z<S<N@9<4$`-Z~1A<^saZ!s6F#Z;<M%9pqccSk)v;v;1~8r^Nx4nB;=5AZN+lM{C_( z(`27!AD=r+$oz*<WYoU#a{H6g>zG`)aM7gp_0`8Gux^ElmhSDqHGCgNtJisKy`ytg zcGtnwJdB$9=DFkQdXv?9p;y-g8HI23JI-`l7wHy_Igh(%)dC55t;jebEJBoz_udeC zo8ctkwjc$&&PWw9uZC>?Dy8?09{a0uZ~84i<nSrXBs<P@JEqwTzbaU_7}e9$<F$Dg zOiMhV*;GF6q2!y=5@IZxz1|_dGtXKc^o$0RiuHTxv9;bwi$DceOeeZ#s>H28{bi8z zx!wy8{nQf-RwqP3#PoZCwS9G-o@JF1oRnB&33_AH4D<5M#gR(v#bnhI%_b<`wY0Q2 zjjC>!C3jAUB7OoTKs)6WL1R-n74?e0Pg5L{Z1>DlAEP<PYg~U(^O#?cPQEMU&uTWH z)dYugW)kxIydpB@E?<U$(lcGhf0P{|J_T_>kj!mZmz4OlfKB>_r?D|z4d0cW&81mh zcD~mei`Bf(#ka6MMJk8g*QTPc)k4NES4o@U2NAEe^ufkL`2tI)0}(~H(9FyXf`&J_ zKM>+PR4aN5_lLBa;DAa-vpYKDo%z$07{1!;FHCpKJ*~{v#nEcKhH)*OZ1tOPL?C6^ zo-gS@Tj^L2yfh<5oUhRt7+Ot&at@dwwx8m2M8Bl&|D5~)h3c?Uwl2^Saf0{HPI*UN zG6*I~?clr9mrlBS+)ien4%YX&k(uU<kYl|5$JF0!suy0}pLh%3wXi(^|4edS6e?Rz zR-7Mx<|vksEatgBljXTFJPy=Nf2mbZt@}o9qg`W$A8cv7vF4e&?fLGEmhYdNW){rf zbLy8_%dB~eWsj?mA^VMH%UMpL-Xu#D8CG^16FQ|5OBP!Rr80eSZt_Dw5lMB$rC6KW zqWuiYuHx62YrzRu>+5wM?m%?yo_u-{r@I>~3y!*3EWwJAY(Rs&5gw<=@H@^Vdv~p1 ze*P{>)v7!FXia~oR(*32<psIUJQaQYA#lj~-UUu_uTLT}k54eO`f3Oi8dgfJWvC_y zCx|$|+CfkV25=nShrIEeI!DyEnqT=R^b4<XyRSRuz4^hSX5zVp+@*xhpr})p*Xr>| zuNCMo$5<q4c$$(0&m~>y(vo0U#sASMO{yWR?u#WXxjV=$hm^BsNOJr6f!29Ma=J&F z06FoPB~jgz`OxQd`Ge`?yM;Zs-E?%K*0mcygtN@7)pZj1zlX9pry-T!{%b3BZe(=y z^c5V&-<xyzVyRfkXs5K-(lz<Rzfb6)7AWEMD`&bhg8t_9cj7-r{LkZ_FCY3B?C|5_ zk+A0u{BL|Q$Rm5vCUItvJ>bz*Ut?_5emLyF&QrXROqJq98SNh)3)BkH7Y2<K%9_G` zK;#j1J#zn9c4v^W?*2KCNv!b}l)r|NDPrFT7v&CP$usBJu&MnNclCoY0WPOhiafx- zL|s?Th`9|sV335?Q&dvYw~Lpmu9r<{b@>>3|Dlk~VlN=WZsdCH@&ka65_nUc0{x}w z4(CL2XDDLs^yWsElwwSKRY&r{5uq+=*DN~gZyfxm2#mIlj?UmqGvGyEc<y+t$Hv8N zygh9j!K(4aWM@5k3B4NF8y2iBa=#~8@)5AYLP|A(WGIb4^-a-@ARj8Vl2#jCX@mfr ztCl3zr~8ox0=Ur&(`G2mu6>AP*TsBwTAuBNhi;~~u%ff^@zK$8EJ@;?+du`w^g(P8 zOxP3nff!mCE;m4afI<ZVevMVn`His5%`(fbv(`)VgC)6d%2Y)9op5bNOS0)_Va*Yz zC@)^On;+oPUIf}=!40t1aTGb%2dv<F9<WGj(@8mtQ!UZG8Yq)Ajw6kv49IF|%0UP% zRWu|BjNQVdg=Bwu`}8#J3x|NeSy-VifTX;Vl0mIoWm^2HN6Tx#ns8`kDt{ZRsdk*v ztU)1T*RQ$EqAys7D-J<z1waUu21HDOkq_@e=(ECSTG_O7u?xe|ia@+ygDT+=9=_vT z-&5n8`EirLwE_3|>pfG*h|};rC_OZkP~GVY5FpUz5HE9lIqNpN_ZNG!%0fdNZR9-K zTjT01?9WjJ?Z$`0WsPM#D6A!NblA2I?3C%a)6w3ZSw%ofca7!x1GW*IU}_$}LM8W1 zi*kwQUR5qXOaWwv%kBu+eX56Ur@F27L}8<^aqJ&w!FP_L%}Th`qJwTZl3VH(BJzwV zDx$AGE6F2Q^||1EQ)qkP*0s*Rxb-ggCrhHs7od+xoL}neGs!+l?r=;>-?&u3g(6eW z65W_D0nRp=RK$5PeNe4ja$UK65P0)0wp0V=OK}i?vcs(wdVwDo7a#A+6wa-9b&_zW z<T{#^&u!Ii8QJJ_6nN63K3H)>5kOsb<JT36Cwaqw)#l*k6U0|{e`U<th(H5#CO?(? z9g>7!qs~domnql`F&U44dzxN_an}Sp?GW@()~g`BAU~~-k0n$QcrjJyvQXBa9Zwh8 z+qw;jn|3qg0G&j~c2|OZvNh+6=SA<i8A?|GyFZYll?9yw^`oOKbNxlO373(x*Yst2 zvedFNOeu0BUqP7f=cnj*!bn#v>RIH{2h!-8SoL=4>L&%?@x9~E;W(Y(tY6R-E|Zee z!1Zvp<W>=*V{*2CL>y+$z_td7>13Q!*1d33ic{qeOle#WT;z95GuUn+J~H~W;|R1S zTrV`BzyGS+sew{l)HA5>N$jAGDx|sRMZfro=v^v+wu7E7^%WO8h?6r`btZKlj;c#v z+j2IWDNWKv3WWVTgLn(hRv~+s%C%i)x|yv5HJ_*LdeLvSXQ4qf%l;J4eH0vVLjUs+ zwYbOYsyudJc8OIGI*InQ63c^%h|l<JWFrrgoe`+$6j?gA?~<ry^{JG<IYKfRikh5P zRy}Wj#O;8y=b|O_Cj3s@6ekW?l>q_;CPo=qI8}txD(!Z8%vz$f>&O_PL!`x%*mt=` zmy(=3+a9H!rCoZX0aqVKhw;*5^5KLLKE8@q()5kUj@)by)+(R%^)`X=&Y%x5JQipA ziTc~cch)+rdvo=e6sQAFt-<Nkyjye^(qcAVz7f=10UMvs>1=TK>mjG1non+TO%ye7 zM^G?gQ?LF8;fqp5mS45A)l(o9$BL<u9(Ro1J*Ah*N5W!a6!PYvM!@PT*{(uYFRl6e zz^xF-tU^8>tR#po5nwmlru~{c`%bXPVsZyoS+yj7i~+Y{&?HS3p)XU)o#P75Y|pS7 zq>U=lQDT>}w!6ndHsXL>NYvKYQirN273s0|bINA4s_UsRnLXf``mby^U<}Y+kn91C zsBT>W%{Ay~Wh%#<Alxq2u`nc1-(%TD*){Hb#t%%C%f27UZEtUH=_a=N2~S(#nonoY ziQjRk<b91W@H0)M;>x6j7bIb4GS}`c+;v~>)#Yuref>i=)|;2ld4AwHp?Har8i|oU zwq7kSI=7Q}<$xKddwfB(3pbfW9f|VM$-@M3)@B=3^ItlFYRDv)%@ZwEAplI?hbg9z zD^l)h!^@-2<6AJ{;gLd$!UUB#{;sDrP=8_Z#2`-wv^#p3z~4hc7%(L^LY+tj0mOVK z5ODN1$*jyk+(#7JLw7MNE33zM{%AX+J!UH456|YU0UW8h+|%f=B`S33M3rPE9T7#_ z2cY3aAN))&;az2an4f>K%0l>Kj%1m78hK%Y#Ok76OQf*usKXh=l%+p+z*Z5}jPI8* z*KgWMGlO2j6RRqUha<@I1rqG=WQ0rs;2krU>TP9CqK^I%=rS#e949KmDSK0-{kyxn zPeE)5ilH;e)hSpH@!V{BpgF?)moUCNTH1CQTWW$S!eesT+4^NrY8e_DdLQCb-OrEg zDWvCrME^^P0Z3#ZIYEKynj_-BB<FbbN>7O{8Np+snm_RS-;$sFH&G)BSD{tt^cSh$ zxEXLF^_g8NBiUXOB@sd9>vIy}wU>k)PW53u7jH?pPZ^LgUuFD!ReHa)^I~NrI?6(W zyO+HYUOlQIFW5y!xMy7k#Q>?s$9@ufX&bJF6!{5N-oyK8-+#BM!f|mV+slrNc&j`b zygJQ%?o28%-5!g0BxH{(^p@LW4;z^F81+y4&6V$jyX+!|%U*|t@`}_hPyhe^XQ51d zlhe~C)lO~3QYJai#K_6X4Uy6;R|T&kdo6n9v!RzbKUCHt{8ar;d$>1kiE8mcH41nl zC<7A(?>DkN?qr`kGr`FBP%ap4*P|i;u+?V#^7e<YFU>(c{{Q<1K&_zo_UZ%yol7#* zrLRyIAc+H!V<i?LNPTnj%&o&_pBsH0F{?i&jH;b3ox19K$>7!I_Qp3R=K<?J7kR`d z4MlVgBMXa#b7#6j_{WF~X=33cBO`?VtbEGPFH5?QLUtKvTdPpe1|_$(Cv<*y`{d}$ z4}MN+NjgsN%;psV;oetjr8UR9M<|u)>u^AS(;pfXKt@#q(V_YFLwoyTZysd=WD!$@ zH7{fN=rr+M$la}r;Yvuz;_S)^B@Ck?g2$r0G`f?v7LxD2erVZ$8?Q^!#4|$->v;j= zqdtz|lXTDM-G&*5)QSy%lSP{LIs0UhMWoLP+XDu$;14y#y`fTSLA&I2w@>wl^xt9` zdHFhdq+s>}cYng16ktHw;shXDshK-3Q(vI_0Was!6^I0o78ICD&xOa(_>t0YKOhq& zJVwp!Q&?f%MuWr_l#ijl##rDspd~nuNP8zjeGL~sqA%)c-eYF{P4WPtc+H=L?uvX; zj^3>Guf@@s<w+<NbebO;6onD&t~!>+(yXu)62D_SeCi6aWS71jv>SwnfKm(*TW2Lx zM!*(&Y_Co4tiBT;bD4Mw`KOru<olw6!&=fwV(#WcueVl)S588kH~U$8N(-N5=R;%m zeCd=LMY`P`wX}Zbky30}X`f-*9B8f8xh?g=c3kWuiRWq){XC1mYl<N39$Xb#U=|V* z+UICewNDJ?O~U0yI_ArK`9{^RpeenZG<qdo%)SN5Sczg|20ltnK}AK>5%a9(S!_l* z)!ZG+{WV3@qc5Ydn3<leypELNXV^kX-<5IoCsbUfEw;cVLT<$i><I8W*m=7jUt~TW zFREG5-=|0NGo@T3uRNovPdl86uirgfZmXLlt%Y}K!+z?cC>-qBJm5GG)ZFLD+#b1L zQv6wIvm2qD9HbY(wK-U=;+JhiGY~=vGRL5u1*Bhao09x>$A)hwp3^XpkQx2|g*Wb; zM;MMx8(tvNG3z|!fbSBOJtr0M{E(?OKJ8_ThZc{kIIcdXX814vcq)AE>-042+<;Oc zwEPx^_~zK%Gf!ySB;24at2m`;WIe7I%lqfNT$MJE1JSu-HRk35DcG|I|4N7htFAOv z?fgy5c`<(dMuLPP@dqI9U>m1c9j`-e3fyNxhU^Xe0Bvf=`uIbM&68C{b=xSo-%wBl z-LrcDI=~+kgh7?NGS|<^$!Xh{uQ%P1<lKhar{Q{&p$gskn<02we~c`T8}m>I?@G`I zB=F@53qWREch5*K2Jkt-tO$j?T;y$Yb6}*C#wal>iE(jv)DYJypsw95X5_RZ0U0`= zeF+>!FuE8(40wcgNce&N>x+qaE*pHN5{PoU=~YS|iTsbrcwdiwzo^q+U|h2fNIip> z@d(`A1nPFc7&zuMk+;pvy0n2MGdDXtw|kum{5O{W9%>zH<yuSi4|m0Mtf~HbjjJ3S zIETd-I-u#0k6P{K%M}irL4R!Usl2(BZ{sHSI67NophTEyQsS&h7wbg4)<}~*G;HI& zUVQ5v3974NuCN-Dx5X;@s55M=;yx3FW?)Jc8{hnRT^&S?2un0YlKaXa;81o)AF+&& zgInNVXW+PAoV@G2UW>i6H@*7!Ma3qkrbJf;ZUO7+#&C|W^OnqyFU_$1x%$Py-EF|} zuj{mEWvQ0csc-Jyn2LH~_qh=mPhe7{D1=vN3_E^YFn@SGQj(yR`jcLMVO)5)bon~; zT;Q&aYz+iX@@s#?Hsdnpcr8xDCFp6m>7-5E*9D|CTzT!&X#u)PH^*yC3^NHG^KJuK zn0hy+LdOLe97%IFenP7i=LOp%lIJ}2B~-@IIujN5C!k(4i@dV=y$LQP#SftfebVt! z_Xpq;AZVdL(Av=Wctkr-r)*o@^vj#aY<w5>OSA6|zTCY5HKX76vTnK0K-)UNE?A8V z?@jJ8;T!EZ9i}d$a2?3(_U-Fxhi>m)u=->NJZ^4LFglrzL-q-kMv1w~hAl79Q|@qW zN;yd^A(&3cJ{@=oxP|$gD-AYzwmc3FSRR}r;A~U$Go53Oo;*MK^{cGlyR5%>+3Uh} zr7S4RJJ=wkW}YZ}k9SkE37X?@iE{}|JxmO}An81~4f!!b4^tzN;YUo#(HVqq_7s?C zervQPQ1jR;_JF~{S08xIj(P5E9dG~ZW~3GxWasG?nVXsEd49bi1fUMwFs-lGjW6$8 zTC|dy5+>ySwCGhM%G5Xe?#6?s$za|7qKB@eW7j9zk9|U`uz8$eHBZumZH}j|&xyOX zDX88mRsy>r$n#K3AZPV{@^g1{fGs<7oGcs79}^N>8?9i_Ppvqrqv>DXd6}-n?BYSp zq4+9=<`BH*d7fRz=D`z0uASN8dFJ)0?tT@`<a*uAb+XBePlMi&L<syTKiX=0bIoxX zNR%OB9&T<;kI>jyeYkyeK`Zn6Od4bucmyP+N%R6o&#-p<sRoA@T!pFvQnT9W-o_)m z3_sX}d6Hd%4N@RIU^)Q{a?|7yGL3&KBlPz-SR=Kpp9?u;F1*3XApJ-<%cChBdijr) z83hAN@Cu?a*`|qSiH=A8B|d<{w~BDJ=&wRWTRJ*AT3h2qU7Z+KZL?=0Kfe!UnkCEd z``qO3NmmL7hEdv2opk05k~}9x{?7#zS^$A`A3`g{!;+Gc3m2g7HG@l#@F_m3`8{DO zwhL-VI57GYp)`R$gBH7i!UErJ7S#va4)7SUc_ia8xQJ1uJ@cm(shj?2^>cq(wLcEr z8puE-_S22XGlF&ue0)eqst%?5J^#yYjlG5{6Z%2+n|1w8&>n+t{(b~6oJBzO;6`Yc zWF6jlM;l6G8t|t!=PATV$p0-zDLjy#An-pmF~gD6uV+LS_75$fz-0;t)8aj>!BK9G zr`it<I9gmR`1|pw{#xtfhJC>JpP~O_f&W_;VE7{)gcJB*`AgFO;m=K9c5qY{6umNR Ts(s<_P&f)Qs#go8Zg~GMLKoj| diff --git a/docs/src/03_system_scope_and_context.adoc b/docs/src/03_system_scope_and_context.adoc index 7173c5c..ca6d7da 100644 --- a/docs/src/03_system_scope_and_context.adoc +++ b/docs/src/03_system_scope_and_context.adoc @@ -14,4 +14,4 @@ En esta tabla se muestra el contexto de negocio de la aplicación. Las entradas === Contexto técnico -image::diagrama_contexto_tecnico.png["Diagrama de contexto técnico"] \ No newline at end of file +image::diagrama_contexto_tecnico.drawio.png["Diagrama de contexto técnico"] \ No newline at end of file From 1076168d76f49f83b465b22524bad258f5c0a983 Mon Sep 17 00:00:00 2001 From: Verzidee <Zohaib0614@gmail.com> Date: Sat, 17 Feb 2024 19:03:13 +0100 Subject: [PATCH 15/61] Requisitos de calidad --- docs/src/10_quality_requirements.adoc | 78 ++++----------------------- 1 file changed, 9 insertions(+), 69 deletions(-) diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index 68475e8..c165e1c 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -1,73 +1,13 @@ ifndef::imagesdir[:imagesdir: ../images] += Requisitos de Calidad 🌟 -[[section-quality-scenarios]] -== Quality Requirements +== Árbol de Calidad 🌳 +El árbol de calidad se organiza con "calidad" como raíz, desglosándose en varias ramas principales que representan categorías de calidad relevantes para el proyecto WIQ. Estas ramas incluyen: -[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: - -* 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 - -[role="arc42help"] -**** -.Contents -Concretization of (sometimes vague or implicit) quality requirements using (quality) scenarios. - -These scenarios describe what should happen when a stimulus arrives at the system. - -For architects, two kinds of scenarios are important: - -* 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. - -.Motivation -Scenarios make quality requirements concrete and allow to -more easily measure or decide whether they are fulfilled. - -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. -**** +- *Usabilidad* 💡: Se refiere a la facilidad con la que los usuarios pueden utilizar un sistema para alcanzar sus objetivos de manera eficiente y satisfactoria. La usabilidad implica interfaces intuitivas, accesibilidad y una experiencia de usuario agradable. +- *Rendimiento* ⚡: Evalúa la eficiencia del sistema en términos de velocidad de respuesta, consumo de recursos y escalabilidad. Un buen rendimiento asegura que el sistema puede manejar cargas de trabajo elevadas con tiempos de respuesta rápidos. +- *Seguridad* 🔒: Implica proteger la información y los sistemas contra accesos no autorizados, divulgación, alteración o destrucción, garantizando la confidencialidad, integridad y disponibilidad de los datos. +- *Fiabilidad* 🛡️: La capacidad del sistema de funcionar correctamente y sin fallos durante un período determinado bajo condiciones específicas. La fiabilidad se centra en la consistencia del rendimiento y la prevención de fallos. +- *Mantenibilidad* 🔧: Se refiere a la facilidad con la que un sistema puede ser modificado para corregir fallos, mejorar su funcionamiento o adaptarse a un entorno cambiante. Una alta mantenibilidad facilita las actualizaciones y reduce los costos a largo plazo. +- *Portabilidad 🌍*: La capacidad de un sistema para ser utilizado en diferentes entornos operativos con mínimas modificaciones. La portabilidad permite que el software sea compatible con diversos dispositivos, sistemas operativos o navegadores web. \ No newline at end of file From 939e16f9ba007b1109d8f6e72c0bce79d70554eb Mon Sep 17 00:00:00 2001 From: Verzidee <Zohaib0614@gmail.com> Date: Sat, 17 Feb 2024 20:27:01 +0100 Subject: [PATCH 16/61] =?UTF-8?q?A=C3=B1adido=20arbol=20de=20calidad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/images/Arbol de calidad.jpg | Bin 0 -> 21922 bytes docs/src/10_quality_requirements.adoc | 4 +++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 docs/images/Arbol de calidad.jpg diff --git a/docs/images/Arbol de calidad.jpg b/docs/images/Arbol de calidad.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1cf0fbc9591e6f60440a9269d9a20afb78e45943 GIT binary patch literal 21922 zcmeIa2Ut_vwkRAxQ4v&7K#CwCL5cwhO+i5E2|Y9kMWrWnqzKprq=b@22Pp{<AfWUn zHhPm1S|}<_2m*p2D3%w`x%+I-eP^Gy@BPpD|NDR68~L)<m}RXw)~ut=`D5(I8^95` z9!w9w!U6!WFn@p_Gc02;ZSBiu2va?nk?vm;Isi=Aa|QtL_6ZC?=xd$4WQ#nx@6BJI z_?dRq`I_I)`yT-Fy`M&Yz8wG<g8V_Ae-?ef#r2vqGs6ew9~8hWoJs64CVtHQuejt- z-083Q`JZ@5pkE*}kJ(Q=z!IU	f%Ur28+p(=WKQU%=1&7-pXH-d;gJ%lZjFDdu$b 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 literal 0 HcmV?d00001 diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index c165e1c..dc116c8 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -10,4 +10,6 @@ El árbol de calidad se organiza con "calidad" como raíz, desglosándose en var - *Seguridad* 🔒: Implica proteger la información y los sistemas contra accesos no autorizados, divulgación, alteración o destrucción, garantizando la confidencialidad, integridad y disponibilidad de los datos. - *Fiabilidad* 🛡️: La capacidad del sistema de funcionar correctamente y sin fallos durante un período determinado bajo condiciones específicas. La fiabilidad se centra en la consistencia del rendimiento y la prevención de fallos. - *Mantenibilidad* 🔧: Se refiere a la facilidad con la que un sistema puede ser modificado para corregir fallos, mejorar su funcionamiento o adaptarse a un entorno cambiante. Una alta mantenibilidad facilita las actualizaciones y reduce los costos a largo plazo. -- *Portabilidad 🌍*: La capacidad de un sistema para ser utilizado en diferentes entornos operativos con mínimas modificaciones. La portabilidad permite que el software sea compatible con diversos dispositivos, sistemas operativos o navegadores web. \ No newline at end of file +- *Portabilidad 🌍*: La capacidad de un sistema para ser utilizado en diferentes entornos operativos con mínimas modificaciones. La portabilidad permite que el software sea compatible con diversos dispositivos, sistemas operativos o navegadores web. + +image::Arbol de calidad.jpg[Árbol de Calidad,align="center"] \ No newline at end of file From df260e719e01f8b75eda55038f29d1addbfd7b5f Mon Sep 17 00:00:00 2001 From: Verzidee <Zohaib0614@gmail.com> Date: Sat, 17 Feb 2024 21:16:51 +0100 Subject: [PATCH 17/61] =?UTF-8?q?A=C3=B1adido=20escenarios=20de=20calidad?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/10_quality_requirements.adoc | 28 ++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index dc116c8..832c3d3 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -12,4 +12,30 @@ El árbol de calidad se organiza con "calidad" como raíz, desglosándose en var - *Mantenibilidad* 🔧: Se refiere a la facilidad con la que un sistema puede ser modificado para corregir fallos, mejorar su funcionamiento o adaptarse a un entorno cambiante. Una alta mantenibilidad facilita las actualizaciones y reduce los costos a largo plazo. - *Portabilidad 🌍*: La capacidad de un sistema para ser utilizado en diferentes entornos operativos con mínimas modificaciones. La portabilidad permite que el software sea compatible con diversos dispositivos, sistemas operativos o navegadores web. -image::Arbol de calidad.jpg[Árbol de Calidad,align="center"] \ No newline at end of file +image::Arbol de calidad.jpg[Árbol de Calidad,align="center"] + +== Escenarios de Calidad + +=== Usabilidad 💡 + +- *Escenario*: Un nuevo usuario puede registrarse e iniciar a jugar en menos de 5 minutos después de su primer acceso al sitio web. La interfaz intuitiva y la guía de inicio rápido facilitan este proceso. 🚀 + +=== Rendimiento ⚡ + +- *Escenario*: El sistema responde a las solicitudes de los usuarios en menos de 2 segundos bajo condiciones normales de carga, asegurando una experiencia de juego fluida. 🏎️ + +=== Seguridad 🔒 + +- *Escenario*: Todos los datos personales de los usuarios están cifrados tanto en tránsito como en reposo, utilizando estándares de seguridad actuales para prevenir accesos no autorizados. 🔐 + +=== Mantenibilidad 🔧 + +- *Escenario*: El sistema permite la adición de nuevas funcionalidades (como tipos de preguntas o temáticas) sin necesidad de una reestructuración mayor, promoviendo una arquitectura modular. 🛠️ + +=== Fiabilidad 🛡️ + +- *Escenario*: En caso de fallo del sistema, este debe ser capaz de recuperarse y volver a estar operativo en menos de 5 minutos, garantizando una alta disponibilidad. 🔄 + +=== Portabilidad 🌍 + +- *Escenario*: La aplicación web es compatible con los navegadores web más utilizados (Chrome, Firefox, Safari, Edge) en sus últimas dos versiones principales, asegurando un amplio acceso. 🌐 \ No newline at end of file From 5c06cb9b39e831ad7e7f9cfe5f4be40fc6437f1a Mon Sep 17 00:00:00 2001 From: Verzidee <Zohaib0614@gmail.com> Date: Sat, 17 Feb 2024 21:35:00 +0100 Subject: [PATCH 18/61] Arreglo de arbol de calidad --- docs/images/10_Arbol_de_calidad.jpg | Bin 0 -> 23597 bytes docs/images/Arbol de calidad.jpg | Bin 21922 -> 0 bytes docs/src/10_quality_requirements.adoc | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 docs/images/10_Arbol_de_calidad.jpg delete mode 100644 docs/images/Arbol de calidad.jpg diff --git a/docs/images/10_Arbol_de_calidad.jpg b/docs/images/10_Arbol_de_calidad.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bc70eea8750eb2ed25df3096234f87136ba15218 GIT binary patch literal 23597 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 literal 0 HcmV?d00001 diff --git a/docs/images/Arbol de calidad.jpg b/docs/images/Arbol de calidad.jpg deleted file mode 100644 index 1cf0fbc9591e6f60440a9269d9a20afb78e45943..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21922 zcmeIa2Ut_vwkRAxQ4v&7K#CwCL5cwhO+i5E2|Y9kMWrWnqzKprq=b@22Pp{<AfWUn zHhPm1S|}<_2m*p2D3%w`x%+I-eP^Gy@BPpD|NDR68~L)<m}RXw)~ut=`D5(I8^95` z9!w9w!U6!WFn@p_Gc02;ZSBiu2va?nk?vm;Isi=Aa|QtL_6ZC?=xd$4WQ#nx@6BJI z_?dRq`I_I)`yT-Fy`M&Yz8wG<g8V_Ae-?ef#r2vqGs6ew9~8hWoJs64CVtHQuejt- z-083Q`JZ@5pkE*}kJ(Q=z!IU	f%Ur28+p(=WKQU%=1&7-pXH-d;gJ%lZjFDdu$b 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 diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index 832c3d3..98f1c11 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -12,7 +12,7 @@ El árbol de calidad se organiza con "calidad" como raíz, desglosándose en var - *Mantenibilidad* 🔧: Se refiere a la facilidad con la que un sistema puede ser modificado para corregir fallos, mejorar su funcionamiento o adaptarse a un entorno cambiante. Una alta mantenibilidad facilita las actualizaciones y reduce los costos a largo plazo. - *Portabilidad 🌍*: La capacidad de un sistema para ser utilizado en diferentes entornos operativos con mínimas modificaciones. La portabilidad permite que el software sea compatible con diversos dispositivos, sistemas operativos o navegadores web. -image::Arbol de calidad.jpg[Árbol de Calidad,align="center"] +image::10_Arbol_de_calidad.jpg[Árbol de Calidad,align="center"] == Escenarios de Calidad From 24df1ed763ae6069694f61b69bcc80e46a9d4bb5 Mon Sep 17 00:00:00 2001 From: yagonavajas <uo287746@uniovi.es> Date: Sun, 18 Feb 2024 11:59:47 +0100 Subject: [PATCH 19/61] Acabado documento 01 --- docs/src/01_introduction_and_goals.adoc | 76 +++++-------------------- 1 file changed, 13 insertions(+), 63 deletions(-) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index 6ee631e..7e10b9f 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -1,92 +1,42 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-introduction-and-goals]] -== Introduction and Goals (wiq_es04c) +== Introducción y Ojetivos (wiq_es04c) nombre_del_proyecto es un proyecto desarrollado en la asignatura Arquitectura del Software. Consiste en la creacion de una aplicacion web al estilo "Saber y Ganar". Es decir, es un juego de preguntas de cultura general. Los desarrolladores de la aplicacion son por David Álvarez Díaz, Zohaib Akhtar Kausar, Sara Lamuño García, Yago Navajas González y Santiago López Laso. - -[role="arc42help"] -**** La aplicacion tendra su base para las preguntas y las respuestas en Wikidata , la base de conocimiento editada en colaboracion. -* underlying business goals, -* essential features, -* essential functional requirements, -* quality goals for the architecture and -* relevant stakeholders and their expectations -**** -=== Requirements Overview +=== Requisitos Funcionales -[role="arc42help"] **** -.Contents * Los usuarios se deberan loggear en la pagina, esto servira para tener registro de unas serie de parametros, como puede ser las veces que se ha jugado. * Se podran responder preguntas autogeneradas y ver si han acertado fallado asi como la respuesta correcta. - -.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. +* Las preguntas deberan ser respondidas en un tiempo limite. +* Las preguntas seran seguiran la misma estructura: 1 pregunta correcta y 3 incorrectas, generadas automaticamente. +* Los usuarios prodran consultar datos sobre su cuentan, como pueden ser las veces que han jugado o el numero de preguntas que han acertadoo fallado. **** -=== Quality Goals +=== Atributos de Calidad -[role="arc42help"] -**** [options="header",cols="1,2,2"] |=== |Prioridad | Objetivo | Descripcion -|Usabilidad | | -|Privacidad | | -|Mantenibilidad | | +| 1 | Usabilidad | Todos los usuarios deben poder usar la aplicacion sin tener en cuenta sus limitaciones. +| 2 | Privacidad | Los datos sensibles de los usuarios deben estar restingidos al mismo usuario. +| 3 |Mantenibilidad | El código y documentación de la aplicación ha de estar conformado de tal forma que sea factible hacer cambios y ampliaciones en la aplicación. +| 4 | Eficiciencia | Los tiempos entre operaciones han de ser asumibles. +| 5 | Fiabilidad | Los datos usados en la aplicación deben ser los correctos. |=== - -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"] |=== |Role/Name|Contact|Expectations @@ -94,6 +44,6 @@ Table with role names, person names, and their expectations with respect to the David Álvarez Díaz -> UO283196@uniovi.es + Zohaib Akhtar Kausar -> UO291060@uniovi.es + Sara Lamuño García -> UO283706@uniovi.es + -Santiago Lopez Laso -> UO277369@uniovi.es | Los estudiantes que llevarán a cabo el desarrollo de la aplicación -| Profesores | _<Contact-2>_ | Supervisores de los avances y encargados de evaluar la aplicacion final +Santiago Lopez Laso -> UO277369@uniovi.es | Los estudiantes que llevarán a cabo el desarrollo de la aplicación. Seran los encargados de la arquitectura, la documentación y la codificación. +| Profesores | labra@uniovi.es | Supervisores de los avances y encargados de evaluar la aplicacion final y el desarrollo de la misma. |=== From 04669c0e85b74b736f5bc0c152001fb7f0fac6f2 Mon Sep 17 00:00:00 2001 From: yagonavajas <uo287746@uniovi.es> Date: Sun, 18 Feb 2024 12:57:53 +0100 Subject: [PATCH 20/61] =?UTF-8?q?A=C3=B1adida=20tabla=20doc8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/09_architecture_decisions.adoc | 40 +++++-------------------- 1 file changed, 8 insertions(+), 32 deletions(-) diff --git a/docs/src/09_architecture_decisions.adoc b/docs/src/09_architecture_decisions.adoc index 51e9aad..9c3f130 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. - -**** +== Decisiones de Arquitectura + +|=== +| Decisión | Ventajas | Inconvenientes +| JavaScript / React | La base de la aplicación ya esta creada con este lenguaje y lo para la creación de sitios web es un versatil. | La baja o nula esperiencia con el lenguaje de algunos integrantes del grupo asi como sus limitaciones tecninas. +| Microservicios | La aplicacion se podra dividir en problemas que se podran solucionar dandole diferentes enfoques con diferentes lenguajes y metodologias. | AL igual que el primer punto, la baja experiencia con esta forma de trabajo al cual se tendra que adaptar el grupo. +| MongoDB | | +|=== From 922fae8dc823107c8c768a761780a7db48e977ad Mon Sep 17 00:00:00 2001 From: yagonavajas <uo287746@uniovi.es> Date: Sun, 18 Feb 2024 13:26:41 +0100 Subject: [PATCH 21/61] =?UTF-8?q?a=C3=B1adida=20decision=20base=20de=20dat?= =?UTF-8?q?os?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/09_architecture_decisions.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/09_architecture_decisions.adoc b/docs/src/09_architecture_decisions.adoc index 9c3f130..2640737 100644 --- a/docs/src/09_architecture_decisions.adoc +++ b/docs/src/09_architecture_decisions.adoc @@ -7,5 +7,5 @@ ifndef::imagesdir[:imagesdir: ../images] | Decisión | Ventajas | Inconvenientes | JavaScript / React | La base de la aplicación ya esta creada con este lenguaje y lo para la creación de sitios web es un versatil. | La baja o nula esperiencia con el lenguaje de algunos integrantes del grupo asi como sus limitaciones tecninas. | Microservicios | La aplicacion se podra dividir en problemas que se podran solucionar dandole diferentes enfoques con diferentes lenguajes y metodologias. | AL igual que el primer punto, la baja experiencia con esta forma de trabajo al cual se tendra que adaptar el grupo. -| MongoDB | | +| MongoDB | Parte de la implementacion ya está hecha. Por otra parte es de uso libre y existe bastante documentacion online para usarse correctamente | Al igual que los dos puntos anteriores, el grupo cuenta con poca experiencia usando esta tecnología y no somos concientes de todas sus limitaciones y fortalezas. |=== From c47f5526e5e6feb6eae0698b646f80a435bab37a Mon Sep 17 00:00:00 2001 From: yagonavajas <uo287746@uniovi.es> Date: Sun, 18 Feb 2024 13:27:07 +0100 Subject: [PATCH 22/61] finalizada primera version doc08 --- docs/images/08_diagrama_modelo_dominio.png | Bin 0 -> 20869 bytes docs/src/08_concepts.adoc | 67 ++++----------------- 2 files changed, 13 insertions(+), 54 deletions(-) create mode 100644 docs/images/08_diagrama_modelo_dominio.png diff --git a/docs/images/08_diagrama_modelo_dominio.png b/docs/images/08_diagrama_modelo_dominio.png new file mode 100644 index 0000000000000000000000000000000000000000..54fe0a4363ac79c5edfc40de514e269bc80532d4 GIT binary patch literal 20869 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 literal 0 HcmV?d00001 diff --git a/docs/src/08_concepts.adoc b/docs/src/08_concepts.adoc index 591ccf1..23e724c 100644 --- a/docs/src/08_concepts.adoc +++ b/docs/src/08_concepts.adoc @@ -1,73 +1,32 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-concepts]] -== Cross-cutting Concepts +== Conceptos Transversales +Estos conceptos todavia no han sido aprobados ni implemenmtados pero dan una idea general al proyecto. +=== Modelo de Dominio +Esta es una primera version del modelo del dominio muy simple para hacerse una idea como funcionara la aplicacion. -[role="arc42help"] -**** -.Content -This section describes overall, principal regulations and solution ideas that are relevant in multiple parts (= cross-cutting) of your system. -Such concepts are often related to multiple building blocks. -They can include many different topics, such as -* models, especially domain models -* architecture or design patterns -* rules for using specific technology -* principal, often technical decisions of an overarching (= cross-cutting) nature -* implementation rules +=== Experiencia de Usuario -.Motivation -Concepts form the basis for _conceptual integrity_ (consistency, homogeneity) of the architecture. -Thus, they are an important contribution to achieve inner qualities of your system. +El usuario sera capaz de interactura con una aplicacion web donde se podra registrar y jugar al juego de manera sencilla. -Some of these concepts cannot be assigned to individual building blocks, e.g. security or safety. +image::08_diagrama_modelo_dominio.png["Modelo de dominio simple provisional"] - -.Form -The form can be varied: - -* concept papers with any kind of structure -* cross-cutting model excerpts or scenarios using notations of the architecture views -* sample implementations, especially for technical concepts -* reference to typical usage of standard frameworks (e.g. using Hibernate for object/relational mapping) - -.Structure -A potential (but not mandatory) structure for this section could be: - -* Domain concepts -* User Experience concepts (UX) -* Safety and security concepts -* Architecture and design patterns -* "Under-the-hood" -* development concepts -* operational concepts - -Note: it might be difficult to assign individual concepts to one specific topic -on this list. - -image::08-Crosscutting-Concepts-Structure-EN.png["Possible topics for crosscutting concepts"] - - -.Further Information - -See https://docs.arc42.org/section-8/[Concepts] in the arc42 documentation. -**** - - -=== _<Concept 1>_ +=== Seguridad _<explanation>_ +=== Arquitectura y Patrones de Diseño +_<explanation>_ -=== _<Concept 2>_ +=== Desarrollo _<explanation>_ -... - -=== _<Concept n>_ +=== Operaciones -_<explanation>_ +_<explanation>_ \ No newline at end of file From d119680dd4916472e43e427a3b8144a7f6e12e38 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Sun, 18 Feb 2024 19:09:56 +0100 Subject: [PATCH 23/61] =?UTF-8?q?Decisiones=20tecnol=C3=B3gicas=20y=20de?= =?UTF-8?q?=20metas=20actualizadas=20en=2006.adoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/04_solution_strategy.adoc | 47 ++++++++++++++++++++++++++++-- 1 file changed, 45 insertions(+), 2 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 54b671b..35764a9 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -24,6 +24,46 @@ 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. +Decisiones tecnológicas + +Hemos decidido realizar la parte de Front-End con React y la parte de Back-End con la estructura de los microservicios. +El despliegue se realizará a través de una máquina virtual de Azure, con ayuda de Docker y GitHub Actions. + +[options="header",cols="1,2"] +|=== +|Aplicación +|Breve explicación +|React +|Biblioteca de JavaScript que nos servirá para realizar las interfaces de usuario necesarias para el Front-End. +|Microservicios +|Aquí es donde se unirá el uso de la API (Application Programming Interface) de WikiData, la cual nos sacará los datos para las preguntas y las respuestas +de la aplicación con el proyecto en sí. +|Azure +|Plataforma para la creación de la máquina virtual que servirá para desplegar la aplicación. +|Docker +|Encargado de dividir el contenido del proyecto en diversos contenedores (en nuestro caso 4) y sea más fácil de manipular el contenido de dicho proyecto. +|GitHub Actions +|Nos servirá para el despliegue del proyecto, pero de forma automática en vez de desplegarlo todo a mano. Cabe a destacar que también están implementados +unos test para asegurar el correcto despliegue del proyecto. +|=== + +Decisiones de cómo llegar a las metas principales (En desarrollo): +[options="header",cols="1,2"] +|=== +|Usabilidad +| +|Privacidad +| +|Mantenibilidad +| +|Eficiciencia +| +|Fiabilidad +| + +|=== + + Decisiones organizativas @@ -52,9 +92,9 @@ En la segunda semana hemos decidido ponernos de manera más profunda con la docu | Sara Lamuño García | 4, 6, 12 | Yago Navajas Gonzalez -| 1 +| 1, 8, 9 | David Álvarez Díaz -| +| 5, 7 | Zohaib Akhtar Kausar | 10, 11 | Santiago Lopez Laso @@ -63,6 +103,9 @@ En la segunda semana hemos decidido ponernos de manera más profunda con la docu Se han creado el mismo número de Issues como apartados de la documentación hay para asignarla a cada miembro. +En cuanto al despliegue de la aplicación se van a arreglar los errores que salen en los test al intentar desplegarla, ya que se han cambiado +algunos valores predefinidos, por lo que los test también predefinidos fallarán. + .Further Information See https://docs.arc42.org/section-4/[Solution Strategy] in the arc42 documentation. From e0a6b82bb9e44ec2c42223da95f8edc9121f539d Mon Sep 17 00:00:00 2001 From: Verzidee <Zohaib0614@gmail.com> Date: Mon, 19 Feb 2024 17:25:22 +0100 Subject: [PATCH 24/61] Primera version de riesgos #23 --- docs/src/11_technical_risks.adoc | 39 ++++++++++++-------------------- 1 file changed, 15 insertions(+), 24 deletions(-) diff --git a/docs/src/11_technical_risks.adoc b/docs/src/11_technical_risks.adoc index dc5575f..6998b64 100644 --- a/docs/src/11_technical_risks.adoc +++ b/docs/src/11_technical_risks.adoc @@ -1,25 +1,16 @@ -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. - -**** += Risks and Technical Debts 🚀 + +[width="100%",options="header",cols="^,^"] +|====================== +| Riesgo | Descripción +| Tiempo de entrega ⏳ | Estamos limitados por el plazo de entrega y también por el tiempo que dedicaremos a trabajar en otras asignaturas. +| Proyecto grande y equipo grande 👥 | La coordinación y comunicación en un equipo grande pueden ser desafiantes. +| Diseño inadecuado o enfoque incorrecto 🎨 | La presencia de errores en etapas tempranas puede ser devastadora, ya que estas son cruciales. Un mal diseño detectado en etapas avanzadas podría ser irreparable, subrayando la importancia de una planificación y visión previsoras. +| Falta de familiaridad con las tecnologías 🔧 | El equipo comienza con conocimiento limitado sobre las herramientas necesarias, lo que puede resultar en un uso subóptimo de estas. +| Errores de implementación 🚨 | Errores no críticos en la lógica de negocio pueden permanecer ocultos por largo tiempo, afectando la calidad del sistema. +| Comunicación deficiente entre miembros 📢 | Las diferencias y desacuerdos pueden obstaculizar la colaboración efectiva, esencial para el éxito del equipo. +| Distribución desigual del trabajo ⚖️ | Una asignación desequilibrada puede sobrecargar a algunos miembros mientras deja a otros con menos responsabilidades. +| Reducción del tamaño del equipo 👥 | La salida inesperada de miembros puede desafiar la continuidad y el avance del proyecto, requiriendo adaptaciones rápidas y eficientes. + +|====================== From af82de074780098e584414254ec38f858cff7bb0 Mon Sep 17 00:00:00 2001 From: bidoff <uo283196@uniovi.es> Date: Mon, 19 Feb 2024 20:41:32 +0100 Subject: [PATCH 25/61] Revertir el revert y volver al commit de arreglar el despliegue --- package-lock.json | 6 ------ webapp/package.json | 1 - webapp/src/App.js | 33 ++++++--------------------------- webapp/src/App.test.js | 2 +- webapp/src/index.js | 5 ----- 5 files changed, 7 insertions(+), 40 deletions(-) delete mode 100644 package-lock.json diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 9bdaa85..0000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "wiq_es04c", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/webapp/package.json b/webapp/package.json index 442d0f4..74e31be 100644 --- a/webapp/package.json +++ b/webapp/package.json @@ -51,6 +51,5 @@ "puppeteer": "^21.7.0", "serve": "^14.2.1", "start-server-and-test": "^2.0.3" - } } diff --git a/webapp/src/App.js b/webapp/src/App.js index 178c407..0de25d2 100644 --- a/webapp/src/App.js +++ b/webapp/src/App.js @@ -46,49 +46,28 @@ function App() { } export default App; */ -import React, { useState } from 'react'; -import AddUser from './components/AddUser'; +import React from 'react'; +import GenerateQuestion from './components/GenerateQuestion'; // Asegúrate de importar GenerateQuestion correctamente import Login from './components/Login'; 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 Footer from './components/Footer'; function App() { - - - const [showLogin, setShowLogin] = useState(true); - - const handleToggleView = () => { - setShowLogin(!showLogin); - }; - return ( <Container component="main" maxWidth="xs"> <CssBaseline /> - - <Typography component="h1" variant="h5" align="center" sx={{ marginTop: 2 }}> - wiq_es04c - {showLogin ? <Login /> : <AddUser />} - {showLogin ? ( - <Link name="gotoregister" component="button" variant="body2" onClick={handleToggleView}> - Don't have an account? Register here. - </Link> - ) : ( - <Link component="button" variant="body2" onClick={handleToggleView}> - Already have an account? Login here. - </Link> - )} - + Welcome to the 2024 edition of the Software Architecture course </Typography> {/* Aquí se muestra el componente GenerateQuestion */} - + <GenerateQuestion /> + <Footer> </Footer> </Container> ); - } export default App; diff --git a/webapp/src/App.test.js b/webapp/src/App.test.js index 85a0c1c..5e3b731 100644 --- a/webapp/src/App.test.js +++ b/webapp/src/App.test.js @@ -3,6 +3,6 @@ import App from './App'; test('renders learn react link', () => { render(<App />); - const linkElement = screen.getByText(/wiq_es04c/i); + const linkElement = screen.getByText(/Welcome to the 2024 edition of the Software Architecture course/i); expect(linkElement).toBeInTheDocument(); }); diff --git a/webapp/src/index.js b/webapp/src/index.js index 4ac7ec6..efa143b 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -5,8 +5,6 @@ import App from './App'; import reportWebVitals from './reportWebVitals'; /*funcion q representa la barra de navegacion superior*/ import Navbar from './components/NavBar'; -import Footer from './components/Footer'; - const root = ReactDOM.createRoot(document.getElementById('root')); root.render( @@ -16,9 +14,6 @@ root.render( <App /> - - <Footer> </Footer> - </React.StrictMode> ); From 9e591d4af3dfa3292461c72ac24e98de2ca2a497 Mon Sep 17 00:00:00 2001 From: david <kingn@bidoff> Date: Mon, 19 Feb 2024 20:51:13 +0100 Subject: [PATCH 26/61] arreglar problema del ssh en el depsliegue --- .github/workflows/release.yml | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 77a4606..715c1f9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -110,6 +110,24 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io workdir: gatewayservice + docker-push-questionservice: + name: Push question service Docker Image to GitHub Packages + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + needs: [e2e-tests] + steps: + - uses: actions/checkout@v4 + - name: Publish to Registry + uses: elgohr/Publish-Docker-Github-Action@v5 + with: + name: arquisoft/wiq_es04c/questionservice + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + registry: ghcr.io + workdir: questionservice + deploy: name: Deploy over SSH runs-on: ubuntu-latest @@ -125,4 +143,4 @@ jobs: wget https://raw.githubusercontent.com/arquisoft/wiq_es04c/master/docker-compose.yml -O docker-compose.yml wget https://raw.githubusercontent.com/arquisoft/wiq_es04c/master/.env -O .env docker compose down - docker compose --profile prod up -d + docker compose --profile prod up -d \ No newline at end of file From 6c8014d1e89b97d86624c973671a8e4c1c1148ff Mon Sep 17 00:00:00 2001 From: david <kingn@bidoff> Date: Mon, 19 Feb 2024 20:58:11 +0100 Subject: [PATCH 27/61] arreglar problema despliegue(2) --- webapp/src/App.js | 18 +++++++----------- webapp/src/App.test.js | 2 +- webapp/src/index.js | 2 ++ 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/webapp/src/App.js b/webapp/src/App.js index 0de25d2..849ff74 100644 --- a/webapp/src/App.js +++ b/webapp/src/App.js @@ -1,4 +1,4 @@ -/* import React, { useState } from 'react'; + import React, { useState } from 'react'; import AddUser from './components/AddUser'; import Login from './components/Login'; import CssBaseline from '@mui/material/CssBaseline'; @@ -25,6 +25,7 @@ function App() { // {showLogin ? <Login /> : <AddUser />} muestra el componente Login si showLogin es true, y AddUser en caso contrario return ( <Container component="main" maxWidth="xs"> + <CssBaseline /> <Typography component="h1" variant="h5" align="center" sx={{ marginTop: 2 }}> WIQ_ES04C @@ -41,11 +42,14 @@ function App() { </Link> )} </Typography> + </Container> ); } -export default App; */ +export default App; + +/* import React from 'react'; import GenerateQuestion from './components/GenerateQuestion'; // Asegúrate de importar GenerateQuestion correctamente import Login from './components/Login'; @@ -61,13 +65,5 @@ function App() { <Typography component="h1" variant="h5" align="center" sx={{ marginTop: 2 }}> Welcome to the 2024 edition of the Software Architecture course </Typography> - {/* Aquí se muestra el componente GenerateQuestion */} + { Aquí se muestra el componente GenerateQuestion */ - <GenerateQuestion /> - - <Footer> </Footer> - </Container> - ); -} - -export default App; diff --git a/webapp/src/App.test.js b/webapp/src/App.test.js index 5e3b731..2a50f56 100644 --- a/webapp/src/App.test.js +++ b/webapp/src/App.test.js @@ -3,6 +3,6 @@ import App from './App'; test('renders learn react link', () => { render(<App />); - const linkElement = screen.getByText(/Welcome to the 2024 edition of the Software Architecture course/i); + const linkElement = screen.getByText(/WIQ_ES04C/i); expect(linkElement).toBeInTheDocument(); }); diff --git a/webapp/src/index.js b/webapp/src/index.js index efa143b..149c74e 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -4,6 +4,7 @@ import './index.css'; import App from './App'; import reportWebVitals from './reportWebVitals'; /*funcion q representa la barra de navegacion superior*/ +import Footer from './components/Footer'; import Navbar from './components/NavBar'; const root = ReactDOM.createRoot(document.getElementById('root')); @@ -14,6 +15,7 @@ root.render( <App /> + <Footer></Footer> </React.StrictMode> ); From 4e529b86de56f0f3f7f41300dc4e82a2398420f4 Mon Sep 17 00:00:00 2001 From: david alvarez <99325990+bidof@users.noreply.github.com> Date: Mon, 19 Feb 2024 21:12:41 +0100 Subject: [PATCH 28/61] Update release.yml --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 715c1f9..efe44ac 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -131,7 +131,7 @@ jobs: deploy: name: Deploy over SSH runs-on: ubuntu-latest - needs: [docker-push-userservice,docker-push-authservice,docker-push-gatewayservice,docker-push-webapp] + needs: [docker-push-userservice,docker-push-authservice,docker-push-gatewayservice,docker-push-webapp,docker-push-questionservice] steps: - name: Deploy over SSH uses: fifsky/ssh-action@master @@ -143,4 +143,4 @@ jobs: wget https://raw.githubusercontent.com/arquisoft/wiq_es04c/master/docker-compose.yml -O docker-compose.yml wget https://raw.githubusercontent.com/arquisoft/wiq_es04c/master/.env -O .env docker compose down - docker compose --profile prod up -d \ No newline at end of file + docker compose --profile prod up -d From 33a6cbf624a3bc4808051316a02d6cd30513be8d Mon Sep 17 00:00:00 2001 From: david <kingn@bidoff> Date: Mon, 19 Feb 2024 21:42:22 +0100 Subject: [PATCH 29/61] agregar el servicio al build.yml --- .github/workflows/build.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c926570..b281041 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -18,6 +18,7 @@ jobs: - run: npm --prefix users/authservice ci - run: npm --prefix users/userservice ci - run: npm --prefix gatewayservice ci + - run: npm --prefix questionsservice ci # Agrega la tarea para questionsservice - run: npm --prefix webapp ci - run: npm --prefix users/authservice test -- --coverage - run: npm --prefix users/userservice test -- --coverage From 01396d448152e6fa84200fbda73d3ffb408e3371 Mon Sep 17 00:00:00 2001 From: Santiago <uo277369@uniovi.es> Date: Mon, 19 Feb 2024 23:11:44 +0100 Subject: [PATCH 30/61] =?UTF-8?q?Arreglados=20errores=20compilaci=C3=B3n?= =?UTF-8?q?=20doc=20(no=20usar=20'=3D'=20(level=200))?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/10_quality_requirements.adoc | 18 +++++++++--------- docs/src/11_technical_risks.adoc | 2 +- docs/src/12_glossary.adoc | 2 +- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index 98f1c11..f51f8f2 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -1,7 +1,7 @@ ifndef::imagesdir[:imagesdir: ../images] -= Requisitos de Calidad 🌟 +== Requisitos de Calidad 🌟 -== Árbol de Calidad 🌳 +=== Árbol de Calidad 🌳 El árbol de calidad se organiza con "calidad" como raíz, desglosándose en varias ramas principales que representan categorías de calidad relevantes para el proyecto WIQ. Estas ramas incluyen: @@ -14,28 +14,28 @@ El árbol de calidad se organiza con "calidad" como raíz, desglosándose en var image::10_Arbol_de_calidad.jpg[Árbol de Calidad,align="center"] -== Escenarios de Calidad +=== Escenarios de Calidad -=== Usabilidad 💡 +==== Usabilidad 💡 - *Escenario*: Un nuevo usuario puede registrarse e iniciar a jugar en menos de 5 minutos después de su primer acceso al sitio web. La interfaz intuitiva y la guía de inicio rápido facilitan este proceso. 🚀 -=== Rendimiento ⚡ +==== Rendimiento ⚡ - *Escenario*: El sistema responde a las solicitudes de los usuarios en menos de 2 segundos bajo condiciones normales de carga, asegurando una experiencia de juego fluida. 🏎️ -=== Seguridad 🔒 +==== Seguridad 🔒 - *Escenario*: Todos los datos personales de los usuarios están cifrados tanto en tránsito como en reposo, utilizando estándares de seguridad actuales para prevenir accesos no autorizados. 🔐 -=== Mantenibilidad 🔧 +==== Mantenibilidad 🔧 - *Escenario*: El sistema permite la adición de nuevas funcionalidades (como tipos de preguntas o temáticas) sin necesidad de una reestructuración mayor, promoviendo una arquitectura modular. 🛠️ -=== Fiabilidad 🛡️ +==== Fiabilidad 🛡️ - *Escenario*: En caso de fallo del sistema, este debe ser capaz de recuperarse y volver a estar operativo en menos de 5 minutos, garantizando una alta disponibilidad. 🔄 -=== Portabilidad 🌍 +==== Portabilidad 🌍 - *Escenario*: La aplicación web es compatible con los navegadores web más utilizados (Chrome, Firefox, Safari, Edge) en sus últimas dos versiones principales, asegurando un amplio acceso. 🌐 \ No newline at end of file diff --git a/docs/src/11_technical_risks.adoc b/docs/src/11_technical_risks.adoc index 6998b64..f21bea9 100644 --- a/docs/src/11_technical_risks.adoc +++ b/docs/src/11_technical_risks.adoc @@ -1,5 +1,5 @@ -= Risks and Technical Debts 🚀 +== Risks and Technical Debts 🚀 [width="100%",options="header",cols="^,^"] |====================== diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index d534de7..e1c8150 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -68,4 +68,4 @@ curiosidad de este tipo de archivo es que no tiene un tipo de MIME definido, mie |GitHub Actions |Plataforma que ayuda a automatizar los proyectos, haciendo posible el despliegue de estos desde el mismo Github. Soporta una gran variedad de lenguajes de programación y sistemas operativos. - +|=== From 663d63510dd20e194f1c9fc459caf361f47101e7 Mon Sep 17 00:00:00 2001 From: Santiago <uo277369@uniovi.es> Date: Mon, 19 Feb 2024 23:16:54 +0100 Subject: [PATCH 31/61] Devuelto el [[section-x]] para que salga numerado en la doc --- docs/src/10_quality_requirements.adoc | 1 + docs/src/11_technical_risks.adoc | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index f51f8f2..32e96a1 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -1,4 +1,5 @@ ifndef::imagesdir[:imagesdir: ../images] +[[section-quality-scenarios]] == Requisitos de Calidad 🌟 === Árbol de Calidad 🌳 diff --git a/docs/src/11_technical_risks.adoc b/docs/src/11_technical_risks.adoc index f21bea9..a287e26 100644 --- a/docs/src/11_technical_risks.adoc +++ b/docs/src/11_technical_risks.adoc @@ -1,4 +1,5 @@ +[[section-technical-risks]] == Risks and Technical Debts 🚀 [width="100%",options="header",cols="^,^"] From 9963843521cd24ba488be3bd0782e5eab66c2bef Mon Sep 17 00:00:00 2001 From: Santiago <uo277369@uniovi.es> Date: Mon, 19 Feb 2024 23:21:04 +0100 Subject: [PATCH 32/61] =?UTF-8?q?Cosas=20a=20tener=20en=20cuenta=20para=20?= =?UTF-8?q?que=20compile=20la=20documentaci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.md b/README.md index 49a3962..84e1704 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,10 @@ # wiq_es04c +No hacer secciones nivel 0 (con solo un '=') porque no compila. +Ejemplo: no poner '= Requisitos de Calidad', sino '== Requisitos de Calidad' +No quitar el [[section-x]] del principio de un .adoc, porque si no no sale numerado. +Ejemplo: 12_glossary.adoc -> no quitar [[section-glossary]] + [![Deploy on release](https://github.com/Arquisoft/wiq_es04c/actions/workflows/release.yml/badge.svg)](https://github.com/Arquisoft/wiq_es04c/actions/workflows/release.yml) [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=Arquisoft_wiq_es04c&metric=alert_status)](https://sonarcloud.io/summary/new_code?id=Arquisoft_wiq_es04c) [![Coverage](https://sonarcloud.io/api/project_badges/measure?project=Arquisoft_wiq_es04c&metric=coverage)](https://sonarcloud.io/summary/new_code?id=Arquisoft_wiq_es04c) From e21929d1c8cd2b083859e11edb388ee33993c667 Mon Sep 17 00:00:00 2001 From: Santiago <uo277369@uniovi.es> Date: Mon, 19 Feb 2024 23:33:09 +0100 Subject: [PATCH 33/61] Arreglado 04 doc. El contenido estaba oculto por ser de [role="arc42help"] --- docs/src/04_solution_strategy.adoc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 35764a9..054548c 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -23,7 +23,9 @@ Keep the explanations of such key decisions short. 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. +**** +**** Decisiones tecnológicas Hemos decidido realizar la parte de Front-End con React y la parte de Back-End con la estructura de los microservicios. From 006dbb228a4adcd59d776e7c8d2b8d9d4aa02cca Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 21 Feb 2024 18:31:41 +0100 Subject: [PATCH 34/61] Arreglo del documento01.adoc --- docs/src/01_introduction_and_goals.adoc | 27 +++++++++++++------------ 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index 7e10b9f..77d1c1d 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -3,21 +3,21 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-introduction-and-goals]] == Introducción y Ojetivos (wiq_es04c) -nombre_del_proyecto es un proyecto desarrollado en la asignatura Arquitectura del Software. Consiste en la creacion de una aplicacion web al estilo "Saber y Ganar". Es decir, es un juego de preguntas de cultura general. +El proyecto de wiq_es04c es un proyecto desarrollado en la asignatura Arquitectura del Software. Consiste en la creacion de una aplicacion web al estilo "Saber y Ganar". Es decir, es un juego de preguntas de cultura general. Los desarrolladores de la aplicacion son por David Álvarez Díaz, Zohaib Akhtar Kausar, Sara Lamuño García, Yago Navajas González y Santiago López Laso. -La aplicacion tendra su base para las preguntas y las respuestas en Wikidata , la base de conocimiento editada en colaboracion. +La aplicación tendra su base para las preguntas y las respuestas en Wikidata , la base de conocimiento editada en colaboracion. === Requisitos Funcionales **** -* Los usuarios se deberan loggear en la pagina, esto servira para tener registro de unas serie de parametros, como puede ser las veces que se ha jugado. -* Se podran responder preguntas autogeneradas y ver si han acertado fallado asi como la respuesta correcta. -* Las preguntas deberan ser respondidas en un tiempo limite. -* Las preguntas seran seguiran la misma estructura: 1 pregunta correcta y 3 incorrectas, generadas automaticamente. -* Los usuarios prodran consultar datos sobre su cuentan, como pueden ser las veces que han jugado o el numero de preguntas que han acertadoo fallado. +* Los usuarios se deberan loggear en la página, esto servirá para tener registro de unas serie de parámetros, como puede ser las veces que se ha jugado. +* Se podrán responder preguntas autogeneradas y ver si han acertado fallado, así como la respuesta correcta. +* Las preguntas deberán ser respondidas en un tiempo límite. +* Las preguntas seguirán la misma estructura: 1 pregunta correcta y 3 incorrectas, generadas automáticamente. +* Los usuarios podrán consultar datos sobre su cuentas, como pueden ser las veces que han jugado o el número de preguntas que han acertado o fallado. **** @@ -26,10 +26,10 @@ La aplicacion tendra su base para las preguntas y las respuestas en Wikidata , l [options="header",cols="1,2,2"] |=== -|Prioridad | Objetivo | Descripcion -| 1 | Usabilidad | Todos los usuarios deben poder usar la aplicacion sin tener en cuenta sus limitaciones. -| 2 | Privacidad | Los datos sensibles de los usuarios deben estar restingidos al mismo usuario. -| 3 |Mantenibilidad | El código y documentación de la aplicación ha de estar conformado de tal forma que sea factible hacer cambios y ampliaciones en la aplicación. +| Prioridad | Objetivo | Descripción +| 1 | Usabilidad | Todos los usuarios deben poder usar la aplicación sin tener en cuenta sus limitaciones. +| 2 | Privacidad | Los datos sensibles de los usuarios deben estar restringidos al mismo usuario. +| 3 | Mantenibilidad | El código y documentación de la aplicación ha de estar conformado de tal forma que sea factible hacer cambios y ampliaciones en la aplicación. | 4 | Eficiciencia | Los tiempos entre operaciones han de ser asumibles. | 5 | Fiabilidad | Los datos usados en la aplicación deben ser los correctos. |=== @@ -44,6 +44,7 @@ La aplicacion tendra su base para las preguntas y las respuestas en Wikidata , l David Álvarez Díaz -> UO283196@uniovi.es + Zohaib Akhtar Kausar -> UO291060@uniovi.es + Sara Lamuño García -> UO283706@uniovi.es + -Santiago Lopez Laso -> UO277369@uniovi.es | Los estudiantes que llevarán a cabo el desarrollo de la aplicación. Seran los encargados de la arquitectura, la documentación y la codificación. -| Profesores | labra@uniovi.es | Supervisores de los avances y encargados de evaluar la aplicacion final y el desarrollo de la misma. +Santiago Lopez Laso -> UO277369@uniovi.es | Los estudiantes que llevarán a cabo el desarrollo de la aplicación. Serán los encargados de la arquitectura, la documentación y la codificación. +| Profesores | Jose Emilio Labra Gayo | Supervisores de los avances y encargados de evaluar la aplicacion final y el desarrollo de la misma. +| Usuario | Jugador de la aplicación | Personas que puedan interactuar tanto con el registro de usuarios como con el juego en sí y pueda completar correctamente una partida. |=== From f8074605bda1aab0c66f3c2c6fba019acd2bfe6c Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 21 Feb 2024 18:34:02 +0100 Subject: [PATCH 35/61] =?UTF-8?q?Cambio=20de=20t=C3=ADtulo=20y=20arreglos?= =?UTF-8?q?=20en=20index.adoc?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/index.adoc | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/docs/index.adoc b/docs/index.adoc index 468be5f..58bbabf 100644 --- a/docs/index.adoc +++ b/docs/index.adoc @@ -6,7 +6,7 @@ // configure EN settings for asciidoc include::src/config.adoc[] -= image:arc42-logo.png[arc42] Template += image:arc42-logo.png[arc42] Generador de preguntas :revnumber: 8.2 EN :revdate: January 2023 :revremark: (based upon AsciiDoc version) @@ -34,16 +34,6 @@ include::src/about-arc42.adoc[] // horizontal line *** -[role="arc42help"] -**** -[NOTE] -==== -This version of the template contains some help and explanations. -It is used for familiarization with arc42 and the understanding of the concepts. -For documentation of your own system you use better the _plain_ version. -==== -**** - // numbering from here on :numbered: From 8d52916dd5366142d5f697c2570a245cc2c007f2 Mon Sep 17 00:00:00 2001 From: Santiago <uo277369@uniovi.es> Date: Thu, 22 Feb 2024 01:41:06 +0100 Subject: [PATCH 36/61] Creada la interfaz de preguntas y definida (se puede cambiar) la api de questionservice --- api_interfaces/api_questionservice.txt | 13 +++ users/authservice/package-lock.json | 6 +- users/userservice/package-lock.json | 6 +- webapp/src/components/Login.js | 2 + webapp/src/components/game/Game.js | 100 +++++++++++++++++++++ webapp/src/components/game/example_data.js | 8 ++ 6 files changed, 129 insertions(+), 6 deletions(-) create mode 100644 api_interfaces/api_questionservice.txt create mode 100644 webapp/src/components/game/Game.js create mode 100644 webapp/src/components/game/example_data.js diff --git a/api_interfaces/api_questionservice.txt b/api_interfaces/api_questionservice.txt new file mode 100644 index 0000000..ad891f2 --- /dev/null +++ b/api_interfaces/api_questionservice.txt @@ -0,0 +1,13 @@ +petición HTTP GET getquestion +devuelve json -> {question: string, answers: answer[]} + +------------------------------------------- +answer: {answer: string, correct: boolean} + +EJEMPLO +const example_data = {question: 'pregunta ejemplo', answers: [ + {answer: 'respuesta correcta', correct: true}, + {answer: 'respuesta incorrecta1', correct: false}, + {answer: 'respuesta incorrecta2', correct: false}, + {answer: 'respuesta incorrecta3', correct: false} +]}; \ No newline at end of file diff --git a/users/authservice/package-lock.json b/users/authservice/package-lock.json index e0ceb0b..0716101 100644 --- a/users/authservice/package-lock.json +++ b/users/authservice/package-lock.json @@ -2788,9 +2788,9 @@ "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "devOptional": true }, "node_modules/ipaddr.js": { diff --git a/users/userservice/package-lock.json b/users/userservice/package-lock.json index f21b26c..5988507 100644 --- a/users/userservice/package-lock.json +++ b/users/userservice/package-lock.json @@ -2786,9 +2786,9 @@ "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==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.1.tgz", + "integrity": "sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==", "devOptional": true }, "node_modules/ipaddr.js": { diff --git a/webapp/src/components/Login.js b/webapp/src/components/Login.js index 0ad6268..35ce305 100644 --- a/webapp/src/components/Login.js +++ b/webapp/src/components/Login.js @@ -2,6 +2,7 @@ import React, { useState } from 'react'; import axios from 'axios'; import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; +import Game from './game/Game.js'; const Login = () => { const [username, setUsername] = useState(''); @@ -43,6 +44,7 @@ const Login = () => { <Typography component="p" variant="body1" sx={{ textAlign: 'center', marginTop: 2 }}> Your account was created on {new Date(createdAt).toLocaleDateString()}. </Typography> + <Game></Game> </div> ) : ( <div> diff --git a/webapp/src/components/game/Game.js b/webapp/src/components/game/Game.js new file mode 100644 index 0000000..18acaf4 --- /dev/null +++ b/webapp/src/components/game/Game.js @@ -0,0 +1,100 @@ +// Importa React, useState para manejar el estado, axios para hacer solicitudes HTTP, y componentes de Material UI para la interfaz. +import React, { useState } from 'react'; +import axios from 'axios'; +import { Container, Typography, Button, Box, Paper, Snackbar } from '@mui/material'; +import MuiAlert from '@mui/material/Alert'; +import exampleData from './example_data.js'; + +// Define el endpoint de la API, utilizando una variable de entorno o un valor predeterminado. +const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; + +const Game = () => { + + const [question, setQuestion] = useState(''); + const [answers, setAnswers] = useState([]); + const [snackbarOpen, setSnackbarOpen] = useState(false); + const [snackbarMessage, setSnackbarMessage] = useState(''); + const [snackbarSeverity, setSnackbarSeverity] = useState('success'); + const handleSnackbarClose = (event, reason) => { + if (reason === 'clickaway') { + return; + } + setSnackbarOpen(false); + }; + + const handleAnswerButtonClick = (correct) => { + if (correct) { + setSnackbarMessage('Respuesta correcta'); + setSnackbarSeverity('success'); + fetchQuestionAndAnswers(); + } else { + setSnackbarMessage('Respuesta incorrecta'); + setSnackbarSeverity('error'); + } + setSnackbarOpen(true); + }; + + // Función para llamar al questionservice y obtener la pregunta y las respuestas + const fetchQuestionAndAnswers = async () => { + try { + const response = await axios.get(`${apiEndpoint}/getquestion`); + // Almacena la pregunta y las respuestas en los estado. + setQuestion(response.data.question); + setAnswers(response.data.answers); + // setQuestion(exampleData.question); + // setAnswers(exampleData.answers); + } catch (error) { + // Manejo básico de errores: imprime el error en la consola. + console.error('Error fetching question and answers', error); + } + }; + + // Renderiza el componente. + return ( + <Container component="main" maxWidth="sm" sx={{ mt: 4 }}> + <Typography component="h1" variant="h5" gutterBottom> + Generate Question and Answers + </Typography> + <Box sx={{ mb: 2 }}> + <Button variant="contained" color="primary" onClick={fetchQuestionAndAnswers}> + Generate Question + </Button> + </Box> + {/* Muestra la pregunta y las respuesta si existen */} + {question && ( + <Paper elevation={3} sx={{ p: 2, mb: 2 }}> + <Typography variant="subtitle1">Question:</Typography> + <Typography variant="body1">{question}</Typography> + </Paper> + )} + {answers && answers.map((answer, index) => ( + <div key={index} style={{ marginTop: '10px' }}> + <Button + variant="contained" + color="primary" + onClick={() => handleAnswerButtonClick(answer.correct)} + > + {answer.answer} + </Button> + </div> + ))} + <Snackbar + open={snackbarOpen} + autoHideDuration={3000} + onClose={handleSnackbarClose} + > + <MuiAlert + elevation={6} + variant="filled" + severity={snackbarSeverity} + onClose={handleSnackbarClose} + > + {snackbarMessage} + </MuiAlert> + </Snackbar> + </Container> + ); +}; + +// Exporta el componente para su uso en otras partes de la aplicación. +export default Game; \ No newline at end of file diff --git a/webapp/src/components/game/example_data.js b/webapp/src/components/game/example_data.js new file mode 100644 index 0000000..4b5e3ef --- /dev/null +++ b/webapp/src/components/game/example_data.js @@ -0,0 +1,8 @@ +const example_data = {question: 'pregunta ejemplo', answers: [ + {answer: 'respuesta correcta', correct: true}, + {answer: 'respuesta incorrecta1', correct: false}, + {answer: 'respuesta incorrecta2', correct: false}, + {answer: 'respuesta incorrecta3', correct: false} +]}; + +export default example_data; \ No newline at end of file From d30cee3c291584fb26c95e96b2c48fd4fc68989b Mon Sep 17 00:00:00 2001 From: bidof <uo283196@uniovi.es> Date: Fri, 23 Feb 2024 23:19:04 +0100 Subject: [PATCH 37/61] arreglar el release.yml --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index efe44ac..8bece02 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -142,5 +142,5 @@ jobs: command: | wget https://raw.githubusercontent.com/arquisoft/wiq_es04c/master/docker-compose.yml -O docker-compose.yml wget https://raw.githubusercontent.com/arquisoft/wiq_es04c/master/.env -O .env - docker compose down + docker compose --profile prod down docker compose --profile prod up -d From 7e82bd2247e43ee4338fafcc93db3dc020af3b99 Mon Sep 17 00:00:00 2001 From: david alvarez <99325990+bidof@users.noreply.github.com> Date: Sat, 24 Feb 2024 01:46:08 +0100 Subject: [PATCH 38/61] Update release.yml --- .github/workflows/release.yml | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8bece02..9ddf038 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,8 +1,10 @@ name: Deploy on release on: - release: - types: [published] + push: + branches: + -master + -releases jobs: unit-tests: @@ -51,7 +53,9 @@ jobs: - name: Publish to Registry uses: elgohr/Publish-Docker-Github-Action@v5 env: - API_URI: http://${{ secrets.DEPLOY_HOST }}:8000 + API_URI: http://${{ secrets.DEPLOY_HOST || 'localhost' }}:8000 + + with: name: arquisoft/wiq_es04c/webapp username: ${{ github.actor }} @@ -109,7 +113,7 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io - workdir: gatewayservice + workdir: ./gatewayservice docker-push-questionservice: name: Push question service Docker Image to GitHub Packages runs-on: ubuntu-latest @@ -126,7 +130,7 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io - workdir: questionservice + workdir: ./questionservice deploy: name: Deploy over SSH @@ -140,7 +144,8 @@ jobs: user: ${{ secrets.DEPLOY_USER }} key: ${{ secrets.DEPLOY_KEY }} command: | - wget https://raw.githubusercontent.com/arquisoft/wiq_es04c/master/docker-compose.yml -O docker-compose.yml - wget https://raw.githubusercontent.com/arquisoft/wiq_es04c/master/.env -O .env + wget https://raw.githubusercontent.com/arquisoft/wiq_es04c/releases/docker-compose.yml -O docker-compose.yml + wget https://raw.githubusercontent.com/arquisoft/wiq_es04c/releases/.env -O .env + git clone -b releases https://github.com/Arquisoft/wiq_es04c.git docker compose --profile prod down docker compose --profile prod up -d From 47bc9746560add4bcaa5d21fc111fad50e6cbba8 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Sun, 25 Feb 2024 17:26:16 +0100 Subject: [PATCH 39/61] Quitados ejemplos y arreglado diagrama plantuml --- docs/src/06_runtime_view.adoc | 95 ++++++++--------------------------- 1 file changed, 22 insertions(+), 73 deletions(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index fb80e36..14fce42 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -4,67 +4,14 @@ ifndef::imagesdir[:imagesdir: ../images] == Runtime View -[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 -* ... - - -.Further Information - -See https://docs.arc42.org/section-6/[Runtime View] in the arc42 documentation. - -**** - === <Runtime Scenario 1> - -* _<insert runtime diagram or textual description of the scenario>_ -* _<insert description of the notable aspects of the interactions between the -building block instances depicted in this diagram.>_ - -It is possible to use a sequence diagram: - -[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 ----- - [plantuml,"Sequence diagram",png] -Diagrama de secuencia con plantuml (se contempla sólo el uso correcto de la aplicación) ---- actor usuario actor system -database bbdd as "bbdd" actor juego +database bbdd as "bbdd" usuario -> system: inicio sesión system --> usuario: pedir nombre/contraseña usuario -> system: dar nombre/contraseña @@ -80,30 +27,32 @@ system -> juego: verificar respuesta juego --> system: respuesta correcta system --> usuario: correcta system -> juego: generar siguiente pregunta/respuestas - ---- +Diagrama de secuencia con plantuml (se contempla sólo el uso correcto de la aplicación) + + === <Runtime Scenario 2> -------------------------------------------------------------------------------------------------------------------------------------- -| -> Diagrama de secuencia | -| -> Descripción: diagrama de los usos básicos en la aplicación, como inicio de sesión, empezar a jugar y contestar las preguntas. | -| -> Aspectos notables: | -| - El usuario tiene que estar autentificado en la aplicación para poder entrar al juego. | -| - Los usuarios estarán en una base de datos para recoger los datos de manera más sencilla. | -| - En el diagrama se pone la opción de respuesta correcta, pero si fuera incorrecta también se seguiría jugando. | -------------------------------------------------------------------------------------------------------------------------------------- + + -> Diagrama de secuencia + -> Descripción: diagrama de los usos básicos en la aplicación, como inicio de sesión, empezar a jugar y contestar las preguntas. + -> Aspectos notables: + - El usuario tiene que estar autentificado en la aplicación para poder entrar al juego. + - Los usuarios estarán en una base de datos para recoger los datos de manera más sencilla. + - En el diagrama se pone la opción de respuesta correcta, pero si fuera incorrecta también se seguiría jugando. + image::Digrama de secuencia Juego de preguntas.jpg["Diagrama de secuencia"] === <Runtime Scenario 3> --------------------------------------------------------------------------------------------------------------------------------------- -| -> Diagrama de casos de uso | -| -> Descripción: diagrama básico de los distintos casos de uso que hay en el proyecto | -| -> Aspectos notables: | -| - El caso de uso de iniciar sesión del usuario está relacionado con el caso de uso de autentificar sesión del sistema, | -| - ya que para que el usuario pueda iniciar sesión debe de estar autentificado. | -| - Lo mismo ocurre con el caso de uso de contestar preguntas del usuario con el caso de uso de verificar respuestas del sistema, | -| - ya que para que el usuario pueda contestar preguntas, el sistema primero debe de verificar si dicha respuesta es correcta | -| - o no para pasar a la siguiente pregunta. | --------------------------------------------------------------------------------------------------------------------------------------- + + -> Diagrama de casos de uso + -> Descripción: diagrama básico de los distintos casos de uso que hay en el proyecto + -> Aspectos notables: + - El caso de uso de iniciar sesión del usuario está relacionado con el caso de uso de autentificar sesión del sistema, + - ya que para que el usuario pueda iniciar sesión debe de estar autentificado. + - Lo mismo ocurre con el caso de uso de contestar preguntas del usuario con el caso de uso de verificar respuestas del sistema, + - ya que para que el usuario pueda contestar preguntas, el sistema primero debe de verificar si dicha respuesta es correcta + - o no para pasar a la siguiente pregunta. + image::Diagrama de casos de uso para el juego de palabras.jpg["Diagrama de caso de uso"] From 68fd70ad91d2524a61add9debda36aa5c3e81442 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Sun, 25 Feb 2024 17:26:50 +0100 Subject: [PATCH 40/61] =?UTF-8?q?Actualizaci=C3=B3n=20del=20diagrama=20de?= =?UTF-8?q?=20casos=20de=20uso?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...casos de uso para el juego de palabras.jpg | Bin 19358 -> 20559 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/images/Diagrama de casos de uso para el juego de palabras.jpg b/docs/images/Diagrama de casos de uso para el juego de palabras.jpg index d002bc24a16347c9ec25ff4361535c83c60c29be..0b340ad9fa76c2c0c91e7bd761706cc0facdb9a7 100644 GIT binary patch literal 20559 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 literal 19358 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 From cbae98979c766497a14c180851e76b516947d7d9 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Sun, 25 Feb 2024 17:28:47 +0100 Subject: [PATCH 41/61] Quitado ejemplos de documento12.adoc --- docs/src/12_glossary.adoc | 26 -------------------------- 1 file changed, 26 deletions(-) diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index e1c8150..a412537 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -3,32 +3,6 @@ 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 <Term> and <Definition>. - -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"] |=== From 7f9a8eed73c85a222925ec38ef8c780596249d1f Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Sun, 25 Feb 2024 17:34:21 +0100 Subject: [PATCH 42/61] Arregladas tablas y quitados ejemplos en la documentacion04 --- docs/src/04_solution_strategy.adoc | 38 +++++++----------------------- 1 file changed, 9 insertions(+), 29 deletions(-) diff --git a/docs/src/04_solution_strategy.adoc b/docs/src/04_solution_strategy.adoc index 054548c..7362990 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -3,29 +3,6 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-solution-strategy]] == Solution Strategy - -[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. - -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. -**** - -**** Decisiones tecnológicas Hemos decidido realizar la parte de Front-End con React y la parte de Back-End con la estructura de los microservicios. @@ -71,15 +48,18 @@ Decisiones organizativas En la primera semana nos hemos dividido en dos equipos con el objetivo de tocar todas las partes del proyecto. La estructura de los equipos es la siguiente: ----- --> Equipo documentación - Sara Lamuño García -> UO283706@uniovi.es +[options="header",cols="1,2"] +|=== +|Equipo +|Miembros +|Equipo documentación +| Sara Lamuño García -> UO283706@uniovi.es Yago Navajas Gonzalez -> UO287746@uniovi.es --> Equipo desarrollo del proyecto - David Álvarez Díaz -> UO283196@uniovi.es +|Equipo desarrollo del proyecto +| David Álvarez Díaz -> UO283196@uniovi.es Zohaib Akhtar Kausar -> UO291060@uniovi.es Santiago Lopez Laso -> UO277369@uniovi.es ----- +|=== La realización de las actas de las reuniones diarias se le ha asignado la tarea a Sara Lamuño García. From ff12db979f29bc53c59e06ba753c706178f3b48a Mon Sep 17 00:00:00 2001 From: Zohaib Akhtar Kausar <zohaib0614@gmail.com> Date: Mon, 26 Feb 2024 21:08:38 +0100 Subject: [PATCH 43/61] =?UTF-8?q?Refactorizaci=C3=B3n=20de=20question-serv?= =?UTF-8?q?ice.js=20y=20Modularizaci=C3=B3n=20del=20C=C3=B3digo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gatewayservice/gateway-service.js | 15 +++++++ questionservice/question-service.js | 29 ++++++++++++++ questionservice/questionTemplates.js | 33 ++++++++++++++++ questionservice/wikiUtils/wikiCall.js | 22 +++++++++++ questionservice/wikiUtils/wikiQuery.js | 55 ++++++++++++++++++++++++++ 5 files changed, 154 insertions(+) create mode 100644 questionservice/question-service.js create mode 100644 questionservice/questionTemplates.js create mode 100644 questionservice/wikiUtils/wikiCall.js create mode 100644 questionservice/wikiUtils/wikiQuery.js diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 88b84c8..5df3271 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -8,6 +8,7 @@ const port = 8000; const authServiceUrl = process.env.AUTH_SERVICE_URL || 'http://localhost:8002'; const userServiceUrl = process.env.USER_SERVICE_URL || 'http://localhost:8001'; +const generateServiceURL = process.env.GENERATE_SERVICE_URL || 'http://localhost:8003'; app.use(cors()); app.use(express.json()); @@ -41,6 +42,20 @@ app.post('/adduser', async (req, res) => { } }); +app.post('/getquestion', async(req,res)=> { + try{ + // Redirige la solicitud al servicio de generación de preguntas sin enviar un cuerpo de solicitud. + const response = await axios.post(`${generateServiceURL}/getquestion`); + + // Devuelve la respuesta del servicio de generación de preguntas al cliente original. + res.json(response.data); + + } catch(error) { + res.status(error.response.status).json({ error: error.response.data.error }); + } +}); + + // Start the gateway service const server = app.listen(port, () => { console.log(`Gateway Service listening at http://localhost:${port}`); diff --git a/questionservice/question-service.js b/questionservice/question-service.js new file mode 100644 index 0000000..fd98a73 --- /dev/null +++ b/questionservice/question-service.js @@ -0,0 +1,29 @@ +const express = require('express'); +const app = express(); +const port = 8003; + +// Importamos la función desde questionTemplates.js +const getQuestionTemplate = require('./questionTemplates'); + +app.use(express.json()); + +app.post('/getquestion', async (req, res) => { + try { + const questionAndAnswer = await getQuestionTemplate(); // Obtenemos el json de pregunta y sus respuestas + + if (questionAndAnswer) { + res.json(questionAndAnswer); //Devolvemos a la gateway el json + } else { + // Si no se obtuvo una pregunta por alguna razón, enviamos un error genérico + res.status(500).json({ error: "Could not get a question and answers" }); + } + } catch (error) { + // En caso de cualquier error en el proceso, lo capturamos y enviamos un mensaje de error + console.error("Error generating question:", error); + res.status(500).json({ error: "Internal server error when generating the question" }); + } +}); + +app.listen(port, () => { + console.log(`Server listening on http://localhost:${port}`); +}); diff --git a/questionservice/questionTemplates.js b/questionservice/questionTemplates.js new file mode 100644 index 0000000..27e1e17 --- /dev/null +++ b/questionservice/questionTemplates.js @@ -0,0 +1,33 @@ +const wikiQuery = require("./wikiUtils/wikiQuery") + +const templates = [ + async () => { + const country = await wikiQuery.getRandomCountryAndCity(); + //Obtenemos los fakeCities + const fakeCities = await wikiQuery.getFakeCity(country.capital); + const correctAnswer = { answer: country.capital, correct: true }; + const fakeAnswers = fakeCities.map(city => ({ answer: city, correct: false })); + const answers = [correctAnswer, ...fakeAnswers]; + + // Mezclamos las respuestas para que la posición de la correcta sea aleatoria + const shuffledAnswers = shuffleArray(answers); + + return { + question: `¿Cuál es la capital de ${country.name}?`, + answers: shuffledAnswers + }; + }, + // Aquí podemos añadir más templates +]; + +// Función para mezclar las respuestas +function shuffleArray(array) { + for (let i = array.length - 1; i > 0; i--) { + const j = Math.floor(Math.random() * (i + 1)); + [array[i], array[j]] = [array[j], array[i]]; + } + return array; +} + +// Seleccionamos aleatoriamente un template y lo ejecutamos +module.exports = () => templates[Math.floor(Math.random()*templates.length)](); diff --git a/questionservice/wikiUtils/wikiCall.js b/questionservice/wikiUtils/wikiCall.js new file mode 100644 index 0000000..15c5d45 --- /dev/null +++ b/questionservice/wikiUtils/wikiCall.js @@ -0,0 +1,22 @@ +const fetch = require('node-fetch'); + +const ENDPOINT_URL = 'https://query.wikidata.org/sparql'; + +async function wikiCall(sparqlQuery) { + const url = ENDPOINT_URL + '?query=' + encodeURIComponent(sparqlQuery); + const headers = { 'Accept': 'application/sparql-results+json' }; + + try { + const response = await fetch(url, { headers }); + if (!response.ok) { + throw new Error(`HTTP error! status: ${response.status}`); + } + const data = await response.json(); + return data.results.bindings; + } catch (error) { + console.error(`Could not fetch data from Wikidata: ${error}`); + return []; + } +} + +module.exports = wikiCall; diff --git a/questionservice/wikiUtils/wikiQuery.js b/questionservice/wikiUtils/wikiQuery.js new file mode 100644 index 0000000..99ff162 --- /dev/null +++ b/questionservice/wikiUtils/wikiQuery.js @@ -0,0 +1,55 @@ +const wikiCall = require("./wikiCall"); + +//Selecionar un resultado de las consultas aleatorio +const randomElement = (items) => items[Math.floor(Math.random() * items.length)]; + +class wikiQuery { + + static async getRandomCountryAndCity() { + const query = ` + SELECT ?country ?countryLabel ?capitalLabel WHERE { + ?country wdt:P31 wd:Q6256; # Tipo de entidad: País + wdt:P36 ?capital. # Propiedad: Tiene por capital + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + LIMIT 50`; + + const results = randomElement(await wikiCall(query)); + + return { + name: results['countryLabel'].value, + capital: results['capitalLabel'].value + }; + } + + static async getRandomCity() { + const query = ` + SELECT ?city ?cityLabel WHERE { + ?city wdt:P31 wd:Q515; # Tipo de entidad: Ciudad + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + LIMIT 50`; + + + const results = randomElement(await wikiCall(query)); + + return results['cityLabel'].value; + + } + static async getFakeCity(capital) { + let Fakecitys = []; + + while(Fakecitys.length < 3) { + let randomCity = await this.getRandomCity(); + if(randomCity !== capital && !Fakecitys.includes(randomCity)) { + Fakecitys.push(randomCity); + } + } + + return Fakecitys; + } + + +} + +module.exports = wikiQuery \ No newline at end of file From 3e84095cfb20481c75acb0ff189f9bc7b0efc4b2 Mon Sep 17 00:00:00 2001 From: Santiago <uo277369@uniovi.es> Date: Tue, 27 Feb 2024 11:09:06 +0100 Subject: [PATCH 44/61] =?UTF-8?q?Convertido=20questionservice=20en=20micro?= =?UTF-8?q?servicio.=20S=C3=B3lo=20comprobe=20que=20funcionara=20en=20loca?= =?UTF-8?q?l=20con=20npm?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docker-compose.yml | 10 + gatewayservice/gateway-service.js | 2 +- questionservice/.dockerignore | 2 + questionservice/Dockerfile | 20 + questionservice/package-lock.json | 5600 +++++++++++++++++++++++++++++ questionservice/package.json | 32 + 6 files changed, 5665 insertions(+), 1 deletion(-) create mode 100644 questionservice/.dockerignore create mode 100644 questionservice/Dockerfile create mode 100644 questionservice/package-lock.json create mode 100644 questionservice/package.json diff --git a/docker-compose.yml b/docker-compose.yml index c105ed5..8ea4e22 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -53,9 +53,19 @@ services: networks: - mynetwork environment: + GENERATE_SERVICE_URL: http://questionservice:8003 AUTH_SERVICE_URL: http://authservice:8002 USER_SERVICE_URL: http://userservice:8001 + + questionservice: + container_name: questionservice-${teamname:-defaultASW} + build: ./questionservice + ports: + - "8003:8003" + networks: + - mynetwork + webapp: container_name: webapp-${teamname:-defaultASW} image: ghcr.io/arquisoft/wiq_0/webapp:latest diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 5df3271..e781a2a 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -42,7 +42,7 @@ app.post('/adduser', async (req, res) => { } }); -app.post('/getquestion', async(req,res)=> { +app.get('/getquestion', async(req,res)=> { try{ // Redirige la solicitud al servicio de generación de preguntas sin enviar un cuerpo de solicitud. const response = await axios.post(`${generateServiceURL}/getquestion`); diff --git a/questionservice/.dockerignore b/questionservice/.dockerignore new file mode 100644 index 0000000..3091757 --- /dev/null +++ b/questionservice/.dockerignore @@ -0,0 +1,2 @@ +node_modules +coverage \ No newline at end of file diff --git a/questionservice/Dockerfile b/questionservice/Dockerfile new file mode 100644 index 0000000..ae8f3e4 --- /dev/null +++ b/questionservice/Dockerfile @@ -0,0 +1,20 @@ +# Use an official Node.js runtime as a parent image +FROM node:20 + +# Set the working directory in the container +WORKDIR /usr/src/questionservice + +# Copy package.json and package-lock.json to the working directory +COPY package*.json ./ + +# Install app dependencies +RUN npm install + +# Copy the app source code to the working directory +COPY . . + +# Expose the port the app runs on +EXPOSE 8003 + +# Define the command to run your app +CMD ["node", "question-service.js"] diff --git a/questionservice/package-lock.json b/questionservice/package-lock.json new file mode 100644 index 0000000..ccd0f3d --- /dev/null +++ b/questionservice/package-lock.json @@ -0,0 +1,5600 @@ +{ + "name": "questionservice", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "questionservice", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "express": "^4.18.2", + "jsonwebtoken": "^9.0.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.9", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.9.tgz", + "integrity": "sha512-5q0175NOjddqpvvzU+kDiSOAk4PfdO6FvwCWoQ6RO7rTzEe8vlo+4HVfcnAREhD4npMs0e9uZypjTwzZPCf/cw==", + "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.9", + "@babel/parser": "^7.23.9", + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9", + "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/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-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.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", + "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.23.9", + "@babel/traverse": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "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.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "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.23.9", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", + "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.23.9", + "@babel/types": "^7.23.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", + "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "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.9", + "@babel/types": "^7.23.9", + "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.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "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/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.4", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.4.tgz", + "integrity": "sha512-Oud2QPM5dHviZNn4y/WhhYKSXksv+1xLEIsNrAbGcFzUN3ubqWRFT5gwPchNc5NuzILOU4tPBDTZ4VwhL8Y7cw==", + "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.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "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.23", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.23.tgz", + "integrity": "sha512-9/4foRoUKp8s96tSkh8DlAAc5A0Ty8vLXld+l9gjKKY6ckwI8G15f0hskGmuLZu78ZlGa1vtsfOa+lnB4vG6Jg==", + "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.4", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.4.tgz", + "integrity": "sha512-8zJ8N1x51xo9hwPh6AWnKdLGEC5N3lDa6kms1YHmFBoRhTpJR6HG8wWk0td1MVCu9cD4YBrvjZEtd5Obw0Fbnw==", + "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.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "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.11.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.20.tgz", + "integrity": "sha512-7/rR21OS+fq8IyHTgtLkDK949uzsa6n8BkziAKtPVpugIkO6D+/ooXMvzXxDnZrmtXVfjb1bKQafYpb8s89LOg==", + "dev": true, + "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==", + "dev": true, + "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.1", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.1.tgz", + "integrity": "sha512-WfoBo4E/TbCX1G95XTjbWTE3X2XLG0m1Xbv2cwOtuPdyH9CZvnaA5nCt1ucjaKEgW2A5IF71hxrRhr83Je5xjA==", + "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.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==", + "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/bare-events": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.0.tgz", + "integrity": "sha512-Yyyqff4PIFfSuthCZqLlPISTWHmnQxoPuAvkmgzsJEmG3CesdIv6Xweayl0JkCZJSB2yYIdJyEz97tpxNhgjbg==", + "dev": true, + "optional": true + }, + "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.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", + "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.30001587", + "electron-to-chromium": "^1.4.668", + "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": "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/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-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "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.6", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", + "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "set-function-length": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + }, + "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": "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/caniuse-lite": { + "version": "1.0.30001591", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", + "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==", + "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.2", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", + "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "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/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "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.682", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.682.tgz", + "integrity": "sha512-oCglfs8yYKs9RQjJFOHonSnhikPK3y+0SvSYc/YpYJV//6rqc0/hbwd0c7vgK4vrl6y2gJAwjkhkSGWK+z4KRA==", + "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/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "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-minipass/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/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.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "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-address": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", + "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", + "devOptional": true, + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", + "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.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.2.tgz", + "integrity": "sha512-1WUsZ9R1lA0HtBSohTkm39WTPlNKSJ5iFk7UwqXkBLoHQT+hfqPsfsTDVuZdKGaBwn7din9bS7SsnoAr943hvw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "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.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", + "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-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-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-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-validate/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/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/jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", + "devOptional": true + }, + "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/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/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/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "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/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "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/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/minizlib/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/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": "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-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==", + "dev": true, + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongodb-memory-server": { + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-9.1.6.tgz", + "integrity": "sha512-gzcpgGYlPhuKmria37W+bvYy6W+OkX2UVG7MoP41OWFvQv2Hn7A+fLXkV+lsMmhog1lMQprdV6AR+gixgheLaw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "mongodb-memory-server-core": "9.1.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core": { + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-9.1.6.tgz", + "integrity": "sha512-3H/dq5II+XcSbK80hicMw4zFlDxcpjt4oWJq76RlOVuLoaf3AFqVheR6Vqx9ymlIqER4Jni58FMCIIRbesia1A==", + "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/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/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.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", + "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "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.2.0", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.2.0.tgz", + "integrity": "sha512-la93n6zCYRbPS+c5N9oTDAktvREy5OT9OCljp1Tah0y3+p8UPMTAoabWaLZMdzYruOtF9/9GRf6MasaZjiZP1A==", + "dependencies": { + "bson": "^6.2.0", + "kareem": "2.5.1", + "mongodb": "6.3.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/@types/whatwg-url": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.4.tgz", + "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/mongoose/node_modules/bson": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.3.0.tgz", + "integrity": "sha512-balJfqwwTBddxfnidJZagCBPP/f48zj9Sdp3OJswREOgsJzHiQSaOIAtApSgDQFYgHqAvFkp53AFSqjMDZoTFw==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/mongoose/node_modules/mongodb": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.3.0.tgz", + "integrity": "sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.2.0", + "mongodb-connection-string-url": "^3.0.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/mongoose/node_modules/mongodb-connection-string-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz", + "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "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/mongoose/node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/mongoose/node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "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": "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/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-locate/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-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.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/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/semver/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/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.2.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.1.tgz", + "integrity": "sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==", + "dependencies": { + "define-data-property": "^1.1.2", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "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.5", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", + "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "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.8.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz", + "integrity": "sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==", + "devOptional": true, + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.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.16.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.16.1.tgz", + "integrity": "sha512-m9QYj6WygWyWa3H1YY69amr4nVgy61xfjys7xO7kviL5rfIEc2naf+ewFiOA+aEJD7y0JO3h2GoiUv4TDwEGzQ==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, + "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.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/tar/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/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==", + "dev": true, + "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==", + "dev": true + }, + "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==", + "dev": true, + "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": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "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/questionservice/package.json b/questionservice/package.json new file mode 100644 index 0000000..ad9e8d9 --- /dev/null +++ b/questionservice/package.json @@ -0,0 +1,32 @@ +{ + "name": "questionservice", + "version": "1.0.0", + "description": "Microservicio de generar preguntas", + "main": "service.js", + "scripts": { + "start": "node question-Service.js", + "test": "jest" +}, +"repository": { + "type": "git", + "url": "git+https://github.com/arquisoft/wiq_0.git" +}, +"author": "", +"license": "ISC", +"bugs": { + "url": "https://github.com/arquisoft/wiq_0/issues" +}, +"homepage": "https://github.com/arquisoft/wiq_0#readme", +"dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "express": "^4.18.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.0.4" +}, +"devDependencies": { + "jest": "^29.7.0", + "mongodb-memory-server": "^9.1.5", + "supertest": "^6.3.4" +} +} From 5d85914471b89a817226495b4cbf88a610d6974a Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:17:10 +0100 Subject: [PATCH 45/61] =?UTF-8?q?A=C3=B1adido=20diagrama=20de=20clases?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Diagrama de clases juego de preguntas.jpg | Bin 0 -> 14101 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 docs/images/Diagrama de clases juego de preguntas.jpg diff --git a/docs/images/Diagrama de clases juego de preguntas.jpg b/docs/images/Diagrama de clases juego de preguntas.jpg new file mode 100644 index 0000000000000000000000000000000000000000..407a109ad23d08291879f348fcea473961b90611 GIT binary patch literal 14101 zcmeHubyQqWw(h|pIKe%*yE{qn5G1$<x5nKAL4r#H!Aa2I?g=Dl<L>SrJZSgr-^^X_ zO_;eebLYx>f4sx0Ucf2pY^z=0xAy@$16=`d6lE1;0XTR7fP;Mj(0Sk)fQpQaf{cWU zf`WpEhWZEt9}@!|9fJh#F*ZI0DHSCJDLFYc9S0*d4I3>vIg=nW8y7bpA0HK?u(%M9 z7zZyO&mW7xp`oE+pkokYViNN_A%DX2pT3~&04^%957&kOM+3m)!Xe<oK|28|n4Cy( zf4YEwzu@2z5Rs5kP|+Tt!zR?>0Pt`K2=IsqNJxl?u-X2w`v4*?65bPTY2?RhuTf~6 z@p;}Pd_tvtTJ@bkee{@)*VH8#?GYgnF$pO>10xeN3m?CLppdZ0v*$9ha`Fm_uQW8Z zv~_g#%*-t;t*mWqUESP0JiWYqLf(dkg-5)LOiX(JAvxt^YTD=Ay!?W~qA$hOHMMp1 z4UJ9BKRP<Qx_f%TePiPjlT*_(vvaF!>l>R}+dI2^C#PrU7ni@Tu5bR(3l2c|vs$pv zKP&b?FI<>j@Q8>Ah$w&P1qbg58wj|FNKd$t@ubyIUOPXg;dz6K|1{xK)ps;nUiD)F zQ<u?4gmiqX^e2C)_9xB$ImLqiCC&biV*gjKIRFCz4(2=rTtE`I5Tc%R&-66bJfX}r zL;A3%-+@%B)%7&p+MF)+i6x_3%<@=y;1BWQz>)3pz~yvKh+J;R@+tX=)qSWL6c}UG z+hIb;h5~PWHK4$!VFM`8CSZIQCwE6XS9p)*vweSE4FxuQc9?RoB=tk@gmZ^WY?nl* z*$+(Sx0EjJ<mQ`#V+m)HzzA<-@;LoVZAFwDVlR5Wjr	bzRy?Z(c_=2@A{!BZxhY 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 literal 0 HcmV?d00001 From 3c993568b8789db14e2651ba5d564c3690e4a4fa Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:23:51 +0100 Subject: [PATCH 46/61] Arreglado el documento08.adoc --- docs/src/08_concepts.adoc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/src/08_concepts.adoc b/docs/src/08_concepts.adoc index 23e724c..b4a6b50 100644 --- a/docs/src/08_concepts.adoc +++ b/docs/src/08_concepts.adoc @@ -2,18 +2,18 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-concepts]] == Conceptos Transversales -Estos conceptos todavia no han sido aprobados ni implemenmtados pero dan una idea general al proyecto. +Estos conceptos todavía no han sido aprobados ni implementados, pero dan una idea general del proyecto. === Modelo de Dominio -Esta es una primera version del modelo del dominio muy simple para hacerse una idea como funcionara la aplicacion. +Esta es una primera versión del modelo de dominio muy simple para hacerse una idea como funcionará la aplicación. +image::Diagrama de clases juego de preguntas.jpg["Modelo de dominio simple provisional"] === Experiencia de Usuario -El usuario sera capaz de interactura con una aplicacion web donde se podra registrar y jugar al juego de manera sencilla. +El usuario será capaz de interactuar con una aplicación web, donde se podrá registrar y jugar al juego de manera sencilla. -image::08_diagrama_modelo_dominio.png["Modelo de dominio simple provisional"] === Seguridad @@ -29,4 +29,4 @@ _<explanation>_ === Operaciones -_<explanation>_ \ No newline at end of file +_<explanation>_ From b942e0fdb5de9f8234e3da4e7ca8361994b58b93 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:34:56 +0100 Subject: [PATCH 47/61] =?UTF-8?q?Mejorado=20estilo=20documentaci=C3=B3n=20?= =?UTF-8?q?y=20correcci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/01_introduction_and_goals.adoc | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index 77d1c1d..01ce2c8 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -1,20 +1,20 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-introduction-and-goals]] -== Introducción y Ojetivos (wiq_es04c) +== Introducción y Objetivos (wiq_es04c) 🎇 -El proyecto de wiq_es04c es un proyecto desarrollado en la asignatura Arquitectura del Software. Consiste en la creacion de una aplicacion web al estilo "Saber y Ganar". Es decir, es un juego de preguntas de cultura general. +El proyecto de wiq_es04c es un proyecto desarrollado en la asignatura Arquitectura del Software. Consiste en la creación de una aplicación web al estilo "Saber y Ganar". Es decir, es un juego de preguntas de cultura general. Los desarrolladores de la aplicacion son por David Álvarez Díaz, Zohaib Akhtar Kausar, Sara Lamuño García, Yago Navajas González y Santiago López Laso. -La aplicación tendra su base para las preguntas y las respuestas en Wikidata , la base de conocimiento editada en colaboracion. +La aplicación tendrá su base para las preguntas y las respuestas en Wikidata, la base de conocimiento editada en colaboración. -=== Requisitos Funcionales +=== Requisitos Funcionales 🛠️ **** -* Los usuarios se deberan loggear en la página, esto servirá para tener registro de unas serie de parámetros, como puede ser las veces que se ha jugado. -* Se podrán responder preguntas autogeneradas y ver si han acertado fallado, así como la respuesta correcta. +* Los usuarios se deberán loggearse en la página; esto servirá para tener registro de una serie de parámetros, como puede ser las veces que se ha jugado. +* Se podrán responder preguntas autogeneradas y se verá si han acertado o fallado, así como la respuesta correcta. * Las preguntas deberán ser respondidas en un tiempo límite. * Las preguntas seguirán la misma estructura: 1 pregunta correcta y 3 incorrectas, generadas automáticamente. * Los usuarios podrán consultar datos sobre su cuentas, como pueden ser las veces que han jugado o el número de preguntas que han acertado o fallado. @@ -22,7 +22,7 @@ La aplicación tendra su base para las preguntas y las respuestas en Wikidata , **** -=== Atributos de Calidad +=== Atributos de Calidad 👑 [options="header",cols="1,2,2"] |=== @@ -35,7 +35,7 @@ La aplicación tendra su base para las preguntas y las respuestas en Wikidata , |=== -=== Stakeholders +=== Stakeholders 👨👩👦👦 [options="header",cols="1,2,2"] |=== @@ -45,6 +45,6 @@ David Álvarez Díaz -> UO283196@uniovi.es + Zohaib Akhtar Kausar -> UO291060@uniovi.es + Sara Lamuño García -> UO283706@uniovi.es + Santiago Lopez Laso -> UO277369@uniovi.es | Los estudiantes que llevarán a cabo el desarrollo de la aplicación. Serán los encargados de la arquitectura, la documentación y la codificación. -| Profesores | Jose Emilio Labra Gayo | Supervisores de los avances y encargados de evaluar la aplicacion final y el desarrollo de la misma. +| Profesores | Jose Emilio Labra Gayo | Supervisores de los avances y encargados de evaluar la aplicación final y el desarrollo de la misma. | Usuario | Jugador de la aplicación | Personas que puedan interactuar tanto con el registro de usuarios como con el juego en sí y pueda completar correctamente una partida. |=== From fdff4d2a9cb0edf6feebcdff9e8ab21e60b41b44 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:36:43 +0100 Subject: [PATCH 48/61] =?UTF-8?q?Mejorado=20dise=C3=B1o=20documentaci?= =?UTF-8?q?=C3=B3n=2002?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/02_architecture_constraints.adoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/src/02_architecture_constraints.adoc b/docs/src/02_architecture_constraints.adoc index 4c16bef..0cd13f5 100644 --- a/docs/src/02_architecture_constraints.adoc +++ b/docs/src/02_architecture_constraints.adoc @@ -1,12 +1,12 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-architecture-constraints]] -== Restricciones de arquitectura +== Restricciones de arquitectura ⛔ .Restricciones [options="header",cols="1,2"] |=== |Restricción|Descripción -|Wikidata|Se usará la API de WIkidata para generar las preguntas automáticamente. +|Wikidata|Se usará la API de Wikidata para generar las preguntas automáticamente. |Git|Control de versiones del proyecto. |GitHub|Portal donde se guardará el código fuente del proyecto. -|=== \ No newline at end of file +|=== From 69cdca4bd5af5773a9c7d3df52450d411873038f Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:40:06 +0100 Subject: [PATCH 49/61] =?UTF-8?q?Mejorado=20dise=C3=B1o=20documentaci?= =?UTF-8?q?=C3=B3n=2003?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/03_system_scope_and_context.adoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/src/03_system_scope_and_context.adoc b/docs/src/03_system_scope_and_context.adoc index ca6d7da..19d74c5 100644 --- a/docs/src/03_system_scope_and_context.adoc +++ b/docs/src/03_system_scope_and_context.adoc @@ -1,9 +1,9 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-system-scope-and-context]] -== System Scope and Context +== System Scope and Context 💭 -=== Contexto de negocio +=== Contexto de negocio 💰 En esta tabla se muestra el contexto de negocio de la aplicación. Las entradas son los mensajes que van desde el agente externo hacia la aplicación, y las salidas son los mensajes que van desde la aplicación hacia al agente externo. [options="header",cols="1,2,3"] |=== @@ -12,6 +12,6 @@ En esta tabla se muestra el contexto de negocio de la aplicación. Las entradas |Wikidata|Ítems(elementos) de Wikidata|Petición a la API de Wikidata |=== -=== Contexto técnico +=== Contexto técnico 🔧 -image::diagrama_contexto_tecnico.drawio.png["Diagrama de contexto técnico"] \ No newline at end of file +image::diagrama_contexto_tecnico.drawio.png["Diagrama de contexto técnico"] From f62b46d031d03d678abfd0e9aacd3b675aee2d09 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:45:24 +0100 Subject: [PATCH 50/61] =?UTF-8?q?Mejorado=20estilo=20documentaci=C3=B3n=20?= =?UTF-8?q?04?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 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 7362990..0eda79e 100644 --- a/docs/src/04_solution_strategy.adoc +++ b/docs/src/04_solution_strategy.adoc @@ -1,9 +1,9 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-solution-strategy]] -== Solution Strategy +== Solution Strategy 📚 -Decisiones tecnológicas +Decisiones tecnológicas 💻 Hemos decidido realizar la parte de Front-End con React y la parte de Back-End con la estructura de los microservicios. El despliegue se realizará a través de una máquina virtual de Azure, con ayuda de Docker y GitHub Actions. @@ -44,7 +44,7 @@ Decisiones de cómo llegar a las metas principales (En desarrollo): -Decisiones organizativas +Decisiones organizativas 👥 En la primera semana nos hemos dividido en dos equipos con el objetivo de tocar todas las partes del proyecto. La estructura de los equipos es la siguiente: From fc7e58ee9b3090f46748029e6793591ca474a9d1 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:48:24 +0100 Subject: [PATCH 51/61] =?UTF-8?q?Arreglado=20fallos=20en=20documentaci?= =?UTF-8?q?=C3=B3n=2005?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/05_building_block_view.adoc | 38 ++-------------------------- 1 file changed, 2 insertions(+), 36 deletions(-) diff --git a/docs/src/05_building_block_view.adoc b/docs/src/05_building_block_view.adoc index 7020c23..f45bc48 100644 --- a/docs/src/05_building_block_view.adoc +++ b/docs/src/05_building_block_view.adoc @@ -3,45 +3,11 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-building-block-view]] -== Building Block View EN desarollo +== Building Block View EN desarollo 🗳️ image::whiteBoxGeneral.png[] -[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. - - -.Further Information - -See https://docs.arc42.org/section-5/[Building Block View] in the arc42 documentation. - -**** -=== Whitebox Overall System +=== Whitebox Overall System 📏 image::whiteLevel1.png[] [role="arc42help"] From e8e190a08c2b7165641883f816efdab6b3bc6179 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 12:51:13 +0100 Subject: [PATCH 52/61] Mejorado estilo documentacion 06 --- docs/src/06_runtime_view.adoc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/src/06_runtime_view.adoc b/docs/src/06_runtime_view.adoc index 14fce42..428c411 100644 --- a/docs/src/06_runtime_view.adoc +++ b/docs/src/06_runtime_view.adoc @@ -1,10 +1,10 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-runtime-view]] -== Runtime View +== Runtime View 📽️ -=== <Runtime Scenario 1> +=== <Runtime Scenario 1> 1️⃣ [plantuml,"Sequence diagram",png] ---- @@ -32,7 +32,7 @@ system -> juego: generar siguiente pregunta/respuestas Diagrama de secuencia con plantuml (se contempla sólo el uso correcto de la aplicación) -=== <Runtime Scenario 2> +=== <Runtime Scenario 2> 2️⃣ -> Diagrama de secuencia -> Descripción: diagrama de los usos básicos en la aplicación, como inicio de sesión, empezar a jugar y contestar las preguntas. @@ -43,7 +43,7 @@ Diagrama de secuencia con plantuml (se contempla sólo el uso correcto de la apl image::Digrama de secuencia Juego de preguntas.jpg["Diagrama de secuencia"] -=== <Runtime Scenario 3> +=== <Runtime Scenario 3> 3️⃣ -> Diagrama de casos de uso -> Descripción: diagrama básico de los distintos casos de uso que hay en el proyecto From 0a715eb2ae96cd0a1c99cb81bbb7c29a2d041d4b Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 22:54:51 +0100 Subject: [PATCH 53/61] =?UTF-8?q?Mejorado=20estilo=20y=20errores=20documen?= =?UTF-8?q?taci=C3=B3n=2007?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/07_deployment_view.adoc | 69 +++++++++----------------------- 1 file changed, 18 insertions(+), 51 deletions(-) diff --git a/docs/src/07_deployment_view.adoc b/docs/src/07_deployment_view.adoc index 5480718..dc8d8b6 100644 --- a/docs/src/07_deployment_view.adoc +++ b/docs/src/07_deployment_view.adoc @@ -3,46 +3,12 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-deployment-view]] -== Deployment View +== Deployment View 👀 -[role="arc42help"] -**** -.Content -The deployment view describes: - - 1. technical infrastructure used to execute your system, with infrastructure elements like geographical locations, environments, computers, processors, channels and net topologies as well as other infrastructure elements and - -2. mapping of (software) building blocks to that infrastructure elements. - -Often systems are executed in different environments, e.g. development environment, test environment, production environment. In such cases you should document all relevant environments. - -Especially document a deployment view if your software is executed as distributed system with more than one computer, processor, server or container or when you design and construct your own hardware processors and chips. - -From a software perspective it is sufficient to capture only those elements of an infrastructure that are needed to show a deployment of your building blocks. Hardware architects can go beyond that and describe an infrastructure to any level of detail they need to capture. - -.Motivation -Software does not run without hardware. -This underlying infrastructure can and will influence a system and/or some -cross-cutting concepts. Therefore, there is a need to know the infrastructure. -.Form +=== Infrastructure Level 1 ☝️ -Maybe a highest level deployment diagram is already contained in section 3.2. as -technical context with your own infrastructure as ONE black box. In this section one can -zoom into this black box using additional deployment diagrams: - -* UML offers deployment diagrams to express that view. Use it, probably with nested diagrams, -when your infrastructure is more complex. -* When your (hardware) stakeholders prefer other kinds of diagrams rather than a deployment diagram, let them use any kind that is able to show nodes and channels of the infrastructure. - - -.Further Information - -See https://docs.arc42.org/section-7/[Deployment View] in the arc42 documentation. - -**** - -=== Infrastructure Level 1 +EN DESARROLLO. [role="arc42help"] **** @@ -56,34 +22,35 @@ Describe (usually in a combination of diagrams, tables, and text): For multiple environments or alternative deployments please copy and adapt this section of arc42 for all relevant environments. **** -_**<Overview Diagram>**_ -ESTO SE HARA MAS ADELANTE +_**<Overview Diagram>**_ 🎀 + +EN DESARROLLO. -Motivation:: +Motivation:: 🤩 -1. Disponibilidad: se busca una aplicacion que sea capaz de prestar servicio de manera continuada, con resistencia a fallos. -2. Eficiencia:Se busca una aplicacion que ofreza un rendimiento optimo para la generacion de preguntas desde dispositivos con pocas capacidades. -3. Cumplimiento de Requisitos Regulatorios:El uso de Wikidata como fuente de datos en nuestra aplicación está respaldado por la necesidad de cumplir con requisitos regulatorios y normativos específicos. Esta elección se basa en las siguientes consideraciones: +1. Disponibilidad: Se busca una aplicación que sea capaz de prestar servicio de manera continuada, con resistencia a fallos. +2. Eficiencia: Se busca una aplicación que ofreza un rendimiento óptimo para la generación de preguntas desde dispositivos con pocas capacidades. +3. Cumplimiento de Requisitos Regulatorios: El uso de Wikidata como fuente de datos en nuestra aplicación está respaldado por la necesidad de cumplir con requisitos regulatorios y normativos específicos. Esta elección se basa en las siguientes consideraciones: -Quality and/or Performance Features:: +Quality and/or Performance Features:: 🎉 -1.Rencimiento:se busca que la aplicacion tenga un rendimiento optimo en dispositivos mobiles y tablets. -2.Adaptabilidad: la aplicacion tiene que ser adaptable en diferentes dispositivos para asi poder garantizar su uso . +1.Rendimiento: Se busca que la aplicación tenga un rendimiento óptimo en dispositivos móviles y tablets. +2.Adaptabilidad: La aplicación tiene que ser adaptable en diferentes dispositivos para así poder garantizar su uso. -Se hara mas adelante +EN DESARROLLO. -Mapping of Building Blocks to Infrastructure:: +Mapping of Building Blocks to Infrastructure:: 📜 -SE HARA MAS ADELANTE +EN DESARROLLO. _<description of the mapping>_ -=== Infrastructure Level 2 +=== Infrastructure Level 2 ☝️ [role="arc42help"] **** @@ -92,7 +59,7 @@ Here you can include the internal structure of (some) infrastructure elements fr Please copy the structure from level 1 for each selected element. **** -SE HARA MAS ADELANTE +EN DESARROLLO. ==== _<Infrastructure Element 1>_ From 15e400d52b63fb9523f2e068045dc4ab6f95542d Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 23:00:11 +0100 Subject: [PATCH 54/61] Mejorado estilo documento 08 --- docs/src/08_concepts.adoc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/src/08_concepts.adoc b/docs/src/08_concepts.adoc index b4a6b50..e7e9ae2 100644 --- a/docs/src/08_concepts.adoc +++ b/docs/src/08_concepts.adoc @@ -1,32 +1,32 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-concepts]] -== Conceptos Transversales +== Conceptos Transversales 🧭 Estos conceptos todavía no han sido aprobados ni implementados, pero dan una idea general del proyecto. -=== Modelo de Dominio -Esta es una primera versión del modelo de dominio muy simple para hacerse una idea como funcionará la aplicación. +=== Modelo de Dominio 🗺️ +Esta es una primera versión del modelo de dominio muy simple, para hacerse una idea como funcionará la aplicación. image::Diagrama de clases juego de preguntas.jpg["Modelo de dominio simple provisional"] -=== Experiencia de Usuario +=== Experiencia de Usuario 👨🦰 El usuario será capaz de interactuar con una aplicación web, donde se podrá registrar y jugar al juego de manera sencilla. -=== Seguridad +=== Seguridad 🔒 _<explanation>_ -=== Arquitectura y Patrones de Diseño +=== Arquitectura y Patrones de Diseño 📒 _<explanation>_ -=== Desarrollo +=== Desarrollo ⚙️ _<explanation>_ -=== Operaciones +=== Operaciones 🔢 _<explanation>_ From 231f2ec41c1b9afed34c512bf4baba24eaeb7c8e Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 23:00:47 +0100 Subject: [PATCH 55/61] =?UTF-8?q?Mejorado=20estilo=20documentaci=C3=B3n=20?= =?UTF-8?q?09?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/09_architecture_decisions.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/09_architecture_decisions.adoc b/docs/src/09_architecture_decisions.adoc index 2640737..4b56236 100644 --- a/docs/src/09_architecture_decisions.adoc +++ b/docs/src/09_architecture_decisions.adoc @@ -1,7 +1,7 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-design-decisions]] -== Decisiones de Arquitectura +== Decisiones de Arquitectura 🗣️ |=== | Decisión | Ventajas | Inconvenientes From 949b2234d2c05eb65aacf0495955594d887bc270 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 23:05:10 +0100 Subject: [PATCH 56/61] Mejorado estilo documento 10 --- docs/src/10_quality_requirements.adoc | 40 +++++++++++++-------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/docs/src/10_quality_requirements.adoc b/docs/src/10_quality_requirements.adoc index 32e96a1..57811a0 100644 --- a/docs/src/10_quality_requirements.adoc +++ b/docs/src/10_quality_requirements.adoc @@ -4,39 +4,39 @@ ifndef::imagesdir[:imagesdir: ../images] === Árbol de Calidad 🌳 -El árbol de calidad se organiza con "calidad" como raíz, desglosándose en varias ramas principales que representan categorías de calidad relevantes para el proyecto WIQ. Estas ramas incluyen: +El árbol de calidad se organiza con "calidad" como raíz, desglosándose en varias ramas principales, que representan categorías de calidad relevantes para el proyecto WIQ. Estas ramas incluyen: -- *Usabilidad* 💡: Se refiere a la facilidad con la que los usuarios pueden utilizar un sistema para alcanzar sus objetivos de manera eficiente y satisfactoria. La usabilidad implica interfaces intuitivas, accesibilidad y una experiencia de usuario agradable. -- *Rendimiento* ⚡: Evalúa la eficiencia del sistema en términos de velocidad de respuesta, consumo de recursos y escalabilidad. Un buen rendimiento asegura que el sistema puede manejar cargas de trabajo elevadas con tiempos de respuesta rápidos. -- *Seguridad* 🔒: Implica proteger la información y los sistemas contra accesos no autorizados, divulgación, alteración o destrucción, garantizando la confidencialidad, integridad y disponibilidad de los datos. -- *Fiabilidad* 🛡️: La capacidad del sistema de funcionar correctamente y sin fallos durante un período determinado bajo condiciones específicas. La fiabilidad se centra en la consistencia del rendimiento y la prevención de fallos. -- *Mantenibilidad* 🔧: Se refiere a la facilidad con la que un sistema puede ser modificado para corregir fallos, mejorar su funcionamiento o adaptarse a un entorno cambiante. Una alta mantenibilidad facilita las actualizaciones y reduce los costos a largo plazo. -- *Portabilidad 🌍*: La capacidad de un sistema para ser utilizado en diferentes entornos operativos con mínimas modificaciones. La portabilidad permite que el software sea compatible con diversos dispositivos, sistemas operativos o navegadores web. +- *Usabilidad*: Se refiere a la facilidad con la que los usuarios pueden utilizar un sistema para alcanzar sus objetivos de manera eficiente y satisfactoria. La usabilidad implica interfaces intuitivas, accesibilidad y una experiencia de usuario agradable. +- *Rendimiento*: Evalúa la eficiencia del sistema en términos de velocidad de respuesta, consumo de recursos y escalabilidad. Un buen rendimiento asegura que el sistema puede manejar cargas de trabajo elevadas con tiempos de respuesta rápidos. +- *Seguridad*: Implica proteger la información y los sistemas contra accesos no autorizados, divulgación, alteración o destrucción, garantizando la confidencialidad, integridad y disponibilidad de los datos. +- *Fiabilidad*: La capacidad del sistema de funcionar correctamente y sin fallos durante un período determinado bajo condiciones específicas. La fiabilidad se centra en la consistencia del rendimiento y la prevención de fallos. +- *Mantenibilidad*: Se refiere a la facilidad con la que un sistema puede ser modificado para corregir fallos, mejorar su funcionamiento o adaptarse a un entorno cambiante. Una alta mantenibilidad facilita las actualizaciones y reduce los costos a largo plazo. +- *Portabilidad*: La capacidad de un sistema para ser utilizado en diferentes entornos operativos con mínimas modificaciones. La portabilidad permite que el software sea compatible con diversos dispositivos, sistemas operativos o navegadores web. image::10_Arbol_de_calidad.jpg[Árbol de Calidad,align="center"] -=== Escenarios de Calidad +=== Escenarios de Calidad 🕹️ -==== Usabilidad 💡 +==== Usabilidad -- *Escenario*: Un nuevo usuario puede registrarse e iniciar a jugar en menos de 5 minutos después de su primer acceso al sitio web. La interfaz intuitiva y la guía de inicio rápido facilitan este proceso. 🚀 +- *Escenario*: Un nuevo usuario puede registrarse e iniciar a jugar en menos de 5 minutos después de su primer acceso al sitio web. La interfaz intuitiva y la guía de inicio rápido facilitan este proceso. -==== Rendimiento ⚡ +==== Rendimiento -- *Escenario*: El sistema responde a las solicitudes de los usuarios en menos de 2 segundos bajo condiciones normales de carga, asegurando una experiencia de juego fluida. 🏎️ +- *Escenario*: El sistema responde a las solicitudes de los usuarios en menos de 2 segundos bajo condiciones normales de carga, asegurando una experiencia de juego fluida. -==== Seguridad 🔒 +==== Seguridad -- *Escenario*: Todos los datos personales de los usuarios están cifrados tanto en tránsito como en reposo, utilizando estándares de seguridad actuales para prevenir accesos no autorizados. 🔐 +- *Escenario*: Todos los datos personales de los usuarios están cifrados tanto en tránsito como en reposo, utilizando estándares de seguridad actuales para prevenir accesos no autorizados. -==== Mantenibilidad 🔧 +==== Mantenibilidad -- *Escenario*: El sistema permite la adición de nuevas funcionalidades (como tipos de preguntas o temáticas) sin necesidad de una reestructuración mayor, promoviendo una arquitectura modular. 🛠️ +- *Escenario*: El sistema permite la adición de nuevas funcionalidades (como tipos de preguntas o temáticas) sin necesidad de una reestructuración mayor, promoviendo una arquitectura modular. -==== Fiabilidad 🛡️ +==== Fiabilidad -- *Escenario*: En caso de fallo del sistema, este debe ser capaz de recuperarse y volver a estar operativo en menos de 5 minutos, garantizando una alta disponibilidad. 🔄 +- *Escenario*: En caso de fallo del sistema, este debe ser capaz de recuperarse y volver a estar operativo en menos de 5 minutos, garantizando una alta disponibilidad. -==== Portabilidad 🌍 +==== Portabilidad -- *Escenario*: La aplicación web es compatible con los navegadores web más utilizados (Chrome, Firefox, Safari, Edge) en sus últimas dos versiones principales, asegurando un amplio acceso. 🌐 \ No newline at end of file +- *Escenario*: La aplicación web es compatible con los navegadores web más utilizados (Chrome, Firefox, Safari, Edge) en sus últimas dos versiones principales, asegurando un amplio acceso. From 3c82cd8681bdb5c2d7d9235e4c7604c5e52f0099 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 23:06:04 +0100 Subject: [PATCH 57/61] Mejora estilo documento 12 --- docs/src/12_glossary.adoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index a412537..72371c4 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -1,7 +1,7 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-glossary]] -== Glossary +== Glossary ⁉️ [cols="e,2e" options="header"] From 621ec985affeb80f065c077af66179ba93a12192 Mon Sep 17 00:00:00 2001 From: SaraLG <145345951+Etihw32@users.noreply.github.com> Date: Wed, 28 Feb 2024 23:06:44 +0100 Subject: [PATCH 58/61] Mejorado estilo documento 11 --- docs/src/11_technical_risks.adoc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/docs/src/11_technical_risks.adoc b/docs/src/11_technical_risks.adoc index a287e26..af5b852 100644 --- a/docs/src/11_technical_risks.adoc +++ b/docs/src/11_technical_risks.adoc @@ -5,13 +5,13 @@ [width="100%",options="header",cols="^,^"] |====================== | Riesgo | Descripción -| Tiempo de entrega ⏳ | Estamos limitados por el plazo de entrega y también por el tiempo que dedicaremos a trabajar en otras asignaturas. -| Proyecto grande y equipo grande 👥 | La coordinación y comunicación en un equipo grande pueden ser desafiantes. -| Diseño inadecuado o enfoque incorrecto 🎨 | La presencia de errores en etapas tempranas puede ser devastadora, ya que estas son cruciales. Un mal diseño detectado en etapas avanzadas podría ser irreparable, subrayando la importancia de una planificación y visión previsoras. -| Falta de familiaridad con las tecnologías 🔧 | El equipo comienza con conocimiento limitado sobre las herramientas necesarias, lo que puede resultar en un uso subóptimo de estas. -| Errores de implementación 🚨 | Errores no críticos en la lógica de negocio pueden permanecer ocultos por largo tiempo, afectando la calidad del sistema. -| Comunicación deficiente entre miembros 📢 | Las diferencias y desacuerdos pueden obstaculizar la colaboración efectiva, esencial para el éxito del equipo. -| Distribución desigual del trabajo ⚖️ | Una asignación desequilibrada puede sobrecargar a algunos miembros mientras deja a otros con menos responsabilidades. -| Reducción del tamaño del equipo 👥 | La salida inesperada de miembros puede desafiar la continuidad y el avance del proyecto, requiriendo adaptaciones rápidas y eficientes. +| Tiempo de entrega | Estamos limitados por el plazo de entrega y también por el tiempo que dedicaremos a trabajar en otras asignaturas. +| Proyecto grande y equipo grande | La coordinación y comunicación en un equipo grande pueden ser desafiantes. +| Diseño inadecuado o enfoque incorrecto | La presencia de errores en etapas tempranas puede ser devastadora, ya que estas son cruciales. Un mal diseño detectado en etapas avanzadas podría ser irreparable, subrayando la importancia de una planificación y visión previsoras. +| Falta de familiaridad con las tecnologías | El equipo comienza con conocimiento limitado sobre las herramientas necesarias, lo que puede resultar en un uso subóptimo de estas. +| Errores de implementación | Errores no críticos en la lógica de negocio pueden permanecer ocultos por largo tiempo, afectando la calidad del sistema. +| Comunicación deficiente entre miembros | Las diferencias y desacuerdos pueden obstaculizar la colaboración efectiva, esencial para el éxito del equipo. +| Distribución desigual del trabajo | Una asignación desequilibrada puede sobrecargar a algunos miembros mientras deja a otros con menos responsabilidades. +| Reducción del tamaño del equipo | La salida inesperada de miembros puede desafiar la continuidad y el avance del proyecto, requiriendo adaptaciones rápidas y eficientes. |====================== From f1a2b17f17625a72e3bc3734b750094ce0363f37 Mon Sep 17 00:00:00 2001 From: yagonavajas <uo287746@uniovi.es> Date: Thu, 29 Feb 2024 16:28:35 +0100 Subject: [PATCH 59/61] Doc 1 acabado --- docs/src/01_introduction_and_goals.adoc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/src/01_introduction_and_goals.adoc b/docs/src/01_introduction_and_goals.adoc index 01ce2c8..b8066c2 100644 --- a/docs/src/01_introduction_and_goals.adoc +++ b/docs/src/01_introduction_and_goals.adoc @@ -47,4 +47,6 @@ Sara Lamuño García -> UO283706@uniovi.es + Santiago Lopez Laso -> UO277369@uniovi.es | Los estudiantes que llevarán a cabo el desarrollo de la aplicación. Serán los encargados de la arquitectura, la documentación y la codificación. | Profesores | Jose Emilio Labra Gayo | Supervisores de los avances y encargados de evaluar la aplicación final y el desarrollo de la misma. | Usuario | Jugador de la aplicación | Personas que puedan interactuar tanto con el registro de usuarios como con el juego en sí y pueda completar correctamente una partida. +| HappySw | Empresa responsable | Empresa contratada, cuyo trabajo sera el desarrollo del juego de la mano del equipo de desarrollo. +| RTVE | Empleador | Interesados en la creacion del juego e impulsores de su creacion. |=== From 589f0bcafe695611764903f82d97cdf6d8d05512 Mon Sep 17 00:00:00 2001 From: yagonavajas <uo287746@uniovi.es> Date: Thu, 29 Feb 2024 16:35:04 +0100 Subject: [PATCH 60/61] =?UTF-8?q?Cambiada=20la=20presentacion=20de=20doc?= =?UTF-8?q?=209=20sin=20a=C3=B1adir=20las=20decisiones?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/src/09_architecture_decisions.adoc | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/docs/src/09_architecture_decisions.adoc b/docs/src/09_architecture_decisions.adoc index 4b56236..9def3a8 100644 --- a/docs/src/09_architecture_decisions.adoc +++ b/docs/src/09_architecture_decisions.adoc @@ -2,10 +2,7 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-design-decisions]] == Decisiones de Arquitectura 🗣️ +Los enlaces proporcionan las decisiones de aquitectura via GitHub. -|=== -| Decisión | Ventajas | Inconvenientes -| JavaScript / React | La base de la aplicación ya esta creada con este lenguaje y lo para la creación de sitios web es un versatil. | La baja o nula esperiencia con el lenguaje de algunos integrantes del grupo asi como sus limitaciones tecninas. -| Microservicios | La aplicacion se podra dividir en problemas que se podran solucionar dandole diferentes enfoques con diferentes lenguajes y metodologias. | AL igual que el primer punto, la baja experiencia con esta forma de trabajo al cual se tendra que adaptar el grupo. -| MongoDB | Parte de la implementacion ya está hecha. Por otra parte es de uso libre y existe bastante documentacion online para usarse correctamente | Al igual que los dos puntos anteriores, el grupo cuenta con poca experiencia usando esta tecnología y no somos concientes de todas sus limitaciones y fortalezas. -|=== +* Enlace: Decision... +* Enlace: Decision... \ No newline at end of file From 5c350ccb57c703a45c32fba5cceb566da505c1b1 Mon Sep 17 00:00:00 2001 From: Santiago21112001 <minesanti2001@gmail.com> Date: Fri, 1 Mar 2024 11:20:06 +0100 Subject: [PATCH 61/61] Bloquear botones mientras se pide otra pregunta --- webapp/src/components/game/Game.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/webapp/src/components/game/Game.js b/webapp/src/components/game/Game.js index 18acaf4..0644228 100644 --- a/webapp/src/components/game/Game.js +++ b/webapp/src/components/game/Game.js @@ -12,6 +12,7 @@ const Game = () => { const [question, setQuestion] = useState(''); const [answers, setAnswers] = useState([]); + const [loadingMessage, setLoadingMessage] = useState(''); const [snackbarOpen, setSnackbarOpen] = useState(false); const [snackbarMessage, setSnackbarMessage] = useState(''); const [snackbarSeverity, setSnackbarSeverity] = useState('success'); @@ -26,6 +27,9 @@ const Game = () => { if (correct) { setSnackbarMessage('Respuesta correcta'); setSnackbarSeverity('success'); + setQuestion(''); + setAnswers([]); + setLoadingMessage('Generando próxima pregunta'); fetchQuestionAndAnswers(); } else { setSnackbarMessage('Respuesta incorrecta'); @@ -41,6 +45,7 @@ const Game = () => { // Almacena la pregunta y las respuestas en los estado. setQuestion(response.data.question); setAnswers(response.data.answers); + setLoadingMessage(''); // setQuestion(exampleData.question); // setAnswers(exampleData.answers); } catch (error) { @@ -60,6 +65,7 @@ const Game = () => { Generate Question </Button> </Box> + {loadingMessage && (<Typography variant="h2">{loadingMessage}</Typography>)} {/* Muestra la pregunta y las respuesta si existen */} {question && ( <Paper elevation={3} sx={{ p: 2, mb: 2 }}>