From e6042e74032b9495466290ab4e4fa271a2e1475e Mon Sep 17 00:00:00 2001 From: Mister-Mario Date: Sun, 24 Mar 2024 00:16:11 +0100 Subject: [PATCH 1/9] Setted up the recordservice for adding and retrieving historical data --- .github/workflows/release.yml | 18 ++++++++- docker-compose.yml | 16 ++++++++ gatewayservice/gateway-service.js | 22 ++++++++++ users/recordservice/.dockerignore | 2 + users/recordservice/Dockerfile | 20 +++++++++ users/recordservice/package.json | 31 ++++++++++++++ users/recordservice/record-model.js | 10 +++++ users/recordservice/record-service.js | 58 +++++++++++++++++++++++++++ 8 files changed, 176 insertions(+), 1 deletion(-) create mode 100644 users/recordservice/.dockerignore create mode 100644 users/recordservice/Dockerfile create mode 100644 users/recordservice/package.json create mode 100644 users/recordservice/record-model.js create mode 100644 users/recordservice/record-service.js diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8a816a34..26d1dd2c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -56,6 +56,22 @@ jobs: password: ${{ secrets.GITHUB_TOKEN }} registry: ghcr.io workdir: users/userservice + docker-push-recordservice: + name: Push record service Docker Image to GitHub Packages + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + steps: + - uses: actions/checkout@v4 + - name: Publish to Registry + uses: elgohr/Publish-Docker-Github-Action@v5 + with: + name: arquisoft/wiq_en1b/recordservice + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + registry: ghcr.io + workdir: users/recordservice docker-push-gatewayservice: name: Push gateway service Docker Image to GitHub Packages runs-on: ubuntu-latest @@ -107,7 +123,7 @@ jobs: deploy: name: Deploy over SSH runs-on: ubuntu-latest - needs: [docker-push-userservice,docker-push-authservice,docker-push-gatewayservice,docker-push-webapp,docker-push-questionservice,docker-push-questiongenerator] + needs: [docker-push-userservice,docker-push-authservice,docker-push-gatewayservice,docker-push-webapp,docker-push-questionservice,docker-push-questiongenerator,docker-push-recordservice] steps: - name: Deploy over SSH uses: fifsky/ssh-action@master diff --git a/docker-compose.yml b/docker-compose.yml index 1292d799..26949792 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -50,6 +50,20 @@ - mynetwork environment: MONGODB_URI: mongodb://mongodb:27017/userdb + + recordservice: + container_name: recordservice-${teamname:-defaultASW} + image: ghcr.io/arquisoft/wiq_en1b/recordservice:latest + profiles: ["dev", "prod"] + build: ./users/recordservice + depends_on: + - mongodb + ports: + - "8004:8004" + networks: + - mynetwork + environment: + MONGODB_URI: mongodb://mongodb:27017/userdb questionservice: container_name: questionservice-${teamname:-defaultASW} @@ -74,6 +88,7 @@ - mongodb - userservice - authservice + - recordservice - questionservice ports: - "8000:8000" @@ -83,6 +98,7 @@ AUTH_SERVICE_URL: http://authservice:8002 USER_SERVICE_URL: http://userservice:8001 QUESTION_SERVICE_URL: http://questionservice:8003 + RECORD_SERVICE_URL: http://recordservice:8004 webapp: container_name: webapp-${teamname:-defaultASW} diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 4b6dc3f8..7b7615e5 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -9,6 +9,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 questionServiceUrl = process.env.QUESTION_SERVICE_URL || 'http://localhost:8003'; +const recordServiceUrl = process.env.RECORD_SERVICE_URL || 'http://localhost:8004'; app.use(cors()); app.use(express.json()); @@ -52,6 +53,27 @@ app.get('/questions', async (req, res) => { } }); +app.get('/addrecord', async(req, res) => { + try { + // Forward the record request to the record service + const recordResponse = await axios.get(recordServiceUrl+'/addrecord'); + res.send(recordResponse.data); + } catch (error) { + res.send(error); + } +}); + +app.get('/records/:user', async(req, res)=>{ + try { + const user = req.params.user; + // Forward the record request to the record service + const recordResponse = await axios.get(recordServiceUrl + '/records/' + user); + res.send(recordResponse.data); + } catch (error) { + res.send(error); + } +}); + // Start the gateway service const server = app.listen(port, () => { console.log(`Gateway Service listening at http://localhost:${port}`); diff --git a/users/recordservice/.dockerignore b/users/recordservice/.dockerignore new file mode 100644 index 00000000..3091757a --- /dev/null +++ b/users/recordservice/.dockerignore @@ -0,0 +1,2 @@ +node_modules +coverage \ No newline at end of file diff --git a/users/recordservice/Dockerfile b/users/recordservice/Dockerfile new file mode 100644 index 00000000..60fca0f9 --- /dev/null +++ b/users/recordservice/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/recordervice + +# 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 8004 + +# Define the command to run your app +CMD ["node", "record-service.js"] diff --git a/users/recordservice/package.json b/users/recordservice/package.json new file mode 100644 index 00000000..71cc1cdb --- /dev/null +++ b/users/recordservice/package.json @@ -0,0 +1,31 @@ +{ + "name": "userservice", + "version": "1.0.0", + "description": "User service, in charge of handling users in the application", + "main": "service.js", + "scripts": { + "start": "node user-service.js", + "test": "jest" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/arquisoft/wiq_en1b.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/arquisoft/wiq_en1b/issues" + }, + "homepage": "https://github.com/arquisoft/wiq_en1b#readme", + "dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "express": "^4.18.2", + "mongoose": "^8.0.4" + }, + "devDependencies": { + "jest": "^29.7.0", + "mongodb-memory-server": "^9.1.5", + "supertest": "^6.3.4" + } +} diff --git a/users/recordservice/record-model.js b/users/recordservice/record-model.js new file mode 100644 index 00000000..7f7bb6c5 --- /dev/null +++ b/users/recordservice/record-model.js @@ -0,0 +1,10 @@ +const mongoose = require('mongoose'); + +const recordSchema = new mongoose.Schema({ + username:String, + games:[String] +}); + +const Record = mongoose.model('Record', recordSchema); + +module.exports = Record \ No newline at end of file diff --git a/users/recordservice/record-service.js b/users/recordservice/record-service.js new file mode 100644 index 00000000..883c149d --- /dev/null +++ b/users/recordservice/record-service.js @@ -0,0 +1,58 @@ +const express = require('express'); +const mongoose = require('mongoose'); +const bcrypt = require('bcrypt'); +const bodyParser = require('body-parser'); +const Record = require('./record-model') + +const app = express(); +const port = 8004; + +// Middleware to parse JSON in request body +app.use(bodyParser.json()); + +// Connect to MongoDB +const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/userdb'; +mongoose.connect(mongoUri); + +app.get('/addrecord', async (req, res) => { + res.send({data:"hola"}) +}); + +app.get('/records/:user', async(req, res)=> { + res.send({data:"Hola: "+ req.params.user}) +}); + +const server = app.listen(port, () => { + console.log(`Record Service listening at http://localhost:${port}`); +}); + +// Listen for the 'close' event on the Express.js server +server.on('close', () => { + // Close the Mongoose connection + mongoose.connection.close(); + }); + +module.exports = server + + +// Record.findOne({ username: "nombreDeUsuario" }, (err, record) => { +// if (err) { +// console.error("Error al recuperar el documento:", err); +// return; +// } + +// if (!record) { +// console.log("No se encontró ningún documento para el nombre de usuario dado."); +// return; +// } + +// record.games.push("nuevoJuego"); + +// record.save((err, updatedRecord) => { +// if (err) { +// console.error("Error al guardar el documento actualizado:", err); +// return; +// } +// console.log("Documento actualizado correctamente:", updatedRecord); +// }); +// }); \ No newline at end of file From 580ce0427d1e102de3ad3f79b2bb05d4f4059c33 Mon Sep 17 00:00:00 2001 From: Mister-Mario Date: Mon, 25 Mar 2024 14:23:36 +0100 Subject: [PATCH 2/9] Improved the record service to expect json and return json Cannto fully test it cause physical computer problems --- gatewayservice/gateway-service.js | 6 ++--- users/recordservice/record-service.js | 39 ++++++++++++++++++++++++--- 2 files changed, 38 insertions(+), 7 deletions(-) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 7b7615e5..a7ffc772 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -53,10 +53,10 @@ app.get('/questions', async (req, res) => { } }); -app.get('/addrecord', async(req, res) => { +app.post('/addrecord', async(req, res) => { try { // Forward the record request to the record service - const recordResponse = await axios.get(recordServiceUrl+'/addrecord'); + const recordResponse = await axios.post(recordServiceUrl+'/addrecord', req.body); res.send(recordResponse.data); } catch (error) { res.send(error); @@ -68,7 +68,7 @@ app.get('/records/:user', async(req, res)=>{ const user = req.params.user; // Forward the record request to the record service const recordResponse = await axios.get(recordServiceUrl + '/records/' + user); - res.send(recordResponse.data); + res.send(recordResponse.record); } catch (error) { res.send(error); } diff --git a/users/recordservice/record-service.js b/users/recordservice/record-service.js index 883c149d..2c837940 100644 --- a/users/recordservice/record-service.js +++ b/users/recordservice/record-service.js @@ -14,12 +14,43 @@ app.use(bodyParser.json()); const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/userdb'; mongoose.connect(mongoUri); -app.get('/addrecord', async (req, res) => { - res.send({data:"hola"}) +//Fire and forget +app.post('/addrecord', async (req, res) => { + const user = req.body.user; + const game = req.body.game; + console.log(game) + console.log(user) + let record = await Record.findOne({ username : user }); + if(record){ //If it exits + record.games.push(game); + } + else{ //Lo creamos + record = new Record({ + username:user, + games:[game] + }); + } + + try { + const savedRecord = await record.save(); + console.log("Record saved successfully:", savedRecord); + } catch (err) { + console.error("There was an error while saving the record:", err); + } }); -app.get('/records/:user', async(req, res)=> { - res.send({data:"Hola: "+ req.params.user}) +app.get('/records/:user', async (req, res) => { + try { + const record = await Record.findOne({ user: req.params.user }); + + if (!record) { + res.json({ record: "No hay usuario" }); + } else { + res.json(record); + } + } catch (err) { + res.status(500).json({ error: "undefined" }); + } }); const server = app.listen(port, () => { From 5ad6aa8ab3423c87949a3d4b0266d7de081a1728 Mon Sep 17 00:00:00 2001 From: Mister-Mario Date: Thu, 28 Mar 2024 14:19:46 +0100 Subject: [PATCH 3/9] Added deployed infrastructure diagram --- docs/src/07_deployment_view.adoc | 56 +++++++++++++++++++++++++++++++- 1 file changed, 55 insertions(+), 1 deletion(-) diff --git a/docs/src/07_deployment_view.adoc b/docs/src/07_deployment_view.adoc index eaba8299..d7e0b0fd 100644 --- a/docs/src/07_deployment_view.adoc +++ b/docs/src/07_deployment_view.adoc @@ -56,6 +56,61 @@ 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. **** +[plantuml, "Deployed infrastructure", png] +--- +component User as "User" +cloud "WIQ" { + rectangle "Azure - Ubuntu - Docker"{ + component webapp as "Webapp"{ + port 3000 + } + rectangle "Internal network"{ + database "MongoDB" { + folder "UsersDB" { + [Records] + [Users] + } + frame "QuestionsDB" { + [Questions] + } + } + component gs as "Gateway service"{ + port 8000 + } + component auths as "Authentication service"{ + port 8002 + } + component users as "User service"{ + port 8001 + } + component records as "Record service"{ + port 8004 + } + component questions as "Question service"{ + port 8003 + } + component qg as "Question generator" + } + } +} +cloud "Wikidata" + +User -[dotted,#green,thickness=3]-> 3000 +webapp -[#green,thickness=3]-> 8000 +gs -[#red]-> 8002 +gs -[#red]-> 8001 +gs -[#red]-> 8004 +gs -[#red]-> 8003 +auths -[#red]-> Users +users -[#red]-> Users +records -[#red]-> Records +questions -[#red]-> Questions +qg -[#red]-> Questions +qg -[dotted]-> Wikidata +--- + +This diagram shows the infrastructure of our application when deployed. + *TBD* === Infrastructure Level 2 @@ -67,4 +122,3 @@ Here you can include the internal structure of (some) infrastructure elements fr Please copy the structure from level 1 for each selected element. **** -*TBD* \ No newline at end of file From 3044faa324dec89259d117093814bf52b1052e10 Mon Sep 17 00:00:00 2001 From: Mister-Mario Date: Thu, 28 Mar 2024 19:26:33 +0100 Subject: [PATCH 4/9] Finished reviewing/updating the whole documentation --- docs/src/09_architecture_decisions.adoc | 19 +++++++++++++++++-- docs/src/11_technical_risks.adoc | 6 +++--- docs/src/12_glossary.adoc | 3 +++ 3 files changed, 23 insertions(+), 5 deletions(-) diff --git a/docs/src/09_architecture_decisions.adoc b/docs/src/09_architecture_decisions.adoc index d4c0636f..e87d7169 100644 --- a/docs/src/09_architecture_decisions.adoc +++ b/docs/src/09_architecture_decisions.adoc @@ -3,8 +3,23 @@ ifndef::imagesdir[:imagesdir: ../images] [[section-design-decisions]] == Architecture Decisions The application will be carried out following a Microservices architecture. + -The Rest API in charge of comunicating with WikiData will be coded using Java. + -_(More details to de added)_ + +The service in charge of comunicating with WikiData will be coded using Java. +As the generation of questions is a huge part of our application we will play it safe by using Java, a language where most of the team is "fluent" at. + + +The backend will we develop using a combination of SpringBoot, for the question generation, and Express. +The use of SpringBoot was a requirement in order to generate the questions in Java. + + +*10/03/24* + +We will apply a data share strategy where we will load the questions generated and access them when needed through the backend. +This is done to increase the efficiency, as questions are not generated when needed, and robustness of the application, as we can give service even if Wikidata is down. + + +*14/03/24* + +We have done a redisign of the architecture of the project where we will implement the whole backend using Express. +This was done to have a more homogeneus backend as we have de-coupled the question generation from the backend and we dont need all to be Java. + + [role="arc42help"] **** diff --git a/docs/src/11_technical_risks.adoc b/docs/src/11_technical_risks.adoc index 022fa93a..a0100905 100644 --- a/docs/src/11_technical_risks.adoc +++ b/docs/src/11_technical_risks.adoc @@ -27,12 +27,12 @@ In decision-making processes, we often face constraints. These constraints, know ### Risks -There is the table of risks the team is taking for development purposes ordered by priority. +There is the table of risks the team is taking for development purposes. [options="header",cols="^.^1,2,2"] |=== |Risk|Explanation|Solution -| *Insufficient knowledge of React* | None of our team members worked with React before. | The people who's going to work on React are going to learn it. +| *Insufficient knowledge of Tecnologies* | None of our team members worked with React nor Express nor MongoDB before. | The people who's going to work on these technologies are going to learn it which trades time for a better application as we use stronger technologies (React instead of HTML). | *Working with a team* | It might be difficult working with people on projects, as every person has their own way of doing things. | Have weekly meetings deciding on what's going to get solved, how and by whom, keeping bus factor in mind. | *Time* | It should be kept in mind that the team has deadlines with different requirements, demanding them to work regularly. | Have better time-management skills, keep track of and help each other to not waste any time on hard / complex parts of the project. |=== @@ -44,5 +44,5 @@ There is the table of technical debt shortcuts the team is taking sacrificing lo [options="header",cols="^.^1,3"] |=== |Technical debt|Explanation -| *Azure* | The team has experience with Microsoft Azure and decided to use it again. The full implementation is not planned yet. +| *CORS* | The team has fully enabled CORS through the backend this is a risk as external users can access endpoints like adduser |=== \ No newline at end of file diff --git a/docs/src/12_glossary.adoc b/docs/src/12_glossary.adoc index b5ba9d7a..ec89a6b1 100644 --- a/docs/src/12_glossary.adoc +++ b/docs/src/12_glossary.adoc @@ -48,4 +48,7 @@ See https://docs.arc42.org/section-12/[Glossary] in the arc42 documentation. |*Stakeholder* |Anyone involved in the development process of the system, or that is affected by it somehow. + +|*CORS* +|CORS (Cross-Origin Resource Sharing) is a mechanism that allows resources on a web page to be requested from another domain outside the domain from which the resource originated. |=== From 51d0a2587344b459229d3b8a148ec4febe23040d Mon Sep 17 00:00:00 2001 From: Mister-Mario Date: Thu, 28 Mar 2024 19:30:31 +0100 Subject: [PATCH 5/9] Small mistake where the platnuml will not render --- docs/src/07_deployment_view.adoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/src/07_deployment_view.adoc b/docs/src/07_deployment_view.adoc index d7e0b0fd..7c37eaa2 100644 --- a/docs/src/07_deployment_view.adoc +++ b/docs/src/07_deployment_view.adoc @@ -57,7 +57,7 @@ For multiple environments or alternative deployments please copy and adapt this **** [plantuml, "Deployed infrastructure", png] ---- +---- component User as "User" cloud "WIQ" { rectangle "Azure - Ubuntu - Docker"{ @@ -107,7 +107,7 @@ records -[#red]-> Records questions -[#red]-> Questions qg -[#red]-> Questions qg -[dotted]-> Wikidata ---- +---- This diagram shows the infrastructure of our application when deployed. From 1a5cca3df65bfc74be7810f80d0c345f69212eef Mon Sep 17 00:00:00 2001 From: Mister-Mario Date: Fri, 29 Mar 2024 13:31:49 +0100 Subject: [PATCH 6/9] Could fixed the bad render of point 7 added a png What is happening is that the version of plantuml used by the asciidoctor-diagram gem is a bit old and do not support graphviz diagrams and you cannot change this version --- docs/images/Deployed-Infrastructure.png | Bin 0 -> 99639 bytes docs/src/07_deployment_view.adoc | 54 ++++++++++++------------ 2 files changed, 27 insertions(+), 27 deletions(-) create mode 100644 docs/images/Deployed-Infrastructure.png diff --git a/docs/images/Deployed-Infrastructure.png b/docs/images/Deployed-Infrastructure.png new file mode 100644 index 0000000000000000000000000000000000000000..12fec7fed3f32a4b5883171809f450997fd59277 GIT binary patch literal 99639 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

AwFc3)g;+F9Oy*6 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 V#HoZ=59k_KeVxPFMVdCj{{tkHjT-;} literal 0 HcmV?d00001 diff --git a/docs/src/07_deployment_view.adoc b/docs/src/07_deployment_view.adoc index 7c37eaa2..a161d91c 100644 --- a/docs/src/07_deployment_view.adoc +++ b/docs/src/07_deployment_view.adoc @@ -56,40 +56,41 @@ 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. **** -[plantuml, "Deployed infrastructure", png] ----- +image::Deployed-Infrastructure.png["Deployed Infrastructure"] + +**** component User as "User" cloud "WIQ" { - rectangle "Azure - Ubuntu - Docker"{ + rectangle "Azure - Ubuntu - Docker"{ component webapp as "Webapp"{ port 3000 } rectangle "Internal network"{ - database "MongoDB" { - folder "UsersDB" { + database "MongoDB" { + folder "UsersDB" { [Records] [Users] - } - frame "QuestionsDB" { + } + frame "QuestionsDB" { [Questions] - } - } - component gs as "Gateway service"{ - port 8000 - } - component auths as "Authentication service"{ - port 8002 - } - component users as "User service"{ - port 8001 - } - component records as "Record service"{ - port 8004 - } - component questions as "Question service"{ - port 8003 - } - component qg as "Question generator" + } + } + component gs as "Gateway service"{ + port 8000 + } + component auths as "Authentication service"{ + port 8002 + } + component users as "User service"{ + port 8001 + } + component records as "Record service"{ + port 8004 + } + component questions as "Question service"{ + port 8003 + } + component qg as "Question generator" } } } @@ -107,8 +108,7 @@ records -[#red]-> Records questions -[#red]-> Questions qg -[#red]-> Questions qg -[dotted]-> Wikidata ----- - +**** This diagram shows the infrastructure of our application when deployed. *TBD* From dd55d6127a2b54a576c1a2975b9645a7fcb977c6 Mon Sep 17 00:00:00 2001 From: Mister-Mario <mariojr2003@gmail.com> Date: Sun, 31 Mar 2024 21:42:41 +0200 Subject: [PATCH 7/9] Now we can correctly extract records from the db using the correspoding endpoint --- gatewayservice/gateway-service.js | 2 +- users/recordservice/record-model.js | 14 +++++++++++--- users/recordservice/record-service.js | 10 +++++----- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index a7ffc772..b145db56 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -68,7 +68,7 @@ app.get('/records/:user', async(req, res)=>{ const user = req.params.user; // Forward the record request to the record service const recordResponse = await axios.get(recordServiceUrl + '/records/' + user); - res.send(recordResponse.record); + res.json(recordResponse.data); } catch (error) { res.send(error); } diff --git a/users/recordservice/record-model.js b/users/recordservice/record-model.js index 7f7bb6c5..7e65f5b7 100644 --- a/users/recordservice/record-model.js +++ b/users/recordservice/record-model.js @@ -1,10 +1,18 @@ const mongoose = require('mongoose'); const recordSchema = new mongoose.Schema({ - username:String, - games:[String] + userIdentification: String, + games: [{ + questions: [{ + question: String, + answers: [String], + answerGiven: String, + correctAnswer: String + }], + points: Number, + date: String + }] }); - const Record = mongoose.model('Record', recordSchema); module.exports = Record \ No newline at end of file diff --git a/users/recordservice/record-service.js b/users/recordservice/record-service.js index 2c837940..d28d42ac 100644 --- a/users/recordservice/record-service.js +++ b/users/recordservice/record-service.js @@ -40,13 +40,13 @@ app.post('/addrecord', async (req, res) => { }); app.get('/records/:user', async (req, res) => { + console.log(req.params.user); try { - const record = await Record.findOne({ user: req.params.user }); - - if (!record) { - res.json({ record: "No hay usuario" }); + const recordFound = await Record.findOne({ userIdentification: req.params.user }, 'games'); + if (!recordFound) { + res.json({record: "No hay usuario" }); } else { - res.json(record); + res.json({record : recordFound}); } } catch (err) { res.status(500).json({ error: "undefined" }); From 6298d0f5c9fbce86b0ad6b4a44927f92268e0dc0 Mon Sep 17 00:00:00 2001 From: Mister-Mario <mariojr2003@gmail.com> Date: Mon, 1 Apr 2024 22:52:45 +0200 Subject: [PATCH 8/9] Added tests for the record-service and it works --- users/recordservice/package-lock.json | 5413 ++++++++++++++++++++ users/recordservice/record-model.js | 2 +- users/recordservice/record-service.js | 50 +- users/recordservice/record-service.test.js | 94 + 4 files changed, 5521 insertions(+), 38 deletions(-) create mode 100644 users/recordservice/package-lock.json create mode 100644 users/recordservice/record-service.test.js diff --git a/users/recordservice/package-lock.json b/users/recordservice/package-lock.json new file mode 100644 index 00000000..3c14ad3e --- /dev/null +++ b/users/recordservice/package-lock.json @@ -0,0 +1,5413 @@ +{ + "name": "userservice", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "userservice", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "express": "^4.18.2", + "mongoose": "^8.0.4" + }, + "devDependencies": { + "jest": "^29.7.0", + "mongodb-memory-server": "^9.1.5", + "supertest": "^6.3.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.2.tgz", + "integrity": "sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.24.1.tgz", + "integrity": "sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.3", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.24.3.tgz", + "integrity": "sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "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.24.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.24.1.tgz", + "integrity": "sha512-DfCRfZsBcrPEHUfuBMgbJ1Ut01Y/itOs+hY2nFLgqsqXd52/iSiVq5TITtUasIUgm+IIKdY2/1I7auiQOEeC9A==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "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.24.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.24.3.tgz", + "integrity": "sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.24.0" + }, + "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.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", + "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.24.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.1.tgz", + "integrity": "sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==", + "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.24.1", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.1.tgz", + "integrity": "sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.2", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz", + "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.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.24.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.1.tgz", + "integrity": "sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==", + "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.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.1.tgz", + "integrity": "sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "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.24.1", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.1.tgz", + "integrity": "sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.1.tgz", + "integrity": "sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@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.24.1", + "@babel/types": "^7.24.0", + "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.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", + "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.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "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.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "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.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "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.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", + "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==", + "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.12.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.12.2.tgz", + "integrity": "sha512-zQ0NYO87hyN6Xrclcqp7f8ZbXNbRfoGWNcMvHTPQp9UUrwI0mI7XBz+cu7/W6/VClYo2g63B0cjull/srU7LgQ==", + "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.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.2.2.tgz", + "integrity": "sha512-h7z00dWdG0PYOQEvChhOSWvOfkIKsdZGkWr083FgN/HyoQuebSew/cgirYqh9SCuy/hRvxc5Vy6Fw8xAmYHLkQ==", + "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-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.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "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.30001603", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001603.tgz", + "integrity": "sha512-iL2iSS0eDILMb9n5yKQoTBim9jMZ0Yrk8g0N9K7UzYyWnfIKzXBZD5ngpM37ZcL/cv0Mli8XtVMRYMQAfFpi5Q==", + "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.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "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.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.723", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.723.tgz", + "integrity": "sha512-rxFVtrMGMFROr4qqU6n95rUi9IlfIm+lIAt+hOToy/9r6CDv0XiEcQdC3VP71y1pE5CFTzKV0RvxOGYCPWWHPw==", + "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-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "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.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.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/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.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "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.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "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.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "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/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "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.8", + "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-9.1.8.tgz", + "integrity": "sha512-QumPTOlWWWzgW6dtV4bf+ZFdTxenHSSGS4ZT85Vbb+FzPVoOtfcFwYlSfC9IM4e2nw7xvnQZvWtILYseO6HE9Q==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "mongodb-memory-server-core": "9.1.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core": { + "version": "9.1.8", + "resolved": "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-9.1.8.tgz", + "integrity": "sha512-iCWwaP7De4lm1lRCUKB2ffUYr6GB0I/cj6fK0NV9dgwc9fA3xapHTTT/cPYRNx29M5gmAOSaOpUgjP7i2GZ/LQ==", + "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.6", + "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.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "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.4", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.2.4.tgz", + "integrity": "sha512-da/r6zpG+2eAXuhBGUnL6jcBd03zlytoCc5/wq+LyTsmrY9hhPQmSpnugwnfqldtBmUOhB6iMLoV4hNtHRq+ww==", + "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.5.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.5.0.tgz", + "integrity": "sha512-DXf1BTAS8vKyR90BO4x5v3rKVarmkdkzwOrnYDFdjAY694ILNDkmA3uRh1xXJEl+C1DAh8XCvAQ+Gh3kzubtpg==", + "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.1.0", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.1.0.tgz", + "integrity": "sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==", + "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.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "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.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "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.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "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/users/recordservice/record-model.js b/users/recordservice/record-model.js index 7e65f5b7..a7a30d76 100644 --- a/users/recordservice/record-model.js +++ b/users/recordservice/record-model.js @@ -1,7 +1,7 @@ const mongoose = require('mongoose'); const recordSchema = new mongoose.Schema({ - userIdentification: String, + user: String, games: [{ questions: [{ question: String, diff --git a/users/recordservice/record-service.js b/users/recordservice/record-service.js index d28d42ac..d49c2909 100644 --- a/users/recordservice/record-service.js +++ b/users/recordservice/record-service.js @@ -15,41 +15,40 @@ const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/userdb'; mongoose.connect(mongoUri); //Fire and forget -app.post('/addrecord', async (req, res) => { +app.post('/record', async (req, res) => { const user = req.body.user; const game = req.body.game; - console.log(game) - console.log(user) - let record = await Record.findOne({ username : user }); + let record = await Record.findOne({ user : user }); + console.log(record) if(record){ //If it exits record.games.push(game); } else{ //Lo creamos record = new Record({ - username:user, + user:user, games:[game] }); } try { - const savedRecord = await record.save(); - console.log("Record saved successfully:", savedRecord); + const savedRecord = await record.save(); + res.json({user:savedRecord.user}); } catch (err) { - console.error("There was an error while saving the record:", err); + console.log(err); + res.status(500).json({error : 'Hubo un error en el servidor'}); } }); -app.get('/records/:user', async (req, res) => { - console.log(req.params.user); +app.get('/record/:user', async (req, res) => { try { - const recordFound = await Record.findOne({ userIdentification: req.params.user }, 'games'); + const recordFound = await Record.findOne({ user: req.params.user }, 'games'); if (!recordFound) { - res.json({record: "No hay usuario" }); + res.json({record: "undefined" }); } else { res.json({record : recordFound}); } } catch (err) { - res.status(500).json({ error: "undefined" }); + res.status(500).json({ error: "Hubo un error en el servidor" }); } }); @@ -63,27 +62,4 @@ server.on('close', () => { mongoose.connection.close(); }); -module.exports = server - - -// Record.findOne({ username: "nombreDeUsuario" }, (err, record) => { -// if (err) { -// console.error("Error al recuperar el documento:", err); -// return; -// } - -// if (!record) { -// console.log("No se encontró ningún documento para el nombre de usuario dado."); -// return; -// } - -// record.games.push("nuevoJuego"); - -// record.save((err, updatedRecord) => { -// if (err) { -// console.error("Error al guardar el documento actualizado:", err); -// return; -// } -// console.log("Documento actualizado correctamente:", updatedRecord); -// }); -// }); \ No newline at end of file +module.exports = server \ No newline at end of file diff --git a/users/recordservice/record-service.test.js b/users/recordservice/record-service.test.js new file mode 100644 index 00000000..a364e61e --- /dev/null +++ b/users/recordservice/record-service.test.js @@ -0,0 +1,94 @@ +const request = require('supertest'); +const { MongoMemoryServer } = require('mongodb-memory-server'); + +let mongoServer; +let app; + +beforeAll(async () => { + mongoServer = await MongoMemoryServer.create(); + const mongoUri = mongoServer.getUri(); + process.env.MONGODB_URI = mongoUri; + app = require('./record-service'); +}); + +afterAll(async () => { + app.close(); + await mongoServer.stop(); +}); + +describe('Record Service', () => { + it('should add a new record on POST /record', async () => { + const newUser = { + user:"testuser", + game: + { + "questions": [ + { + "question": "¿Cuál es el río más largo del mundo?", + "answers": ["Nilo", "Amazonas", "Yangtsé", "Misisipi"], + "answerGiven": "Amazonas", + "correctAnswer": "Amazonas" + }, + { + "question": "¿Cuál es el elemento más abundante en la corteza terrestre?", + "answers": ["Hierro", "Oxígeno", "Silicio", "Aluminio"], + "answerGiven": "Oxígeno", + "correctAnswer": "Oxígeno" + } + ], + "points": 2500, + "date": "02/02/24" + } + }; + + const response = await request(app).post('/record').send(newUser); + expect(response.status).toBe(200); + expect(response.body).toHaveProperty('user', 'testuser'); + }); + + it('should get back on GET /record/testuser', async () => { + const responseGet = await request(app).get('/record/testuser'); + expect(responseGet.status).toBe(200); + expect(responseGet.body.record.games[0]).toHaveProperty('date', '02/02/24'); + }); + + it('should get undefined on GET /record/u', async () => { + const responseGet = await request(app).get('/record/u'); + expect(responseGet.status).toBe(200); + expect(responseGet.body).toHaveProperty('record', 'undefined'); + }); + + it('should add a new record with the same user on POST /record, and get it back on GET /record/testuser with both games', async () => { + const testUser = { + user:"testuser", + game: + { + "questions": [ + { + "question": "¿Cuál es la capital de Francia?", + "answers": ["Londres", "Madrid", "Berlín", "París"], + "answerGiven": "París", + "correctAnswer": "París" + }, + { + "question": "¿Quién escribió 'Cien años de soledad'?", + "answers": ["Gabriel García Márquez", "Mario Vargas Llosa", "Julio Cortázar", "Pablo Neruda"], + "answerGiven": "Gabriel García Márquez", + "correctAnswer": "Gabriel García Márquez" + } + ], + "points": 3000, + "date": "03/03/24" + } + }; + + let responseAdd = await request(app).post('/record').send(testUser); + expect(responseAdd.status).toBe(200); + + const responseGet = await request(app).get('/record/testuser'); + expect(responseGet.status).toBe(200); + expect(responseGet.body.record.games[0]).toHaveProperty('date', '02/02/24'); + expect(responseGet.body.record.games[1]).toHaveProperty('date', '03/03/24'); + + }); +}); \ No newline at end of file From b1d38fc3f5bff602e098407c414486a219999986 Mon Sep 17 00:00:00 2001 From: Mister-Mario <mariojr2003@gmail.com> Date: Tue, 2 Apr 2024 21:02:33 +0200 Subject: [PATCH 9/9] Added a new test case --- users/recordservice/record-service.js | 40 ++++++----- users/recordservice/record-service.test.js | 83 ++++++++++++++++++++++ 2 files changed, 104 insertions(+), 19 deletions(-) diff --git a/users/recordservice/record-service.js b/users/recordservice/record-service.js index d49c2909..aa0ace2b 100644 --- a/users/recordservice/record-service.js +++ b/users/recordservice/record-service.js @@ -18,25 +18,27 @@ mongoose.connect(mongoUri); app.post('/record', async (req, res) => { const user = req.body.user; const game = req.body.game; - let record = await Record.findOne({ user : user }); - console.log(record) - if(record){ //If it exits - record.games.push(game); - } - else{ //Lo creamos - record = new Record({ - user:user, - games:[game] - }); - } - - try { - const savedRecord = await record.save(); - res.json({user:savedRecord.user}); - } catch (err) { - console.log(err); - res.status(500).json({error : 'Hubo un error en el servidor'}); + if(user && game){ + let record = await Record.findOne({ user : user }); + if(record){ //If it exits + record.games.push(game); } + else{ //Lo creamos + record = new Record({ + user:user, + games:[game] + }); + } + + try { + const savedRecord = await record.save(); + res.json({user:savedRecord.user}); + } catch (err) { + console.log(err); + res.status(500).send(); + } + } + res.status(400).send(); }); app.get('/record/:user', async (req, res) => { @@ -48,7 +50,7 @@ app.get('/record/:user', async (req, res) => { res.json({record : recordFound}); } } catch (err) { - res.status(500).json({ error: "Hubo un error en el servidor" }); + res.status(500).send(); } }); diff --git a/users/recordservice/record-service.test.js b/users/recordservice/record-service.test.js index a364e61e..d2c2ca6e 100644 --- a/users/recordservice/record-service.test.js +++ b/users/recordservice/record-service.test.js @@ -17,6 +17,89 @@ afterAll(async () => { }); describe('Record Service', () => { + it('should give a 400 with a bad requests on POST /record', async () => { + //Does not have neither user nor game + let newUser = { + bad:"testuser", + bad2: + { + "questions": [ + { + "question": "¿Cuál es el río más largo del mundo?", + "answers": ["Nilo", "Amazonas", "Yangtsé", "Misisipi"], + "answerGiven": "Amazonas", + "correctAnswer": "Amazonas" + }, + { + "question": "¿Cuál es el elemento más abundante en la corteza terrestre?", + "answers": ["Hierro", "Oxígeno", "Silicio", "Aluminio"], + "answerGiven": "Oxígeno", + "correctAnswer": "Oxígeno" + } + ], + "points": 2500, + "date": "02/02/24" + } + }; + + let response = await request(app).post('/record').send(newUser); + expect(response.status).toBe(400); + + //Does not have game + newUser = { + user:"testuser", + bad: + { + "questions": [ + { + "question": "¿Cuál es el río más largo del mundo?", + "answers": ["Nilo", "Amazonas", "Yangtsé", "Misisipi"], + "answerGiven": "Amazonas", + "correctAnswer": "Amazonas" + }, + { + "question": "¿Cuál es el elemento más abundante en la corteza terrestre?", + "answers": ["Hierro", "Oxígeno", "Silicio", "Aluminio"], + "answerGiven": "Oxígeno", + "correctAnswer": "Oxígeno" + } + ], + "points": 2500, + "date": "02/02/24" + } + }; + + response = await request(app).post('/record').send(newUser); + expect(response.status).toBe(400); + + //Does not have user + newUser = { + bad:"testuser", + game: + { + "questions": [ + { + "question": "¿Cuál es el río más largo del mundo?", + "answers": ["Nilo", "Amazonas", "Yangtsé", "Misisipi"], + "answerGiven": "Amazonas", + "correctAnswer": "Amazonas" + }, + { + "question": "¿Cuál es el elemento más abundante en la corteza terrestre?", + "answers": ["Hierro", "Oxígeno", "Silicio", "Aluminio"], + "answerGiven": "Oxígeno", + "correctAnswer": "Oxígeno" + } + ], + "points": 2500, + "date": "02/02/24" + } + }; + + response = await request(app).post('/record').send(newUser); + expect(response.status).toBe(400); + + }); it('should add a new record on POST /record', async () => { const newUser = { user:"testuser",