From 689c5e09b24365b77171760109c8e94c85e88e03 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 08:01:34 -0300 Subject: [PATCH 01/73] migrate --- api/product.js | 21 ------ index.js | 54 +++++++++++++-- package.json | 24 +++---- routes/index.js | 9 +++ routes/member.js | 27 ++++++++ src/configurations/db.config.js | 12 ++++ .../schemas/member/Member.schema.js | 23 +++++++ src/repositories/MongoMemberRepository.js | 34 ++++++++++ src/services/member.service.js | 65 +++++++++++++++++++ 9 files changed, 232 insertions(+), 37 deletions(-) delete mode 100644 api/product.js create mode 100644 routes/index.js create mode 100644 routes/member.js create mode 100644 src/configurations/db.config.js create mode 100644 src/configurations/schemas/member/Member.schema.js create mode 100644 src/repositories/MongoMemberRepository.js create mode 100644 src/services/member.service.js diff --git a/api/product.js b/api/product.js deleted file mode 100644 index 6ef01d2..0000000 --- a/api/product.js +++ /dev/null @@ -1,21 +0,0 @@ -const express = require("express"); -const router = express.Router(); - -/** - * GET product list. - * - * @return product list | empty. - */ -router.get("/", async (req, res) => { - try { - res.json({ - status: 200, - message: "Get data has successfully", - }); - } catch (error) { - console.error(error); - return res.status(500).send("Server error"); - } -}); - -module.exports = router; diff --git a/index.js b/index.js index ee03213..cc99db3 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,56 @@ -const express = require("express"); +const express = require('express'); +const path = require('path'); +const cookieParser = require('cookie-parser'); +const logger = require('morgan'); +const dotenv = require('dotenv'); +const cors = require('cors'); +const createError = require('http-errors'); +const indexRouter = require('./routes/index'); +const memberRouter = require('./routes/member'); +const db = require('./src/configurations/db.config'); + +dotenv.config({ path: '.env' }); + const app = express(); -const product = require("./api/product"); +(async () => { + try { + await db(); + console.log('MongoDB connected successfully'); + } catch (error) { + console.error('Error connecting to MongoDB:', error); + } +})(); + +// Configuración del motor de vistas + +app.use(logger('dev')); app.use(express.json({ extended: false })); +app.use(express.urlencoded({ extended: false })); +app.use(cookieParser()); +app.use(cors()); -app.use("/api/product", product); +// Rutas +app.use('/', indexRouter); +app.use('/members', memberRouter); + +// Captura 404 y reenvía al manejador de errores +app.use(function(req, res, next) { + next(createError(404)); +}); + +// Manejador de errores +app.use(function(err, req, res, next) { + // Proporciona error solo en desarrollo + res.locals.message = err.message; + res.locals.error = req.app.get('env') === 'development' ? err : {}; + + // Renderiza la página de error + res.status(err.status || 500); + res.render('error'); +}); const PORT = process.env.PORT || 8080; -app.listen(PORT, () => console.log(`Server is running in port ${PORT}`)); +app.listen(PORT, () => console.log(`Server is running on port ${PORT}`)); + +module.exports = app; diff --git a/package.json b/package.json index 06deb91..b93de6f 100644 --- a/package.json +++ b/package.json @@ -9,18 +9,18 @@ "scripts": { "start": "node index.js" }, - "repository": { - "type": "git", - "url": "git+https://github.com/hatuanem199801/express-vercel.git" - }, - "keywords": [], - "author": "", - "license": "ISC", - "bugs": { - "url": "https://github.com/hatuanem199801/express-vercel/issues" - }, - "homepage": "https://github.com/hatuanem199801/express-vercel#readme", "dependencies": { - "express": "^4.17.1" + "cookie-parser": "~1.4.4", + "debug": "~2.6.9", + "express": "~4.16.1", + "http-errors": "~1.6.3", + "jade": "~1.11.0", + "morgan": "~1.9.1", + "mongoose": "^8.3.1", + "cors": "^2.8.5", + "dotenv": "^16.4.5" + }, + "devDependencies": { + "nodemon": "^3.1.0" } } diff --git a/routes/index.js b/routes/index.js new file mode 100644 index 0000000..ecca96a --- /dev/null +++ b/routes/index.js @@ -0,0 +1,9 @@ +var express = require('express'); +var router = express.Router(); + +/* GET home page. */ +router.get('/', function(req, res, next) { + res.render('index', { title: 'Express' }); +}); + +module.exports = router; diff --git a/routes/member.js b/routes/member.js new file mode 100644 index 0000000..1642e84 --- /dev/null +++ b/routes/member.js @@ -0,0 +1,27 @@ +const express = require('express'); +const { + createMember, + getMembers, + getMemberById, + updateMember, + deleteMember +} = require('../src/services/member.service'); + +const router = express.Router(); + +// POST create a member +router.post('/members', createMember); + +// GET list of members +router.get('/members', getMembers); + +// GET member by ID +router.get('/members/:id', getMemberById); + +// PUT update member by ID +router.put('/members/:id', updateMember); + +// DELETE member by ID +router.delete('/members/:id', deleteMember); + +module.exports = router; diff --git a/src/configurations/db.config.js b/src/configurations/db.config.js new file mode 100644 index 0000000..32e44f3 --- /dev/null +++ b/src/configurations/db.config.js @@ -0,0 +1,12 @@ +const mongoose = require('mongoose'); + +const db = async () => { + try { + await mongoose.connect(`mongodb+srv://${process.env.DB_USER_NAME}:${process.env.DB_PASSWORD}@iepe.bkgwmcp.mongodb.net/${process.env.DB_NAME}?retryWrites=true&w=majority&appName=IEPE`); + console.log('Connected to MongoDB'); + } catch (err) { + console.log(err); + } +}; + +module.exports = db; diff --git a/src/configurations/schemas/member/Member.schema.js b/src/configurations/schemas/member/Member.schema.js new file mode 100644 index 0000000..28bf41c --- /dev/null +++ b/src/configurations/schemas/member/Member.schema.js @@ -0,0 +1,23 @@ +const mongoose = require('mongoose'); +const { Schema } = mongoose; + +const memberSchema = new Schema({ + dni: { type: String, required: true }, + firstName: { type: String, required: true }, + lastName: { type: String, required: true }, + avatar: { type: String, required: false }, + dateOfBirth: { type: Date, required: true }, + address: { type: String, required: true }, + position: { type: String, required: true }, + dateOfJoiningChurch: { type: Date, required: true }, + dateOfBaptism: { type: Date, required: false }, + status: { type: String, required: true }, + telephone: { type: String, required: true }, + maritalStatus: { type: String, required: true }, + locality: { type: String, required: true }, + observations: { type: String, required: false }, +}); + +const MemberModel = mongoose.model('Member', memberSchema); + +module.exports = MemberModel; diff --git a/src/repositories/MongoMemberRepository.js b/src/repositories/MongoMemberRepository.js new file mode 100644 index 0000000..7c7b2af --- /dev/null +++ b/src/repositories/MongoMemberRepository.js @@ -0,0 +1,34 @@ +const MemberModel = require('../configurations/schemas/member/Member.schema'); + +class MongoMemberRepository { + generateCredential() { + return Promise.reject(new Error('Method not implemented.')); + } + + async find() { + const members = await MemberModel.find(); + return members; + } + + async findById(dni) { + const member = await MemberModel.findOne({ dni }); + return member; + } + + async save(member) { + const newMember = new MemberModel(member); + return await newMember.save(); + } + + async update(member) { + const { dni } = member; + return await MemberModel.findOneAndUpdate({ dni }, member, { new: true }); + } + + async delete(dni) { + await MemberModel.deleteOne({ dni }); + return `Member with dni ${dni} deleted successfully.`; + } +} + +module.exports = MongoMemberRepository; diff --git a/src/services/member.service.js b/src/services/member.service.js new file mode 100644 index 0000000..7a3da65 --- /dev/null +++ b/src/services/member.service.js @@ -0,0 +1,65 @@ +const MongoMemberRepository = require('../repositories/MongoMemberRepository'); +const memberRepository = new MongoMemberRepository(); + +const createMember = async (req, res) => { + try { + const member = req.body; + const savedMember = await memberRepository.save(member); + res.status(201).json(savedMember); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const getMembers = async (_req, res) => { + try { + const members = await memberRepository.find(); + res.status(200).json(members); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const getMemberById = async (req, res) => { + try { + const { id } = req.params; + const member = await memberRepository.findById(id); + if (member) { + res.status(200).json(member); + } else { + res.status(404).json({ message: 'Member not found' }); + } + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const updateMember = async (req, res) => { + try { + const { id } = req.params; + const member = req.body; + member.dni = id; + const updatedMember = await memberRepository.update(member); + res.status(200).json(updatedMember); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const deleteMember = async (req, res) => { + try { + const { id } = req.params; + const result = await memberRepository.delete(id); + res.status(200).json({ message: result }); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +module.exports = { + createMember, + getMembers, + getMemberById, + updateMember, + deleteMember +}; From 3e7fa844d2f482bf516f88d14c9ec32ca06718a2 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 08:04:20 -0300 Subject: [PATCH 02/73] versopn node --- .env.example | 3 + package-lock.json | 2294 ++++++++++++++++++++++++++++++++++++++++----- package.json | 2 +- 3 files changed, 2065 insertions(+), 234 deletions(-) create mode 100644 .env.example diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..9db67d7 --- /dev/null +++ b/.env.example @@ -0,0 +1,3 @@ +DB_PASSWORD=XXXXXXXX +DB_NAME=IEPE_DB +DB_USER_NAME=iepuebloelegido \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 832558e..eecac60 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,10 +5,45 @@ "requires": true, "packages": { "": { + "name": "express-vercel", "version": "1.0.0", - "license": "ISC", "dependencies": { - "express": "^4.17.1" + "cookie-parser": "~1.4.4", + "cors": "^2.8.5", + "debug": "~2.6.9", + "dotenv": "^16.4.5", + "express": "~4.16.1", + "http-errors": "~1.6.3", + "jade": "~1.11.0", + "mongoose": "^8.3.1", + "morgan": "~1.9.1" + }, + "devDependencies": { + "nodemon": "^3.1.0" + }, + "engines": { + "node": "14.x" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "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": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" } }, "node_modules/accepts": { @@ -23,71 +58,336 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha512-j3/4pkfih8W4NK22gxVSXcEonTpAHOHh0hu5BoZrKcOsW/4oBPxTi4Yk3SAj+FhC1f3+bRTkXdm4019gw1vg9g==", + "dependencies": { + "acorn": "^2.1.0" + } + }, + "node_modules/align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "dependencies": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "engines": { + "node": ">=0.4.2" + } + }, + "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/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "node_modules/asap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", + "integrity": "sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", "dependencies": { - "bytes": "3.1.0", + "bytes": "3.0.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" }, "engines": { "node": ">= 0.8" } }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", + "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==", + "engines": { + "node": ">=16.20.1" + } + }, "node_modules/bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", "engines": { "node": ">= 0.8" } }, - "node_modules/content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "node_modules/camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", "dependencies": { - "safe-buffer": "5.1.2" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/character-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", + "integrity": "sha512-6OEBVBlf/y8LaAphnbAnt743O3zMhlBer+FO5D40H6wqAdU9B1TvuApkejgLW0cvv0tEZNLktv1AnRI+C87ueQ==" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha512-aTWyttSdI2mYi07kWqHi24NUU9YlELFKGOAgFzZjDN1064DMAOy2FBuoyGmkKRlXkbpXd0EVHmiVkbKhKoirTw==", + "dependencies": { + "commander": "2.8.x", + "source-map": "0.4.x" + }, + "bin": { + "cleancss": "bin/cleancss" }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css/node_modules/commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==", + "dependencies": { + "graceful-readlink": ">= 1.0.0" + }, + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==", + "dependencies": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "node_modules/commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha512-PhbTMT+ilDXZKqH8xbvuUY2ZEQNef0Q7DKxgoEKb4ccytsdvVVJmYqR0sGbi96nxU6oGrwEIQnclpK2NBZuQlg==", + "engines": { + "node": ">= 0.6.x" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/constantinople": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", + "integrity": "sha512-UnEggAQrmhxuTxlb7n1OsTtagNXWUv2CRlOogZhWOU4jLK4EJEbF8UDSNxuGu+jVtWNtO2j51ab2H1wlBIzF/w==", + "deprecated": "Please update to at least constantinople 3.1.1", + "dependencies": { + "acorn": "^2.1.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", "engines": { "node": ">= 0.6" } }, "node_modules/content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "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/cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", "engines": { "node": ">= 0.6" } }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/css": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", + "integrity": "sha512-qmTYWhHk910nQWnGqMAiWWPQlB6tESiWgNebQJmiozOAGcBAQ1+U/UzUOkhdrcshlkSRRiKWodwmVvO0OmnIGg==", + "dependencies": { + "css-parse": "1.0.4", + "css-stringify": "1.0.5" + } + }, + "node_modules/css-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", + "integrity": "sha512-pfstzKVRZiHprDXdsmtfH1HYUEw22lzjuHdnpe1hscwoQvgW2C5zDQIBE0RKoALEReTn9W1ECdY8uaT/kO4VfA==" + }, + "node_modules/css-stringify": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", + "integrity": "sha512-aIThpcErhG5EyHorGqNlTh0TduNBqLrrXLO3x5rku3ZKBxuVfY+T7noyM2G2X/01iQANqJUb6d3+FLoa+N7Xwg==" + }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -96,10 +396,18 @@ "ms": "2.0.0" } }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "engines": { "node": ">= 0.6" } @@ -107,17 +415,28 @@ "node_modules/destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -125,49 +444,49 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "node_modules/etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", "engines": { "node": ">= 0.6" } }, "node_modules/express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "dependencies": { - "accepts": "~1.3.7", + "accepts": "~1.3.5", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.3", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", "vary": "~1.1.2" }, @@ -175,17 +494,37 @@ "node": ">= 0.10.0" } }, + "node_modules/express/node_modules/cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "dependencies": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", "unpipe": "~1.0.0" }, "engines": { @@ -203,30 +542,69 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } }, + "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/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" + }, + "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/http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" }, "engines": { "node": ">= 0.6" } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -234,10 +612,16 @@ "node": ">=0.10.0" } }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "node_modules/ipaddr.js": { "version": "1.9.1", @@ -247,14 +631,136 @@ "node": ">= 0.10" } }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-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-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/jade": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", + "integrity": "sha512-J76sbGKeLtu7uwW97Ntzb1UvGnpKTDplYa9ROr2gNRhM+SxvlBSG0Ees3TQ8+7ya2UVkzMEeFxhRhEpN68s7Tg==", + "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", + "dependencies": { + "character-parser": "1.2.1", + "clean-css": "^3.1.9", + "commander": "~2.6.0", + "constantinople": "~3.0.1", + "jstransformer": "0.0.2", + "mkdirp": "~0.5.0", + "transformers": "2.1.0", + "uglify-js": "^2.4.19", + "void-elements": "~2.0.1", + "with": "~4.0.0" + }, + "bin": { + "jade": "bin/jade.js" + } + }, + "node_modules/jstransformer": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", + "integrity": "sha512-b7tmf91j1ChMuYhwbPBnNgB62dmHuqiHpOdd6QLKzde8HydZqm+ud3qWreGWecSxPBFFNOf1Ozjx0xo2plFdHA==", + "dependencies": { + "is-promise": "^2.0.0", + "promise": "^6.0.1" + } + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "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", @@ -269,14 +775,11 @@ } }, "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", "bin": { "mime": "cli.js" - }, - "engines": { - "node": ">=4" } }, "node_modules/mime-db": { @@ -298,6 +801,172 @@ "node": ">= 0.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==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mongodb": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", + "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.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/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.1.tgz", + "integrity": "sha512-odQ2WEWGL3hb0Qex+QMN4eH6D34WdMEw7F1If2MGABApSDmG9cMmqv/G1H6WsXmuaH9mkuuadW/WbLE5+tHJwA==", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.6.2", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "dependencies": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "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", @@ -311,10 +980,78 @@ "node": ">= 0.6" } }, + "node_modules/nodemon": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", + "integrity": "sha512-m4Vqs+APdKzDFpuaL9F9EVOF85+h070FnkHVEoU4+rmT6Vw0bmNl7s61VEkY/cJkL7RCv1p4urnUDUMrS5rk2w==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/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/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/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/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "dependencies": { "ee-first": "1.1.1" }, @@ -322,6 +1059,22 @@ "node": ">= 0.8" } }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", + "dependencies": { + "wordwrap": "~0.0.2" + } + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -335,6 +1088,26 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "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/promise": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", + "integrity": "sha512-O+uwGKreKNKkshzZv2P7N64lk6EP17iXBn0PbUnNQhk+Q0AHLstiTrjkx3v5YBd3cxUe7Sq6KyRhl/A0xUjk7Q==", + "dependencies": { + "asap": "~1.0.0" + } + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -347,10 +1120,24 @@ "node": ">= 0.10" } }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/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/qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", "engines": { "node": ">=0.6" } @@ -364,19 +1151,50 @@ } }, "node_modules/raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "dependencies": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", + "dependencies": { + "align-text": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -387,10 +1205,22 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", @@ -399,55 +1229,172 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/send/node_modules/ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - }, "node_modules/serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "parseurl": "~1.3.2", + "send": "0.16.2" }, "engines": { "node": ">= 0.8.0" } }, "node_modules/setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.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/statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", "engines": { "node": ">= 0.6" } }, - "node_modules/toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "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": ">=0.6" + "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/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "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/transformers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", + "integrity": "sha512-zJf5m2EIOngmBbDe2fhTPpCjzM2qkZVqrFJZc2jaln+KBeEaYKhS2QMOIkfVrNUyoOwqgbTwOHATzr3jZRQDyg==", + "deprecated": "Deprecated, use jstransformer", + "dependencies": { + "css": "~1.0.8", + "promise": "~2.0", + "uglify-js": "~2.2.5" + } + }, + "node_modules/transformers/node_modules/is-promise": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", + "integrity": "sha512-mjWH5XxnhMA8cFnDchr6qRP9S/kLntKuEfIYku+PaN1CnS8v+OG9O/BKpRCVRJvpIkgAZm0Pf5Is3iSSOILlcg==" + }, + "node_modules/transformers/node_modules/promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", + "integrity": "sha512-OgMc+sxI3zWF8D5BJGtA0z7/IsrDy1/0cPaDv6HPpqa2fSTo7AdON5U10NbZCUeF+zCAj3PtfPE50Hf02386aA==", + "dependencies": { + "is-promise": "~1" + } + }, + "node_modules/transformers/node_modules/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/transformers/node_modules/uglify-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha512-viLk+/8G0zm2aKt1JJAVcz5J/5ytdiNaIsKgrre3yvSUjwVG6ZUujGH7E2TiPigZUwLYCe7eaIUEP2Zka2VJPA==", + "dependencies": { + "optimist": "~0.3.5", + "source-map": "~0.1.7" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.4.0" } }, "node_modules/type-is": { @@ -462,32 +1409,166 @@ "node": ">= 0.6" } }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "engines": { - "node": ">= 0.8" + "node_modules/uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==", + "dependencies": { + "source-map": "~0.5.1", + "yargs": "~3.10.0" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + }, + "optionalDependencies": { + "uglify-to-browserify": "~1.0.0" + } + }, + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", + "optional": true + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/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/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "engines": { + "node": ">=0.10.0" + } + }, + "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": "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/window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/with": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", + "integrity": "sha512-mJZFpyEc1JTAdxhi/vhVeAM2S7vsltEKDiexDDo1HuAzlYKhcVUU6cwY8cHrFYdt82ZNkfKCeyhA3IYFegI0Kg==", + "dependencies": { + "acorn": "^1.0.1", + "acorn-globals": "^1.0.3" } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "node_modules/with/node_modules/acorn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha512-FsqWmApWGMGLKKNpHt12PMc5AK7BaZee0WRh04fCysmTzHe+rrKOa2MKjORhnzfpe4r0JnfdqHn02iDA9Dqj2A==", + "bin": { + "acorn": "bin/acorn" + }, "engines": { - "node": ">= 0.4.0" + "node": ">=0.4.0" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==", "engines": { - "node": ">= 0.8" + "node": ">=0.4.0" + } + }, + "node_modules/yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==", + "dependencies": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" } } }, "dependencies": { + "@mongodb-js/saslprep": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "requires": { + "sparse-bitfield": "^3.0.3" + } + }, + "@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==" + }, + "@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "requires": { + "@types/webidl-conversions": "*" + } + }, "accepts": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", @@ -497,56 +1578,260 @@ "negotiator": "0.6.2" } }, + "acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==" + }, + "acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha512-j3/4pkfih8W4NK22gxVSXcEonTpAHOHh0hu5BoZrKcOsW/4oBPxTi4Yk3SAj+FhC1f3+bRTkXdm4019gw1vg9g==", + "requires": { + "acorn": "^2.1.0" + } + }, + "align-text": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", + "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "requires": { + "kind-of": "^3.0.2", + "longest": "^1.0.1", + "repeat-string": "^1.5.2" + } + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" + }, + "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, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "asap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", + "integrity": "sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==" + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "requires": { + "safe-buffer": "5.1.2" + } + }, + "binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true + }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", + "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", "requires": { - "bytes": "3.1.0", + "bytes": "3.0.0", "content-type": "~1.0.4", "debug": "2.6.9", "depd": "~1.1.2", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", + "http-errors": "~1.6.3", + "iconv-lite": "0.4.23", "on-finished": "~2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "~1.6.17" + "qs": "6.5.2", + "raw-body": "2.3.3", + "type-is": "~1.6.16" } }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "bson": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", + "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==" + }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==" + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" }, - "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "camelcase": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", + "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==" + }, + "center-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", + "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", "requires": { - "safe-buffer": "5.1.2" + "align-text": "^0.1.3", + "lazy-cache": "^1.0.3" + } + }, + "character-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", + "integrity": "sha512-6OEBVBlf/y8LaAphnbAnt743O3zMhlBer+FO5D40H6wqAdU9B1TvuApkejgLW0cvv0tEZNLktv1AnRI+C87ueQ==" + }, + "chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" } }, + "clean-css": { + "version": "3.4.28", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", + "integrity": "sha512-aTWyttSdI2mYi07kWqHi24NUU9YlELFKGOAgFzZjDN1064DMAOy2FBuoyGmkKRlXkbpXd0EVHmiVkbKhKoirTw==", + "requires": { + "commander": "2.8.x", + "source-map": "0.4.x" + }, + "dependencies": { + "commander": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", + "integrity": "sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==", + "requires": { + "graceful-readlink": ">= 1.0.0" + } + } + } + }, + "cliui": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", + "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==", + "requires": { + "center-align": "^0.1.1", + "right-align": "^0.1.1", + "wordwrap": "0.0.2" + } + }, + "commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha512-PhbTMT+ilDXZKqH8xbvuUY2ZEQNef0Q7DKxgoEKb4ccytsdvVVJmYqR0sGbi96nxU6oGrwEIQnclpK2NBZuQlg==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "constantinople": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", + "integrity": "sha512-UnEggAQrmhxuTxlb7n1OsTtagNXWUv2CRlOogZhWOU4jLK4EJEbF8UDSNxuGu+jVtWNtO2j51ab2H1wlBIzF/w==", + "requires": { + "acorn": "^2.1.0" + } + }, + "content-disposition": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", + "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" + }, "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==" }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==" + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==" + }, + "cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "requires": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + } }, "cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "css": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", + "integrity": "sha512-qmTYWhHk910nQWnGqMAiWWPQlB6tESiWgNebQJmiozOAGcBAQ1+U/UzUOkhdrcshlkSRRiKWodwmVvO0OmnIGg==", + "requires": { + "css-parse": "1.0.4", + "css-stringify": "1.0.5" + } + }, + "css-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", + "integrity": "sha512-pfstzKVRZiHprDXdsmtfH1HYUEw22lzjuHdnpe1hscwoQvgW2C5zDQIBE0RKoALEReTn9W1ECdY8uaT/kO4VfA==" + }, + "css-stringify": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", + "integrity": "sha512-aIThpcErhG5EyHorGqNlTh0TduNBqLrrXLO3x5rku3ZKBxuVfY+T7noyM2G2X/01iQANqJUb6d3+FLoa+N7Xwg==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -555,84 +1840,110 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, "depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" }, "destroy": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" + "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + }, + "dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.16.4", + "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", + "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", "requires": { - "accepts": "~1.3.7", + "accepts": "~1.3.5", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", + "body-parser": "1.18.3", + "content-disposition": "0.5.2", "content-type": "~1.0.4", - "cookie": "0.4.0", + "cookie": "0.3.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "~1.1.2", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "~1.1.2", + "finalhandler": "1.1.1", "fresh": "0.5.2", "merge-descriptors": "1.0.1", "methods": "~1.1.2", "on-finished": "~2.3.0", - "parseurl": "~1.3.3", + "parseurl": "~1.3.2", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.5", - "qs": "6.7.0", - "range-parser": "~1.2.1", + "proxy-addr": "~2.0.4", + "qs": "6.5.2", + "range-parser": "~1.2.0", "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "~1.5.0", - "type-is": "~1.6.18", + "send": "0.16.2", + "serve-static": "1.13.2", + "setprototypeof": "1.1.0", + "statuses": "~1.4.0", + "type-is": "~1.6.16", "utils-merge": "1.0.1", "vary": "~1.1.2" + }, + "dependencies": { + "cookie": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", + "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==" + } + } + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", + "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "on-finished": "~2.3.0", - "parseurl": "~1.3.3", - "statuses": "~1.5.0", + "parseurl": "~1.3.2", + "statuses": "~1.4.0", "unpipe": "~1.0.0" } }, @@ -644,42 +1955,168 @@ "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" + }, + "fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-readlink": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", + "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" + }, + "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 }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "requires": { "depd": "~1.1.2", "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" } }, "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", + "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "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 + }, + "is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "jade": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", + "integrity": "sha512-J76sbGKeLtu7uwW97Ntzb1UvGnpKTDplYa9ROr2gNRhM+SxvlBSG0Ees3TQ8+7ya2UVkzMEeFxhRhEpN68s7Tg==", + "requires": { + "character-parser": "1.2.1", + "clean-css": "^3.1.9", + "commander": "~2.6.0", + "constantinople": "~3.0.1", + "jstransformer": "0.0.2", + "mkdirp": "~0.5.0", + "transformers": "2.1.0", + "uglify-js": "^2.4.19", + "void-elements": "~2.0.1", + "with": "~4.0.0" + } + }, + "jstransformer": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", + "integrity": "sha512-b7tmf91j1ChMuYhwbPBnNgB62dmHuqiHpOdd6QLKzde8HydZqm+ud3qWreGWecSxPBFFNOf1Ozjx0xo2plFdHA==", + "requires": { + "is-promise": "^2.0.0", + "promise": "^6.0.1" + } + }, + "kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==" + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "requires": { + "is-buffer": "^1.1.5" + } + }, + "lazy-cache": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", + "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==" + }, + "longest": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", + "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==" + }, "media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==" + }, + "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==" }, "merge-descriptors": { "version": "1.0.1", @@ -692,9 +2129,9 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" }, "mime-db": { "version": "1.48.0", @@ -709,6 +2146,108 @@ "mime-db": "1.48.0" } }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" + }, + "mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "requires": { + "minimist": "^1.2.6" + } + }, + "mongodb": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", + "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==", + "requires": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.0", + "mongodb-connection-string-url": "^3.0.0" + } + }, + "mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "requires": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "mongoose": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.1.tgz", + "integrity": "sha512-odQ2WEWGL3hb0Qex+QMN4eH6D34WdMEw7F1If2MGABApSDmG9cMmqv/G1H6WsXmuaH9mkuuadW/WbLE5+tHJwA==", + "requires": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.6.2", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "requires": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + } + }, + "mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==" + }, + "mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "requires": { + "debug": "4.x" + }, + "dependencies": { + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -719,14 +2258,73 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" }, + "nodemon": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", + "integrity": "sha512-m4Vqs+APdKzDFpuaL9F9EVOF85+h070FnkHVEoU4+rmT6Vw0bmNl7s61VEkY/cJkL7RCv1p4urnUDUMrS5rk2w==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "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 + }, + "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==" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "requires": { "ee-first": "1.1.1" } }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", + "requires": { + "wordwrap": "~0.0.2" + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -737,6 +2335,20 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "promise": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", + "integrity": "sha512-O+uwGKreKNKkshzZv2P7N64lk6EP17iXBn0PbUnNQhk+Q0AHLstiTrjkx3v5YBd3cxUe7Sq6KyRhl/A0xUjk7Q==", + "requires": { + "asap": "~1.0.0" + } + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -746,10 +2358,21 @@ "ipaddr.js": "1.9.1" } }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" + }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==" + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" }, "range-parser": { "version": "1.2.1", @@ -757,16 +2380,38 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", + "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", - "iconv-lite": "0.4.24", + "bytes": "3.0.0", + "http-errors": "1.6.3", + "iconv-lite": "0.4.23", "unpipe": "1.0.0" } }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" + }, + "right-align": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", + "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", + "requires": { + "align-text": "^0.1.1" + } + }, "safe-buffer": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", @@ -777,10 +2422,16 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "dev": true + }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", + "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", "depd": "~1.1.2", @@ -789,46 +2440,138 @@ "escape-html": "~1.0.3", "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "~1.7.2", - "mime": "1.6.0", - "ms": "2.1.1", + "http-errors": "~1.6.2", + "mime": "1.4.1", + "ms": "2.0.0", "on-finished": "~2.3.0", - "range-parser": "~1.2.1", - "statuses": "~1.5.0" - }, - "dependencies": { - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==" - } + "range-parser": "~1.2.0", + "statuses": "~1.4.0" } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", + "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" + "parseurl": "~1.3.2", + "send": "0.16.2" } }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==" + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "sift": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "requires": { + "semver": "^7.5.3" + } + }, + "source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "requires": { + "memory-pager": "^1.0.2" + } }, "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==" + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true + }, + "tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "requires": { + "punycode": "^2.3.0" + } + }, + "transformers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", + "integrity": "sha512-zJf5m2EIOngmBbDe2fhTPpCjzM2qkZVqrFJZc2jaln+KBeEaYKhS2QMOIkfVrNUyoOwqgbTwOHATzr3jZRQDyg==", + "requires": { + "css": "~1.0.8", + "promise": "~2.0", + "uglify-js": "~2.2.5" + }, + "dependencies": { + "is-promise": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", + "integrity": "sha512-mjWH5XxnhMA8cFnDchr6qRP9S/kLntKuEfIYku+PaN1CnS8v+OG9O/BKpRCVRJvpIkgAZm0Pf5Is3iSSOILlcg==" + }, + "promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", + "integrity": "sha512-OgMc+sxI3zWF8D5BJGtA0z7/IsrDy1/0cPaDv6HPpqa2fSTo7AdON5U10NbZCUeF+zCAj3PtfPE50Hf02386aA==", + "requires": { + "is-promise": "~1" + } + }, + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "requires": { + "amdefine": ">=0.0.4" + } + }, + "uglify-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha512-viLk+/8G0zm2aKt1JJAVcz5J/5ytdiNaIsKgrre3yvSUjwVG6ZUujGH7E2TiPigZUwLYCe7eaIUEP2Zka2VJPA==", + "requires": { + "optimist": "~0.3.5", + "source-map": "~0.1.7" + } + } + } }, "type-is": { "version": "1.6.18", @@ -839,10 +2582,39 @@ "mime-types": "~2.1.24" } }, + "uglify-js": { + "version": "2.8.29", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", + "integrity": "sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==", + "requires": { + "source-map": "~0.5.1", + "uglify-to-browserify": "~1.0.0", + "yargs": "~3.10.0" + }, + "dependencies": { + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" + } + } + }, + "uglify-to-browserify": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", + "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", + "optional": true + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, "utils-merge": { "version": "1.0.1", @@ -853,6 +2625,62 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" + }, + "void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==" + }, + "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==" + }, + "whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "requires": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + } + }, + "window-size": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", + "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==" + }, + "with": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", + "integrity": "sha512-mJZFpyEc1JTAdxhi/vhVeAM2S7vsltEKDiexDDo1HuAzlYKhcVUU6cwY8cHrFYdt82ZNkfKCeyhA3IYFegI0Kg==", + "requires": { + "acorn": "^1.0.1", + "acorn-globals": "^1.0.3" + }, + "dependencies": { + "acorn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha512-FsqWmApWGMGLKKNpHt12PMc5AK7BaZee0WRh04fCysmTzHe+rrKOa2MKjORhnzfpe4r0JnfdqHn02iDA9Dqj2A==" + } + } + }, + "wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==" + }, + "yargs": { + "version": "3.10.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", + "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==", + "requires": { + "camelcase": "^1.0.2", + "cliui": "^2.1.0", + "decamelize": "^1.0.0", + "window-size": "0.1.0" + } } } } diff --git a/package.json b/package.json index b93de6f..b5b61e8 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Deploy express js to vercel.", "main": "index.js", "engines": { - "node" : "14.x" + "node" : "16.x" }, "scripts": { "start": "node index.js" From f3674a73be8fe139baa13bb81782024d79e6719a Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 08:16:08 -0300 Subject: [PATCH 03/73] basic --- index.js | 26 +------------------------- package.json | 3 --- 2 files changed, 1 insertion(+), 28 deletions(-) diff --git a/index.js b/index.js index cc99db3..295a2e9 100644 --- a/index.js +++ b/index.js @@ -1,10 +1,7 @@ const express = require('express'); -const path = require('path'); const cookieParser = require('cookie-parser'); -const logger = require('morgan'); const dotenv = require('dotenv'); const cors = require('cors'); -const createError = require('http-errors'); const indexRouter = require('./routes/index'); const memberRouter = require('./routes/member'); const db = require('./src/configurations/db.config'); @@ -22,35 +19,14 @@ const app = express(); } })(); -// Configuración del motor de vistas - -app.use(logger('dev')); app.use(express.json({ extended: false })); -app.use(express.urlencoded({ extended: false })); -app.use(cookieParser()); app.use(cors()); // Rutas app.use('/', indexRouter); app.use('/members', memberRouter); -// Captura 404 y reenvía al manejador de errores -app.use(function(req, res, next) { - next(createError(404)); -}); - -// Manejador de errores -app.use(function(err, req, res, next) { - // Proporciona error solo en desarrollo - res.locals.message = err.message; - res.locals.error = req.app.get('env') === 'development' ? err : {}; - - // Renderiza la página de error - res.status(err.status || 500); - res.render('error'); -}); - -const PORT = process.env.PORT || 8080; +const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Server is running on port ${PORT}`)); module.exports = app; diff --git a/package.json b/package.json index b5b61e8..c9cd021 100644 --- a/package.json +++ b/package.json @@ -3,9 +3,6 @@ "version": "1.0.0", "description": "Deploy express js to vercel.", "main": "index.js", - "engines": { - "node" : "16.x" - }, "scripts": { "start": "node index.js" }, From 75a1def27f88c810011a8f774f329ce570a0ddfe Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 08:16:33 -0300 Subject: [PATCH 04/73] basic --- index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/index.js b/index.js index 295a2e9..1ad8ee3 100644 --- a/index.js +++ b/index.js @@ -1,5 +1,4 @@ const express = require('express'); -const cookieParser = require('cookie-parser'); const dotenv = require('dotenv'); const cors = require('cors'); const indexRouter = require('./routes/index'); From 026f00457a790e3b57a2a1ac8643c2148c942b53 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 08:20:39 -0300 Subject: [PATCH 05/73] basic --- vercel.json | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/vercel.json b/vercel.json index 64bcf49..19b51a7 100644 --- a/vercel.json +++ b/vercel.json @@ -1,15 +1 @@ -{ - "version": 2, - "builds": [ - { - "src": "./index.js", - "use": "@vercel/node" - } - ], - "routes": [ - { - "src": "/(.*)", - "dest": "/" - } - ] -} \ No newline at end of file +{ "version": 2, "rewrites": [{ "source": "/(.*)", "destination": "/" }] } \ No newline at end of file From 0522109178dc16930344d305bb884baf4d632722 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 08:32:55 -0300 Subject: [PATCH 06/73] delete index --- index.js | 1 - routes/index.js | 9 --------- 2 files changed, 10 deletions(-) delete mode 100644 routes/index.js diff --git a/index.js b/index.js index 1ad8ee3..f7e75ac 100644 --- a/index.js +++ b/index.js @@ -22,7 +22,6 @@ app.use(express.json({ extended: false })); app.use(cors()); // Rutas -app.use('/', indexRouter); app.use('/members', memberRouter); const PORT = process.env.PORT || 3000; diff --git a/routes/index.js b/routes/index.js deleted file mode 100644 index ecca96a..0000000 --- a/routes/index.js +++ /dev/null @@ -1,9 +0,0 @@ -var express = require('express'); -var router = express.Router(); - -/* GET home page. */ -router.get('/', function(req, res, next) { - res.render('index', { title: 'Express' }); -}); - -module.exports = router; From 2a21892e275fc72a4a3912393a8c2254de6fa20c Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 09:04:24 -0300 Subject: [PATCH 07/73] delete index --- index.js | 1 - 1 file changed, 1 deletion(-) diff --git a/index.js b/index.js index f7e75ac..353e682 100644 --- a/index.js +++ b/index.js @@ -1,7 +1,6 @@ const express = require('express'); const dotenv = require('dotenv'); const cors = require('cors'); -const indexRouter = require('./routes/index'); const memberRouter = require('./routes/member'); const db = require('./src/configurations/db.config'); From 3c8a4b929d00d78ca350c47c96d3b2b152c21e40 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 09:06:55 -0300 Subject: [PATCH 08/73] index --- vercel.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vercel.json b/vercel.json index 19b51a7..2efaf15 100644 --- a/vercel.json +++ b/vercel.json @@ -1 +1 @@ -{ "version": 2, "rewrites": [{ "source": "/(.*)", "destination": "/" }] } \ No newline at end of file +{ "version": 2, "rewrites": [{ "source": "/(.*)", "destination": "./index" }] } \ No newline at end of file From 79bd2440ff7a3949b2e2efaf9020251b1c511e38 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 09:10:20 -0300 Subject: [PATCH 09/73] change --- package.json | 2 +- index.js => src/index.js | 2 +- {routes => src/routes}/member.js | 2 +- vercel.json | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) rename index.js => src/index.js (92%) rename {routes => src/routes}/member.js (91%) diff --git a/package.json b/package.json index c9cd021..81392b1 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Deploy express js to vercel.", "main": "index.js", "scripts": { - "start": "node index.js" + "start": "node src/index.js" }, "dependencies": { "cookie-parser": "~1.4.4", diff --git a/index.js b/src/index.js similarity index 92% rename from index.js rename to src/index.js index 353e682..22b0e38 100644 --- a/index.js +++ b/src/index.js @@ -2,7 +2,7 @@ const express = require('express'); const dotenv = require('dotenv'); const cors = require('cors'); const memberRouter = require('./routes/member'); -const db = require('./src/configurations/db.config'); +const db = require('./configurations/db.config'); dotenv.config({ path: '.env' }); diff --git a/routes/member.js b/src/routes/member.js similarity index 91% rename from routes/member.js rename to src/routes/member.js index 1642e84..73d0211 100644 --- a/routes/member.js +++ b/src/routes/member.js @@ -5,7 +5,7 @@ const { getMemberById, updateMember, deleteMember -} = require('../src/services/member.service'); +} = require('../services/member.service'); const router = express.Router(); diff --git a/vercel.json b/vercel.json index 2efaf15..b3d34bc 100644 --- a/vercel.json +++ b/vercel.json @@ -1 +1 @@ -{ "version": 2, "rewrites": [{ "source": "/(.*)", "destination": "./index" }] } \ No newline at end of file +{ "version": 2, "rewrites": [{ "source": "/(.*)", "destination": "./src/index" }] } \ No newline at end of file From 49d30df3a535a9367efe2bc7bdc52cddce623ea2 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 09:12:11 -0300 Subject: [PATCH 10/73] basic --- vercel.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vercel.json b/vercel.json index b3d34bc..d1d6d5d 100644 --- a/vercel.json +++ b/vercel.json @@ -1 +1 @@ -{ "version": 2, "rewrites": [{ "source": "/(.*)", "destination": "./src/index" }] } \ No newline at end of file +{ "version": 2, "rewrites": [{ "source": "/(.*)", "destination": "/src" }] } \ No newline at end of file From 956a9f92201a28af4d8dc276b3792e7a8f991152 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 09:18:17 -0300 Subject: [PATCH 11/73] config --- .gitignore | 1 + vercel.json | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 6704566..829fc0e 100644 --- a/.gitignore +++ b/.gitignore @@ -102,3 +102,4 @@ dist # TernJS port file .tern-port +.vercel diff --git a/vercel.json b/vercel.json index d1d6d5d..cea8169 100644 --- a/vercel.json +++ b/vercel.json @@ -1 +1,14 @@ -{ "version": 2, "rewrites": [{ "source": "/(.*)", "destination": "/src" }] } \ No newline at end of file +{ + "builds": [ + { + "src": "./src/index.js", + "use": "@vercel/node" + } + ], + "routes": [ + { + "src": "/(.*)", + "dest": "/" + } + ] + } \ No newline at end of file From c51c8b512ccbdda383da72aa9c73ccabef042102 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 09:27:58 -0300 Subject: [PATCH 12/73] config --- .vercelignore | 4 ++++ vercel.json | 8 +++++--- 2 files changed, 9 insertions(+), 3 deletions(-) create mode 100644 .vercelignore diff --git a/.vercelignore b/.vercelignore new file mode 100644 index 0000000..eac549b --- /dev/null +++ b/.vercelignore @@ -0,0 +1,4 @@ +# .vercelignore +node_modules +.git +.env diff --git a/vercel.json b/vercel.json index cea8169..afa062c 100644 --- a/vercel.json +++ b/vercel.json @@ -1,14 +1,16 @@ { + "version": 2, "builds": [ { - "src": "./src/index.js", + "src": "src/index.js", "use": "@vercel/node" } ], "routes": [ { "src": "/(.*)", - "dest": "/" + "dest": "src/index.js" } ] - } \ No newline at end of file + } + \ No newline at end of file From 89d206ab371f73ff5ab3f72cbae0c1a017290aef Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 09:51:36 -0300 Subject: [PATCH 13/73] index --- src/index.js | 66 ++++++++++++++++++++++++++++++++-- src/services/member.service.js | 1 + 2 files changed, 65 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 22b0e38..d13d511 100644 --- a/src/index.js +++ b/src/index.js @@ -1,8 +1,9 @@ const express = require('express'); const dotenv = require('dotenv'); const cors = require('cors'); -const memberRouter = require('./routes/member'); const db = require('./configurations/db.config'); +const MongoMemberRepository = require('./repositories/MongoMemberRepository'); +const memberRepository = new MongoMemberRepository(); dotenv.config({ path: '.env' }); @@ -20,8 +21,69 @@ const app = express(); app.use(express.json({ extended: false })); app.use(cors()); +// Servicios +const createMember = async (req, res) => { + try { + const member = req.body; + const savedMember = await memberRepository.save(member); + res.status(201).json(savedMember); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const getMembers = async (_req, res) => { + try { + const members = await memberRepository.find(); + console.log(members); + res.status(200).json(members); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const getMemberById = async (req, res) => { + try { + const { id } = req.params; + const member = await memberRepository.findById(id); + if (member) { + res.status(200).json(member); + } else { + res.status(404).json({ message: 'Member not found' }); + } + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const updateMember = async (req, res) => { + try { + const { id } = req.params; + const member = req.body; + member.dni = id; + const updatedMember = await memberRepository.update(member); + res.status(200).json(updatedMember); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const deleteMember = async (req, res) => { + try { + const { id } = req.params; + const result = await memberRepository.delete(id); + res.status(200).json({ message: result }); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + // Rutas -app.use('/members', memberRouter); +app.post('/members', createMember); +app.get('/members', getMembers); +app.get('/members/:id', getMemberById); +app.put('/members/:id', updateMember); +app.delete('/members/:id', deleteMember); const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Server is running on port ${PORT}`)); diff --git a/src/services/member.service.js b/src/services/member.service.js index 7a3da65..31a6012 100644 --- a/src/services/member.service.js +++ b/src/services/member.service.js @@ -14,6 +14,7 @@ const createMember = async (req, res) => { const getMembers = async (_req, res) => { try { const members = await memberRepository.find(); + console.log(members) res.status(200).json(members); } catch (error) { res.status(500).json({ message: error.message }); From 50b2aa96a6d0b029cd60ff21c2fab8850c23b898 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 11:46:29 -0300 Subject: [PATCH 14/73] mejora --- src/index.js | 10 +++++++++- src/services/member.service.js | 1 - 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index d13d511..631d677 100644 --- a/src/index.js +++ b/src/index.js @@ -25,6 +25,14 @@ app.use(cors()); const createMember = async (req, res) => { try { const member = req.body; + + // Verificar si ya existe un miembro con el mismo DNI + const existingMember = await memberRepository.findOne({ dni: member.dni }); + if (existingMember) { + return res.status(400).json({ message: 'El número de DNI ya está en uso.' }); + } + + // Si no hay un miembro con el mismo DNI, guardar el nuevo miembro const savedMember = await memberRepository.save(member); res.status(201).json(savedMember); } catch (error) { @@ -32,10 +40,10 @@ const createMember = async (req, res) => { } }; + const getMembers = async (_req, res) => { try { const members = await memberRepository.find(); - console.log(members); res.status(200).json(members); } catch (error) { res.status(500).json({ message: error.message }); diff --git a/src/services/member.service.js b/src/services/member.service.js index 31a6012..7a3da65 100644 --- a/src/services/member.service.js +++ b/src/services/member.service.js @@ -14,7 +14,6 @@ const createMember = async (req, res) => { const getMembers = async (_req, res) => { try { const members = await memberRepository.find(); - console.log(members) res.status(200).json(members); } catch (error) { res.status(500).json({ message: error.message }); From 62765167e82f4c4cecc15f48f1c1691a29953afe Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 12:25:37 -0300 Subject: [PATCH 15/73] fix --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 631d677..a525aa3 100644 --- a/src/index.js +++ b/src/index.js @@ -27,7 +27,7 @@ const createMember = async (req, res) => { const member = req.body; // Verificar si ya existe un miembro con el mismo DNI - const existingMember = await memberRepository.findOne({ dni: member.dni }); + const existingMember = await memberRepository.findById({ dni: member.dni }); if (existingMember) { return res.status(400).json({ message: 'El número de DNI ya está en uso.' }); } From 5f5ad13ed66f659c3241fe994fba725f35e461eb Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 12:32:16 -0300 Subject: [PATCH 16/73] fix --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index a525aa3..1eb5830 100644 --- a/src/index.js +++ b/src/index.js @@ -27,7 +27,7 @@ const createMember = async (req, res) => { const member = req.body; // Verificar si ya existe un miembro con el mismo DNI - const existingMember = await memberRepository.findById({ dni: member.dni }); + const existingMember = await memberRepository.find({ dni: member.dni }); if (existingMember) { return res.status(400).json({ message: 'El número de DNI ya está en uso.' }); } From de5111104b04a3fdd63519756947248b60c5c3cb Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 12:49:12 -0300 Subject: [PATCH 17/73] fix --- src/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 1eb5830..43c97e3 100644 --- a/src/index.js +++ b/src/index.js @@ -27,7 +27,7 @@ const createMember = async (req, res) => { const member = req.body; // Verificar si ya existe un miembro con el mismo DNI - const existingMember = await memberRepository.find({ dni: member.dni }); + const existingMember = await memberRepository.findById(member.dni); if (existingMember) { return res.status(400).json({ message: 'El número de DNI ya está en uso.' }); } From f07a1f7b55f6ced0f0acd1cddc1a24b91228a3c4 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Fri, 14 Jun 2024 14:38:57 -0300 Subject: [PATCH 18/73] fix --- src/index.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index 43c97e3..442e6f8 100644 --- a/src/index.js +++ b/src/index.js @@ -18,16 +18,18 @@ const app = express(); } })(); -app.use(express.json({ extended: false })); +// Set the limits once +app.use(express.json({ limit: '50mb' })); +app.use(express.urlencoded({ limit: '50mb', extended: true })); app.use(cors()); // Servicios const createMember = async (req, res) => { try { const member = req.body; - // Verificar si ya existe un miembro con el mismo DNI const existingMember = await memberRepository.findById(member.dni); + console.log(existingMember) if (existingMember) { return res.status(400).json({ message: 'El número de DNI ya está en uso.' }); } @@ -40,7 +42,6 @@ const createMember = async (req, res) => { } }; - const getMembers = async (_req, res) => { try { const members = await memberRepository.find(); From 1115c11bcf1b71e8a9718d3146323d2b682ec6ff Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Tue, 18 Jun 2024 08:35:25 -0300 Subject: [PATCH 19/73] cors --- src/index.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 442e6f8..d76ab79 100644 --- a/src/index.js +++ b/src/index.js @@ -21,7 +21,9 @@ const app = express(); // Set the limits once app.use(express.json({ limit: '50mb' })); app.use(express.urlencoded({ limit: '50mb', extended: true })); -app.use(cors()); +app.use(cors({ + origin: 'https://iepe-portal.vercel.app', // Reemplaza con tu origen permitido +})); // Servicios const createMember = async (req, res) => { From ff8801a15165963000f49101163717fc25a7a232 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Wed, 19 Jun 2024 12:59:07 -0300 Subject: [PATCH 20/73] arreglo --- src/index.js | 9 ++++----- src/repositories/MongoMemberRepository.js | 15 ++++++++++++--- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/index.js b/src/index.js index d76ab79..56197e4 100644 --- a/src/index.js +++ b/src/index.js @@ -21,9 +21,7 @@ const app = express(); // Set the limits once app.use(express.json({ limit: '50mb' })); app.use(express.urlencoded({ limit: '50mb', extended: true })); -app.use(cors({ - origin: 'https://iepe-portal.vercel.app', // Reemplaza con tu origen permitido -})); +app.use(cors()); // Servicios const createMember = async (req, res) => { @@ -44,9 +42,10 @@ const createMember = async (req, res) => { } }; -const getMembers = async (_req, res) => { +const getMembers = async (req, res) => { + const { page = 1, limit = 10 } = req.query; try { - const members = await memberRepository.find(); + const members = await memberRepository.find(page,limit); res.status(200).json(members); } catch (error) { res.status(500).json({ message: error.message }); diff --git a/src/repositories/MongoMemberRepository.js b/src/repositories/MongoMemberRepository.js index 7c7b2af..33bc842 100644 --- a/src/repositories/MongoMemberRepository.js +++ b/src/repositories/MongoMemberRepository.js @@ -5,9 +5,18 @@ class MongoMemberRepository { return Promise.reject(new Error('Method not implemented.')); } - async find() { - const members = await MemberModel.find(); - return members; + async find(page, limit = 10) { + const skip = (page - 1) * limit; + const members = await MemberModel.find() + .skip(skip) + .limit(limit) + const total = await MemberModel.countDocuments(); // Obtiene el conteo total de documentos + return { + members, + total, + page, + totalPages: Math.ceil(total / limit) + }; } async findById(dni) { From 19c335cb63e2b2a299a308547a66d7a25f77d536 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Wed, 19 Jun 2024 16:54:18 -0300 Subject: [PATCH 21/73] fix --- src/index.js | 4 ++-- src/repositories/MongoMemberRepository.js | 15 ++++++++++----- src/services/member.service.js | 5 +++-- 3 files changed, 15 insertions(+), 9 deletions(-) diff --git a/src/index.js b/src/index.js index 56197e4..1f89225 100644 --- a/src/index.js +++ b/src/index.js @@ -43,9 +43,9 @@ const createMember = async (req, res) => { }; const getMembers = async (req, res) => { - const { page = 1, limit = 10 } = req.query; + const { page } = req.query; try { - const members = await memberRepository.find(page,limit); + const members = await memberRepository.find(page); res.status(200).json(members); } catch (error) { res.status(500).json({ message: error.message }); diff --git a/src/repositories/MongoMemberRepository.js b/src/repositories/MongoMemberRepository.js index 33bc842..5113645 100644 --- a/src/repositories/MongoMemberRepository.js +++ b/src/repositories/MongoMemberRepository.js @@ -5,20 +5,25 @@ class MongoMemberRepository { return Promise.reject(new Error('Method not implemented.')); } - async find(page, limit = 10) { - const skip = (page - 1) * limit; + async find(page) { + const pageSize = 10; // Tamaño de página, puedes ajustarlo según tus necesidades + const skip = page * pageSize; // Cálculo de skip considerando la indexación base 0 + const members = await MemberModel.find() .skip(skip) - .limit(limit) + .limit(pageSize); + const total = await MemberModel.countDocuments(); // Obtiene el conteo total de documentos + return { members, total, page, - totalPages: Math.ceil(total / limit) + totalPages: Math.ceil(total / pageSize) }; } - + + async findById(dni) { const member = await MemberModel.findOne({ dni }); return member; diff --git a/src/services/member.service.js b/src/services/member.service.js index 7a3da65..0551072 100644 --- a/src/services/member.service.js +++ b/src/services/member.service.js @@ -11,9 +11,10 @@ const createMember = async (req, res) => { } }; -const getMembers = async (_req, res) => { +const getMembers = async (req, res) => { try { - const members = await memberRepository.find(); + console.log(req) + const members = await memberRepository.find(req); res.status(200).json(members); } catch (error) { res.status(500).json({ message: error.message }); From 057df39966771bc31ab3122033be0479fa0e76ec Mon Sep 17 00:00:00 2001 From: eliassolari Date: Thu, 20 Jun 2024 14:56:23 -0300 Subject: [PATCH 22/73] IEPE-001 (ESOLARI) - feat : crando token para las validaciones --- src/utils/jwt.js | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/utils/jwt.js diff --git a/src/utils/jwt.js b/src/utils/jwt.js new file mode 100644 index 0000000..51b5e8c --- /dev/null +++ b/src/utils/jwt.js @@ -0,0 +1,17 @@ +const jwt = require('jsonwebtoken') +// Crear el token +export const createToken = (user) => { + const { _id,firstName,position } = user; + const token = jwt.sign({ _id,firstName,position }, "codigoSecreto", { expiresIn: "30m" }); + return token; + }; + + // Verificar el token + export const verifyToken = (token) => { + try { + const decode = jwt.verify(token, "codigoSecreto"); + return decode; + } catch (error) { + return null; + } + }; \ No newline at end of file From 092c3d96b79e6d269c318b9f8e8078419bf6315b Mon Sep 17 00:00:00 2001 From: eliassolari Date: Thu, 20 Jun 2024 14:57:58 -0300 Subject: [PATCH 23/73] IEPE-002 (ESOLARI) - feat : se instalaron las dependencias necesarias --- package-lock.json | 2659 +++++++++++++++++++++++++++++++++++---------- 1 file changed, 2076 insertions(+), 583 deletions(-) diff --git a/package-lock.json b/package-lock.json index eecac60..5760634 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,21 +8,39 @@ "name": "express-vercel", "version": "1.0.0", "dependencies": { + "bcrypt": "^5.1.1", "cookie-parser": "~1.4.4", "cors": "^2.8.5", "debug": "~2.6.9", "dotenv": "^16.4.5", - "express": "~4.16.1", + "express": "^4.19.2", "http-errors": "~1.6.3", - "jade": "~1.11.0", - "mongoose": "^8.3.1", + "jade": "^1.9.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.4.3", "morgan": "~1.9.1" }, "devDependencies": { "nodemon": "^3.1.0" + } + }, + "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" }, - "engines": { - "node": "14.x" + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" } }, "node_modules/@mongodb-js/saslprep": { @@ -46,13 +64,18 @@ "@types/webidl-conversions": "*" } }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "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.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" }, "engines": { "node": ">= 0.6" @@ -77,19 +100,38 @@ "acorn": "^2.1.0" } }, - "node_modules/align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "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": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "debug": "4" }, "engines": { - "node": ">=0.10.0" + "node": ">= 6.0.0" } }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "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/amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", @@ -98,6 +140,14 @@ "node": ">=0.4.2" } }, + "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/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -111,21 +161,33 @@ "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==", + "deprecated": "This package is no longer supported.", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "node_modules/asap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", - "integrity": "sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==" - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/basic-auth": { "version": "2.0.1", @@ -138,6 +200,19 @@ "node": ">= 0.8" } }, + "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/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -151,30 +226,84 @@ } }, "node_modules/body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", + "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.0.0", - "content-type": "~1.0.4", + "bytes": "3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "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/body-parser/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/body-parser/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/body-parser/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/body-parser/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/body-parser/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/body-parser/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/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -200,32 +329,35 @@ "node": ">=16.20.1" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "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/camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", + "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": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "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.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/character-parser": { @@ -257,40 +389,20 @@ "fsevents": "~2.3.2" } }, - "node_modules/clean-css": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", - "integrity": "sha512-aTWyttSdI2mYi07kWqHi24NUU9YlELFKGOAgFzZjDN1064DMAOy2FBuoyGmkKRlXkbpXd0EVHmiVkbKhKoirTw==", - "dependencies": { - "commander": "2.8.x", - "source-map": "0.4.x" - }, - "bin": { - "cleancss": "bin/cleancss" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clean-css/node_modules/commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==", - "dependencies": { - "graceful-readlink": ">= 1.0.0" - }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "engines": { - "node": ">= 0.6.x" + "node": ">=10" } }, - "node_modules/cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==", - "dependencies": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" + "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/commander": { @@ -304,8 +416,12 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "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/constantinople": { "version": "3.0.2", @@ -317,13 +433,35 @@ } }, "node_modules/content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==", + "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-disposition/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/content-type": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", @@ -396,14 +534,27 @@ "ms": "2.0.0" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "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.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, + "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": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", @@ -413,9 +564,21 @@ } }, "node_modules/destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + "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/dotenv": { "version": "16.4.5", @@ -428,11 +591,24 @@ "url": "https://dotenvx.com" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, + "node_modules/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", @@ -441,6 +617,25 @@ "node": ">= 0.8" } }, + "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/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -455,38 +650,39 @@ } }, "node_modules/express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "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.5", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.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.3.0", - "parseurl": "~1.3.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "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" }, @@ -495,13 +691,84 @@ } }, "node_modules/express/node_modules/cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==", + "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/express/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/express/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/express/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/express/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/express/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/express/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/express/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/fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -515,22 +782,41 @@ } }, "node_modules/finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "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.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/finalhandler/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/finalhandler/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/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -547,6 +833,33 @@ "node": ">= 0.6" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -561,6 +874,72 @@ "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==", + "deprecated": "This package is no longer supported.", + "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/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/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "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/glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -573,10 +952,16 @@ "node": ">= 6" } }, - "node_modules/graceful-readlink": { + "node_modules/gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" + "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/has-flag": { "version": "3.0.0", @@ -587,6 +972,55 @@ "node": ">=4" } }, + "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/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -601,10 +1035,43 @@ "node": ">= 0.6" } }, + "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.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "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/iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "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" }, @@ -618,6 +1085,16 @@ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, + "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==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "node_modules/inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -643,11 +1120,6 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -657,6 +1129,14 @@ "node": ">=0.10.0" } }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -678,25 +1158,17 @@ "node": ">=0.12.0" } }, - "node_modules/is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, "node_modules/jade": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", - "integrity": "sha512-J76sbGKeLtu7uwW97Ntzb1UvGnpKTDplYa9ROr2gNRhM+SxvlBSG0Ees3TQ8+7ya2UVkzMEeFxhRhEpN68s7Tg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/jade/-/jade-1.9.2.tgz", + "integrity": "sha512-MhDlh3ZW0a06RiI2T/sDEYPUXTnfOkSIECRsPLiZtebz+Fi2ZaB0IVdJxSGDt6lWg4jHMEiHuq/0cPpppt1kqQ==", "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", "dependencies": { "character-parser": "1.2.1", - "clean-css": "^3.1.9", "commander": "~2.6.0", "constantinople": "~3.0.1", - "jstransformer": "0.0.2", "mkdirp": "~0.5.0", "transformers": "2.1.0", - "uglify-js": "^2.4.19", "void-elements": "~2.0.1", "with": "~4.0.0" }, @@ -704,13 +1176,49 @@ "jade": "bin/jade.js" } }, - "node_modules/jstransformer": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", - "integrity": "sha512-b7tmf91j1ChMuYhwbPBnNgB62dmHuqiHpOdd6QLKzde8HydZqm+ud3qWreGWecSxPBFFNOf1Ozjx0xo2plFdHA==", + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", "dependencies": { - "is-promise": "^2.0.0", - "promise": "^6.0.1" + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" } }, "node_modules/kareem": { @@ -721,31 +1229,61 @@ "node": ">=12.0.0" } }, - "node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/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": { - "is-buffer": "^1.1.5" + "semver": "^6.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==", - "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==", - "engines": { - "node": ">=0.10.0" + "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/media-typer": { @@ -775,27 +1313,30 @@ } }, "node_modules/mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "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.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "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.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "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.48.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -805,7 +1346,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -821,6 +1361,37 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -887,9 +1458,9 @@ } }, "node_modules/mongoose": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.1.tgz", - "integrity": "sha512-odQ2WEWGL3hb0Qex+QMN4eH6D34WdMEw7F1If2MGABApSDmG9cMmqv/G1H6WsXmuaH9mkuuadW/WbLE5+tHJwA==", + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.3.tgz", + "integrity": "sha512-GxPVLD+I/dxVkgcts2r2QmJJvS62/++btVj3RFt8YnHt+DSOp1Qjj62YEvgZaElwIOTcc4KGJM95X5LlrU1qQg==", "dependencies": { "bson": "^6.7.0", "kareem": "2.6.3", @@ -973,13 +1544,56 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "node_modules/negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "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/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/nodemon": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", @@ -1031,6 +1645,20 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "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", @@ -1040,6 +1668,18 @@ "node": ">=0.10.0" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "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", @@ -1048,6 +1688,14 @@ "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.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -1067,6 +1715,14 @@ "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/optimist": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", @@ -1083,6 +1739,14 @@ "node": ">= 0.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-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -1100,14 +1764,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/promise": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", - "integrity": "sha512-O+uwGKreKNKkshzZv2P7N64lk6EP17iXBn0PbUnNQhk+Q0AHLstiTrjkx3v5YBd3cxUe7Sq6KyRhl/A0xUjk7Q==", - "dependencies": { - "asap": "~1.0.0" - } - }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -1135,11 +1791,17 @@ } }, "node_modules/qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "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/range-parser": { @@ -1151,19 +1813,73 @@ } }, "node_modules/raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "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.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" }, "engines": { "node": ">= 0.8" } }, + "node_modules/raw-body/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/raw-body/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/raw-body/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/raw-body/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/raw-body/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/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/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -1176,23 +1892,19 @@ "node": ">=8.10.0" } }, - "node_modules/repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", - "engines": { - "node": ">=0.10" - } - }, - "node_modules/right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", "dependencies": { - "align-text": "^0.1.1" + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/safe-buffer": { @@ -1209,7 +1921,6 @@ "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true, "bin": { "semver": "bin/semver.js" }, @@ -1218,52 +1929,152 @@ } }, "node_modules/send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "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": "~1.1.2", - "destroy": "~1.0.4", + "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": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "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/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/send/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/send/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/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/send/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/send/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/send/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/serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "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.2", - "send": "0.16.2" + "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.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "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": "17.1.3", "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" }, + "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/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -1277,9 +2088,9 @@ } }, "node_modules/source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", "dependencies": { "amdefine": ">=0.0.4" }, @@ -1303,6 +2114,57 @@ "node": ">= 0.6" } }, + "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_decoder/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/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/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -1315,6 +2177,33 @@ "node": ">=4" } }, + "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/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/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -1327,6 +2216,14 @@ "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/touch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", @@ -1371,32 +2268,6 @@ "is-promise": "~1" } }, - "node_modules/transformers/node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "dependencies": { - "amdefine": ">=0.0.4" - }, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/transformers/node_modules/uglify-js": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", - "integrity": "sha512-viLk+/8G0zm2aKt1JJAVcz5J/5ytdiNaIsKgrre3yvSUjwVG6ZUujGH7E2TiPigZUwLYCe7eaIUEP2Zka2VJPA==", - "dependencies": { - "optimist": "~0.3.5", - "source-map": "~0.1.7" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.4.0" - } - }, "node_modules/type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -1410,37 +2281,20 @@ } }, "node_modules/uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha512-viLk+/8G0zm2aKt1JJAVcz5J/5ytdiNaIsKgrre3yvSUjwVG6ZUujGH7E2TiPigZUwLYCe7eaIUEP2Zka2VJPA==", "dependencies": { - "source-map": "~0.5.1", - "yargs": "~3.10.0" + "optimist": "~0.3.5", + "source-map": "~0.1.7" }, "bin": { "uglifyjs": "bin/uglifyjs" }, "engines": { - "node": ">=0.8.0" - }, - "optionalDependencies": { - "uglify-to-browserify": "~1.0.0" - } - }, - "node_modules/uglify-js/node_modules/source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", - "engines": { - "node": ">=0.10.0" + "node": ">=0.4.0" } }, - "node_modules/uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", - "optional": true - }, "node_modules/undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -1455,6 +2309,11 @@ "node": ">= 0.8" } }, + "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", @@ -1499,12 +2358,12 @@ "node": ">=16" } }, - "node_modules/window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==", - "engines": { - "node": ">= 0.8.0" + "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/with": { @@ -1535,19 +2394,34 @@ "node": ">=0.4.0" } }, - "node_modules/yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==", - "dependencies": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } + "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/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } }, "dependencies": { + "@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==", + "requires": { + "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" + } + }, "@mongodb-js/saslprep": { "version": "1.1.7", "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", @@ -1569,13 +2443,18 @@ "@types/webidl-conversions": "*" } }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "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==", "requires": { - "mime-types": "~2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { @@ -1591,14 +2470,27 @@ "acorn": "^2.1.0" } }, - "align-text": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", - "integrity": "sha512-GrTZLRpmp6wIC2ztrWW9MjjTgSKccffgFagbNDOX95/dcjEcYZibYTeaOntySQLcdw1ztBoFkviiUvTMbb9MYg==", + "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==", "requires": { - "kind-of": "^3.0.2", - "longest": "^1.0.1", - "repeat-string": "^1.5.2" + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } } }, "amdefine": { @@ -1606,6 +2498,11 @@ "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==" }, + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -1616,21 +2513,29 @@ "picomatch": "^2.0.4" } }, + "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==" + }, + "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==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + } + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, - "asap": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", - "integrity": "sha512-Ej9qjcXY+8Tuy1cNqiwNMwFRXOy9UwgTeMA8LxreodygIPV48lx8PU1ecFxb5ZeU1DpMKxiq6vGLTxcitWZPbA==" - }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "basic-auth": { "version": "2.0.1", @@ -1640,6 +2545,15 @@ "safe-buffer": "5.1.2" } }, + "bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + } + }, "binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -1647,27 +2561,70 @@ "dev": true }, "body-parser": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz", - "integrity": "sha512-YQyoqQG3sO8iCmf8+hyVpgHHOv0/hCEFiS4zTGUwTA1HjAFX66wRcNQrVCeJq9pgESMRvUAOvSil5MJlmccuKQ==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", "requires": { - "bytes": "3.0.0", - "content-type": "~1.0.4", + "bytes": "3.1.2", + "content-type": "~1.0.5", "debug": "2.6.9", - "depd": "~1.1.2", - "http-errors": "~1.6.3", - "iconv-lite": "0.4.23", - "on-finished": "~2.3.0", - "qs": "6.5.2", - "raw-body": "2.3.3", - "type-is": "~1.6.16" + "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" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "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==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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==", + "requires": { + "ee-first": "1.1.1" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1687,23 +2644,26 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==" }, - "bytes": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", - "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, - "camelcase": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", - "integrity": "sha512-wzLkDa4K/mzI1OSITC+DUyjgIl/ETNHE9QvYgy6J6Jvqyyz4C0Xfd+lQhb19sX2jMpZV4IssUn0VDVmglV+s4g==" + "bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" }, - "center-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", - "integrity": "sha512-Baz3aNe2gd2LP2qk5U+sDk/m4oSuwSDcBfayTCTBoWpfIGO5XFxPmjILQII4NGiZjD6DoDI6kf7gKaxkf7s3VQ==", + "call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "requires": { - "align-text": "^0.1.3", - "lazy-cache": "^1.0.3" + "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" } }, "character-parser": { @@ -1727,34 +2687,15 @@ "readdirp": "~3.6.0" } }, - "clean-css": { - "version": "3.4.28", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", - "integrity": "sha512-aTWyttSdI2mYi07kWqHi24NUU9YlELFKGOAgFzZjDN1064DMAOy2FBuoyGmkKRlXkbpXd0EVHmiVkbKhKoirTw==", - "requires": { - "commander": "2.8.x", - "source-map": "0.4.x" - }, - "dependencies": { - "commander": { - "version": "2.8.1", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", - "integrity": "sha512-+pJLBFVk+9ZZdlAOB5WuIElVPPth47hILFkmGym57aq8kwxsowvByvB0DHs1vQAhyMZzdcpTtF0VDKGkSDR4ZQ==", - "requires": { - "graceful-readlink": ">= 1.0.0" - } - } - } + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, - "cliui": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", - "integrity": "sha512-GIOYRizG+TGoc7Wgc1LiOTLare95R3mzKgoln+Q/lE4ceiYH19gUpl0l0Ffq4lJDEf3FxujMe6IBfOCs7pfqNA==", - "requires": { - "center-align": "^0.1.1", - "right-align": "^0.1.1", - "wordwrap": "0.0.2" - } + "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==" }, "commander": { "version": "2.6.0", @@ -1764,8 +2705,12 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "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==" }, "constantinople": { "version": "3.0.2", @@ -1776,9 +2721,19 @@ } }, "content-disposition": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", - "integrity": "sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==" + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "requires": { + "safe-buffer": "5.2.1" + }, + "dependencies": { + "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==" + } + } }, "content-type": { "version": "1.0.5", @@ -1840,10 +2795,20 @@ "ms": "2.0.0" } }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + "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==", + "requires": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "depd": { "version": "1.1.2", @@ -1851,25 +2816,56 @@ "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==" }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha512-3NdhDuEXnfun/z7x9GOElY49LoqVHoGScmOKwmxhsS8N5Y+Z8KyPPDnaSzqWgYt/ji4mqwfTS34Htrk0zPIXVg==" + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" + }, + "detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==" }, "dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==" }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "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==" }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, + "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==", + "requires": { + "get-intrinsic": "^1.2.4" + } + }, + "es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -1881,46 +2877,92 @@ "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, "express": { - "version": "4.16.4", - "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz", - "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "requires": { - "accepts": "~1.3.5", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.18.3", - "content-disposition": "0.5.2", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.3.1", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "~1.1.2", + "depd": "2.0.0", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.1.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.3.0", - "parseurl": "~1.3.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.4", - "qs": "6.5.2", - "range-parser": "~1.2.0", - "safe-buffer": "5.1.2", - "send": "0.16.2", - "serve-static": "1.13.2", - "setprototypeof": "1.1.0", - "statuses": "~1.4.0", - "type-is": "~1.6.16", + "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" }, "dependencies": { "cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha512-+IJOX0OqlHCszo2mBUq+SrEbCj6w7Kpffqx60zYbPTFaO4+yYgRjHwcZNpWvaTylDHaV7PPmBHzSecZiMhtPgw==" + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==" + }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "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==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "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==", + "requires": { + "ee-first": "1.1.1" + } + }, + "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==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" } } }, @@ -1934,17 +2976,32 @@ } }, "finalhandler": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", - "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "requires": { "debug": "2.6.9", "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "on-finished": "~2.3.0", - "parseurl": "~1.3.2", - "statuses": "~1.4.0", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", "unpipe": "~1.0.0" + }, + "dependencies": { + "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==", + "requires": { + "ee-first": "1.1.1" + } + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "forwarded": { @@ -1957,6 +3014,29 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, "fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -1964,6 +3044,52 @@ "dev": true, "optional": true }, + "function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==" + }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "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" + } + }, + "get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "requires": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + } + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "requires": { + "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" + } + }, "glob-parent": { "version": "5.1.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", @@ -1973,10 +3099,13 @@ "is-glob": "^4.0.1" } }, - "graceful-readlink": { + "gopd": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", - "integrity": "sha512-8tLu60LgxF6XpdbK8OW3FA+IfTNBn1ZHGHKF4KQbEeSkajYw5PlYJcKluntgegDPTg8UkHjpet1T82vk6TQ68w==" + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "requires": { + "get-intrinsic": "^1.1.3" + } }, "has-flag": { "version": "3.0.0", @@ -1984,6 +3113,37 @@ "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true }, + "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==", + "requires": { + "es-define-property": "^1.0.0" + } + }, + "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==" + }, + "has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "requires": { + "function-bind": "^1.1.2" + } + }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -1995,10 +3155,34 @@ "statuses": ">= 1.4.0 < 2" } }, + "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==", + "requires": { + "agent-base": "6", + "debug": "4" + }, + "dependencies": { + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "iconv-lite": { - "version": "0.4.23", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz", - "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==", + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -2009,6 +3193,15 @@ "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, "inherits": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", @@ -2028,17 +3221,17 @@ "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -2054,35 +3247,61 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, - "is-promise": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" - }, "jade": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", - "integrity": "sha512-J76sbGKeLtu7uwW97Ntzb1UvGnpKTDplYa9ROr2gNRhM+SxvlBSG0Ees3TQ8+7ya2UVkzMEeFxhRhEpN68s7Tg==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/jade/-/jade-1.9.2.tgz", + "integrity": "sha512-MhDlh3ZW0a06RiI2T/sDEYPUXTnfOkSIECRsPLiZtebz+Fi2ZaB0IVdJxSGDt6lWg4jHMEiHuq/0cPpppt1kqQ==", "requires": { "character-parser": "1.2.1", - "clean-css": "^3.1.9", "commander": "~2.6.0", "constantinople": "~3.0.1", - "jstransformer": "0.0.2", "mkdirp": "~0.5.0", "transformers": "2.1.0", - "uglify-js": "^2.4.19", "void-elements": "~2.0.1", "with": "~4.0.0" } }, - "jstransformer": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", - "integrity": "sha512-b7tmf91j1ChMuYhwbPBnNgB62dmHuqiHpOdd6QLKzde8HydZqm+ud3qWreGWecSxPBFFNOf1Ozjx0xo2plFdHA==", + "jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "dependencies": { + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + } + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", "requires": { - "is-promise": "^2.0.0", - "promise": "^6.0.1" + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" } }, "kareem": { @@ -2090,23 +3309,55 @@ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==" }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" }, - "lazy-cache": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", - "integrity": "sha512-RE2g0b5VGZsOCFOCgP7omTRYFqydmZkBwl5oNnQ1lDYC57uyO9KqNnNVxT7COSHTxrRCWVcAVOcbjk+tvh/rgQ==" + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" }, - "longest": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", - "integrity": "sha512-k+yt5n3l48JU4k8ftnKG6V7u32wyH2NfKzeMto9F/QRE0amxy/LayxwlvjjkZEIzqR+19IrtFO8p5kB9QaYUFg==" + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==" + } + } }, "media-typer": { "version": "0.3.0", @@ -2129,28 +3380,27 @@ "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" }, "mime": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", - "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" }, "mime-db": { - "version": "1.48.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", - "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==" + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.31", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", - "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.48.0" + "mime-db": "1.52.0" } }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2160,6 +3410,30 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -2188,9 +3462,9 @@ } }, "mongoose": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.1.tgz", - "integrity": "sha512-odQ2WEWGL3hb0Qex+QMN4eH6D34WdMEw7F1If2MGABApSDmG9cMmqv/G1H6WsXmuaH9mkuuadW/WbLE5+tHJwA==", + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.3.tgz", + "integrity": "sha512-GxPVLD+I/dxVkgcts2r2QmJJvS62/++btVj3RFt8YnHt+DSOp1Qjj62YEvgZaElwIOTcc4KGJM95X5LlrU1qQg==", "requires": { "bson": "^6.7.0", "kareem": "2.6.3", @@ -2254,9 +3528,43 @@ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==" + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" + }, + "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-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==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "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==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } }, "nodemon": { "version": "3.1.3", @@ -2293,17 +3601,41 @@ } } }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "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==" }, + "object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -2317,6 +3649,14 @@ "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, "optimist": { "version": "0.3.7", "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", @@ -2330,6 +3670,11 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "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==" + }, "path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", @@ -2341,14 +3686,6 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, - "promise": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", - "integrity": "sha512-O+uwGKreKNKkshzZv2P7N64lk6EP17iXBn0PbUnNQhk+Q0AHLstiTrjkx3v5YBd3cxUe7Sq6KyRhl/A0xUjk7Q==", - "requires": { - "asap": "~1.0.0" - } - }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -2370,9 +3707,12 @@ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==" + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "requires": { + "side-channel": "^1.0.4" + } }, "range-parser": { "version": "1.2.1", @@ -2380,14 +3720,58 @@ "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" }, "raw-body": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz", - "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==", + "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==", "requires": { - "bytes": "3.0.0", - "http-errors": "1.6.3", - "iconv-lite": "0.4.23", + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", "unpipe": "1.0.0" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "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==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "readdirp": { @@ -2399,17 +3783,12 @@ "picomatch": "^2.2.1" } }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" - }, - "right-align": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", - "integrity": "sha512-yqINtL/G7vs2v+dFIZmFUDbnVyFUJFKd6gK22Kgo6R4jfJGFtisKyncWDDULgjfqf4ASQuIQyjJ7XZ+3aWpsAg==", + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "requires": { - "align-text": "^0.1.1" + "glob": "^7.1.3" } }, "safe-buffer": { @@ -2425,38 +3804,102 @@ "semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", - "dev": true + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" }, "send": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", - "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "requires": { "debug": "2.6.9", - "depd": "~1.1.2", - "destroy": "~1.0.4", + "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": "~1.6.2", - "mime": "1.4.1", - "ms": "2.0.0", - "on-finished": "~2.3.0", - "range-parser": "~1.2.0", - "statuses": "~1.4.0" + "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" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" + }, + "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==", + "requires": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "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==", + "requires": { + "ee-first": "1.1.1" + } + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" + } } }, "serve-static": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", - "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "requires": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", - "parseurl": "~1.3.2", - "send": "0.16.2" + "parseurl": "~1.3.3", + "send": "0.18.0" + } + }, + "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==" + }, + "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==", + "requires": { + "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" } }, "setprototypeof": { @@ -2464,11 +3907,27 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "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==", + "requires": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + } + }, "sift": { "version": "17.1.3", "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" }, + "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==" + }, "simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -2479,9 +3938,9 @@ } }, "source-map": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", "requires": { "amdefine": ">=0.0.4" } @@ -2499,6 +3958,39 @@ "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, + "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==", + "requires": { + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "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==" + } + } + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "requires": { + "ansi-regex": "^5.0.1" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -2508,6 +4000,26 @@ "has-flag": "^3.0.0" } }, + "tar": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", + "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", + "requires": { + "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" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + } + } + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2517,6 +4029,11 @@ "is-number": "^7.0.0" } }, + "toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" + }, "touch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", @@ -2553,23 +4070,6 @@ "requires": { "is-promise": "~1" } - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", - "requires": { - "amdefine": ">=0.0.4" - } - }, - "uglify-js": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", - "integrity": "sha512-viLk+/8G0zm2aKt1JJAVcz5J/5ytdiNaIsKgrre3yvSUjwVG6ZUujGH7E2TiPigZUwLYCe7eaIUEP2Zka2VJPA==", - "requires": { - "optimist": "~0.3.5", - "source-map": "~0.1.7" - } } } }, @@ -2583,28 +4083,14 @@ } }, "uglify-js": { - "version": "2.8.29", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", - "integrity": "sha512-qLq/4y2pjcU3vhlhseXGGJ7VbFO4pBANu0kwl8VCa9KEI0V8VfZIx2Fy3w01iSTA/pGwKZSmu/+I4etLNDdt5w==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha512-viLk+/8G0zm2aKt1JJAVcz5J/5ytdiNaIsKgrre3yvSUjwVG6ZUujGH7E2TiPigZUwLYCe7eaIUEP2Zka2VJPA==", "requires": { - "source-map": "~0.5.1", - "uglify-to-browserify": "~1.0.0", - "yargs": "~3.10.0" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==" - } + "optimist": "~0.3.5", + "source-map": "~0.1.7" } }, - "uglify-to-browserify": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", - "integrity": "sha512-vb2s1lYx2xBtUgy+ta+b2J/GLVUR+wmpINwHePmPRhOsIVCG2wDzKJ0n14GslH1BifsqVzSOwQhRaCAsZ/nI4Q==", - "optional": true - }, "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", @@ -2616,6 +4102,11 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, "utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", @@ -2645,10 +4136,13 @@ "webidl-conversions": "^7.0.0" } }, - "window-size": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", - "integrity": "sha512-1pTPQDKTdd61ozlKGNCjhNRd+KPmgLSGa3mZTHoOliaGcESD8G1PXhh7c1fgiPjVbNVfgy2Faw4BI8/m0cC8Mg==" + "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==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } }, "with": { "version": "4.0.3", @@ -2671,16 +4165,15 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==" }, - "yargs": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", - "integrity": "sha512-QFzUah88GAGy9lyDKGBqZdkYApt63rCXYBGYnEP4xDJPXNqXXnBDACnbrXnViV6jRSqAePwrATi2i8mfYm4L1A==", - "requires": { - "camelcase": "^1.0.2", - "cliui": "^2.1.0", - "decamelize": "^1.0.0", - "window-size": "0.1.0" - } + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } } From ead73073b8c1a7c8be8f9f71dc4091e49d7f0203 Mon Sep 17 00:00:00 2001 From: eliassolari Date: Thu, 20 Jun 2024 14:58:21 -0300 Subject: [PATCH 24/73] IEPE-003 (ESOLARI) - feat : se instalaron las dependencias necesarias --- package.json | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 81392b1..df4bc45 100644 --- a/package.json +++ b/package.json @@ -7,15 +7,17 @@ "start": "node src/index.js" }, "dependencies": { + "bcrypt": "^5.1.1", "cookie-parser": "~1.4.4", + "cors": "^2.8.5", "debug": "~2.6.9", - "express": "~4.16.1", + "dotenv": "^16.4.5", + "express": "^4.19.2", "http-errors": "~1.6.3", - "jade": "~1.11.0", - "morgan": "~1.9.1", - "mongoose": "^8.3.1", - "cors": "^2.8.5", - "dotenv": "^16.4.5" + "jade": "^1.9.2", + "jsonwebtoken": "^9.0.2", + "mongoose": "^8.4.3", + "morgan": "~1.9.1" }, "devDependencies": { "nodemon": "^3.1.0" From 48c188482747e31a2bb0f840a191b4b0ddb879fb Mon Sep 17 00:00:00 2001 From: eliassolari Date: Thu, 20 Jun 2024 14:59:28 -0300 Subject: [PATCH 25/73] IEPE-004 (ESOLARI) - feat : se agrego el index para optimizar busquedas por DNI --- src/configurations/schemas/member/Member.schema.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/configurations/schemas/member/Member.schema.js b/src/configurations/schemas/member/Member.schema.js index 28bf41c..82ea99f 100644 --- a/src/configurations/schemas/member/Member.schema.js +++ b/src/configurations/schemas/member/Member.schema.js @@ -2,7 +2,7 @@ const mongoose = require('mongoose'); const { Schema } = mongoose; const memberSchema = new Schema({ - dni: { type: String, required: true }, + dni: { index:true, type: String, required: true}, firstName: { type: String, required: true }, lastName: { type: String, required: true }, avatar: { type: String, required: false }, From 3d546cab1d9310df4bcf9bcd73f7e0b1a8740840 Mon Sep 17 00:00:00 2001 From: eliassolari Date: Thu, 20 Jun 2024 15:01:27 -0300 Subject: [PATCH 26/73] IEPE-005 (ESOLARI) - feat : se crean las funciones para hash de las password --- src/configurations/db.config.js | 4 ++-- src/utils/hashPassword.js | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 src/utils/hashPassword.js diff --git a/src/configurations/db.config.js b/src/configurations/db.config.js index 32e44f3..1b9df90 100644 --- a/src/configurations/db.config.js +++ b/src/configurations/db.config.js @@ -1,8 +1,8 @@ const mongoose = require('mongoose'); const db = async () => { - try { - await mongoose.connect(`mongodb+srv://${process.env.DB_USER_NAME}:${process.env.DB_PASSWORD}@iepe.bkgwmcp.mongodb.net/${process.env.DB_NAME}?retryWrites=true&w=majority&appName=IEPE`); + try {await mongoose.connect("mongodb+srv://iepuebloelegido:RM1llgR3wTNG8teu@iepe.bkgwmcp.mongodb.net/"); + //await mongoose.connect(`mongodb+srv://${process.env.DB_USER_NAME}:${process.env.DB_PASSWORD}@iepe.bkgwmcp.mongodb.net/${process.env.DB_NAME}?retryWrites=true&w=majority&appName=IEPE`); console.log('Connected to MongoDB'); } catch (err) { console.log(err); diff --git a/src/utils/hashPassword.js b/src/utils/hashPassword.js new file mode 100644 index 0000000..df654c7 --- /dev/null +++ b/src/utils/hashPassword.js @@ -0,0 +1,12 @@ +const bcrypt = require('bcrypt'); +// Hasheo de contraseñan + +export const createHash = (password) => { + return bcrypt.hashSync(password, bcrypt.genSaltSync(10)); + }; + + // Validar la contraseña + + export const isValidPassword = (user, password) => { + return bcrypt.compareSync(password, user.password); + }; \ No newline at end of file From 39624ceafe93fb64089ed86afd6c8953dc611f03 Mon Sep 17 00:00:00 2001 From: eliassolari Date: Thu, 20 Jun 2024 15:04:53 -0300 Subject: [PATCH 27/73] IEPE-006 (ESOLARI) - revert : --- src/configurations/db.config.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/configurations/db.config.js b/src/configurations/db.config.js index 1b9df90..03d5f68 100644 --- a/src/configurations/db.config.js +++ b/src/configurations/db.config.js @@ -1,8 +1,7 @@ const mongoose = require('mongoose'); const db = async () => { - try {await mongoose.connect("mongodb+srv://iepuebloelegido:RM1llgR3wTNG8teu@iepe.bkgwmcp.mongodb.net/"); - //await mongoose.connect(`mongodb+srv://${process.env.DB_USER_NAME}:${process.env.DB_PASSWORD}@iepe.bkgwmcp.mongodb.net/${process.env.DB_NAME}?retryWrites=true&w=majority&appName=IEPE`); + try {await mongoose.connect(`mongodb+srv://${process.env.DB_USER_NAME}:${process.env.DB_PASSWORD}@iepe.bkgwmcp.mongodb.net/${process.env.DB_NAME}?retryWrites=true&w=majority&appName=IEPE`); console.log('Connected to MongoDB'); } catch (err) { console.log(err); From 000c906e7ba886394369fd13c5059af9d7b47f13 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Sat, 22 Jun 2024 12:39:41 -0300 Subject: [PATCH 28/73] bajo a 5 --- src/repositories/MongoMemberRepository.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/repositories/MongoMemberRepository.js b/src/repositories/MongoMemberRepository.js index 5113645..d32c851 100644 --- a/src/repositories/MongoMemberRepository.js +++ b/src/repositories/MongoMemberRepository.js @@ -6,7 +6,7 @@ class MongoMemberRepository { } async find(page) { - const pageSize = 10; // Tamaño de página, puedes ajustarlo según tus necesidades + const pageSize = 5; // Tamaño de página, puedes ajustarlo según tus necesidades const skip = page * pageSize; // Cálculo de skip considerando la indexación base 0 const members = await MemberModel.find() From 0eed58bb717e53c4c33de00cb257f010cccef327 Mon Sep 17 00:00:00 2001 From: "@vortiz-agropago" Date: Sun, 23 Jun 2024 23:54:14 -0300 Subject: [PATCH 29/73] filtro --- src/index.js | 13 ++++++-- src/repositories/MongoMemberRepository.js | 40 +++++++++++++++++++---- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/src/index.js b/src/index.js index 1f89225..ba0de07 100644 --- a/src/index.js +++ b/src/index.js @@ -43,15 +43,21 @@ const createMember = async (req, res) => { }; const getMembers = async (req, res) => { - const { page } = req.query; + const { page, filter } = req.query; try { - const members = await memberRepository.find(page); + let members; + if (filter) { + members = await memberRepository.findByFilter(filter, page); + } else { + members = await memberRepository.find(page); + } res.status(200).json(members); } catch (error) { res.status(500).json({ message: error.message }); } }; + const getMemberById = async (req, res) => { try { const { id } = req.params; @@ -88,6 +94,9 @@ const deleteMember = async (req, res) => { } }; + + + // Rutas app.post('/members', createMember); app.get('/members', getMembers); diff --git a/src/repositories/MongoMemberRepository.js b/src/repositories/MongoMemberRepository.js index d32c851..71d4478 100644 --- a/src/repositories/MongoMemberRepository.js +++ b/src/repositories/MongoMemberRepository.js @@ -8,13 +8,13 @@ class MongoMemberRepository { async find(page) { const pageSize = 5; // Tamaño de página, puedes ajustarlo según tus necesidades const skip = page * pageSize; // Cálculo de skip considerando la indexación base 0 - + const members = await MemberModel.find() .skip(skip) .limit(pageSize); - + const total = await MemberModel.countDocuments(); // Obtiene el conteo total de documentos - + return { members, total, @@ -22,15 +22,43 @@ class MongoMemberRepository { totalPages: Math.ceil(total / pageSize) }; } - - + + // Ejemplo en MongoMemberRepository.js + async findByFilter(filter, page) { + const perPage = 10; // Número de resultados por página + const pageNumber = parseInt(page) || 1; + const skip = (pageNumber - 1) * perPage; + + // Utiliza tu lógica para buscar por nombre o DNI según el filtro + const query = { + $or: [ + { firstName: { $regex: filter, $options: 'i' } }, // Búsqueda por nombre (case-insensitive) + { dni: { $regex: filter, $options: 'i' } } // Búsqueda por DNI (case-insensitive) + ] + }; + + const members = await MemberModel.find(query) + .skip(skip) + .limit(perPage) + .exec(); + + const totalMembers = await MemberModel.countDocuments(query); + const totalPages = Math.ceil(totalMembers / perPage); + + return { + members, + total: totalMembers, + totalPages + }; + } + async findById(dni) { const member = await MemberModel.findOne({ dni }); return member; } async save(member) { - const newMember = new MemberModel(member); + const newMember = new MemberModel(member); return await newMember.save(); } From 756460c207c2e48df18e726cab120bbdbcceacd8 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 21:09:00 -0300 Subject: [PATCH 30/73] credenciales --- package-lock.json | 8168 ++++++++++++++++++++++++++------- package.json | 7 +- src/index.js | 321 +- src/public/static/default.jpg | Bin 0 -> 18388 bytes src/public/static/logo.png | Bin 0 -> 815115 bytes 5 files changed, 6720 insertions(+), 1776 deletions(-) create mode 100644 src/public/static/default.jpg create mode 100644 src/public/static/logo.png diff --git a/package-lock.json b/package-lock.json index 5760634..fe9e754 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,733 +14,1172 @@ "debug": "~2.6.9", "dotenv": "^16.4.5", "express": "^4.19.2", + "fs": "^0.0.1-security", "http-errors": "~1.6.3", "jade": "^1.9.2", + "jimp": "^0.22.12", "jsonwebtoken": "^9.0.2", "mongoose": "^8.4.3", - "morgan": "~1.9.1" + "morgan": "~1.9.1", + "node-html-to-image": "^4.0.0", + "qrcode": "^1.5.3", + "sharp": "^0.33.4" }, "devDependencies": { "nodemon": "^3.1.0" } }, - "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==", + "node_modules/@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "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" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, - "bin": { - "node-pre-gyp": "bin/node-pre-gyp" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", - "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", - "dependencies": { - "sparse-bitfield": "^3.0.3" + "node_modules/@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", + "engines": { + "node": ">=6.9.0" } }, - "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": "11.0.5", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", - "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "node_modules/@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dependencies": { - "@types/webidl-conversions": "*" + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" } }, - "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==", + "node_modules/@emnapi/runtime": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", + "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "optional": true, "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" + "tslib": "^2.4.0" } }, - "node_modules/acorn": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", - "integrity": "sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==", - "bin": { - "acorn": "bin/acorn" - }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", + "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=0.4.0" + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" } }, - "node_modules/acorn-globals": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", - "integrity": "sha512-j3/4pkfih8W4NK22gxVSXcEonTpAHOHh0hu5BoZrKcOsW/4oBPxTi4Yk3SAj+FhC1f3+bRTkXdm4019gw1vg9g==", - "dependencies": { - "acorn": "^2.1.0" + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", + "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.2" } }, - "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" - }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 6.0.0" + "macos": ">=11", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/agent-base/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dependencies": { - "ms": "2.1.2" - }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.0" + "macos": ">=10.13", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "url": "https://opencollective.com/libvips" } }, - "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/amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.4.2" + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "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==", + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "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" - }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 8" + "glibc": ">=2.28", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "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==", - "deprecated": "This package is no longer supported.", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "glibc": ">=2.26", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/balanced-match": { + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/basic-auth": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", - "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", - "dependencies": { - "safe-buffer": "5.1.2" - }, + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8" + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "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" + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", + "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 10.0.0" + "glibc": ">=2.28", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.2" } }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "dev": true, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", + "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.2" } }, - "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" - }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", + "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "glibc": ">=2.31", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.2" } }, - "node_modules/body-parser/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==", + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", + "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8" + "glibc": ">=2.26", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.2" } }, - "node_modules/body-parser/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" - }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", + "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 0.8" + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" } }, - "node_modules/body-parser/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/@img/sharp-linuxmusl-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", + "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "musl": ">=1.2.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + } }, - "node_modules/body-parser/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==", + "node_modules/@img/sharp-wasm32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", + "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", + "cpu": [ + "wasm32" + ], + "optional": true, "dependencies": { - "ee-first": "1.1.1" + "@emnapi/runtime": "^1.1.1" }, "engines": { - "node": ">= 0.8" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/body-parser/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/body-parser/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", + "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.8" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "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/@img/sharp-win32-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", + "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0", + "npm": ">=9.6.5", + "pnpm": ">=7.1.0", + "yarn": ">=3.2.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", - "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", - "dev": true, + "node_modules/@jimp/bmp": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.22.12.tgz", + "integrity": "sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g==", "dependencies": { - "fill-range": "^7.1.1" + "@jimp/utils": "^0.22.12", + "bmp-js": "^0.1.0" }, - "engines": { - "node": ">=8" + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/bson": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", - "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==", - "engines": { - "node": ">=16.20.1" + "node_modules/@jimp/core": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.22.12.tgz", + "integrity": "sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA==", + "dependencies": { + "@jimp/utils": "^0.22.12", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^16.5.4", + "isomorphic-fetch": "^3.0.0", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.6.0" + } + }, + "node_modules/@jimp/custom": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.22.12.tgz", + "integrity": "sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==", + "dependencies": { + "@jimp/core": "^0.22.12" } }, - "node_modules/buffer-equal-constant-time": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + "node_modules/@jimp/gif": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.22.12.tgz", + "integrity": "sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg==", + "dependencies": { + "@jimp/utils": "^0.22.12", + "gifwrap": "^0.10.1", + "omggif": "^1.0.9" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } }, - "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/@jimp/jpeg": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.22.12.tgz", + "integrity": "sha512-Rq26XC/uQWaQKyb/5lksCTCxXhtY01NJeBN+dQv5yNYedN0i7iYu+fXEoRsfaJ8xZzjoANH8sns7rVP4GE7d/Q==", + "dependencies": { + "@jimp/utils": "^0.22.12", + "jpeg-js": "^0.4.4" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "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==", + "node_modules/@jimp/plugin-blit": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.22.12.tgz", + "integrity": "sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==", "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" + "@jimp/utils": "^0.22.12" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-blur": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.22.12.tgz", + "integrity": "sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==", + "dependencies": { + "@jimp/utils": "^0.22.12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/character-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", - "integrity": "sha512-6OEBVBlf/y8LaAphnbAnt743O3zMhlBer+FO5D40H6wqAdU9B1TvuApkejgLW0cvv0tEZNLktv1AnRI+C87ueQ==" + "node_modules/@jimp/plugin-circle": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.22.12.tgz", + "integrity": "sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg==", + "dependencies": { + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dev": true, + "node_modules/@jimp/plugin-color": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.22.12.tgz", + "integrity": "sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==", "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "@jimp/utils": "^0.22.12", + "tinycolor2": "^1.6.0" }, - "engines": { - "node": ">= 8.10.0" + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-contain": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.22.12.tgz", + "integrity": "sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ==", + "dependencies": { + "@jimp/utils": "^0.22.12" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-cover": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.22.12.tgz", + "integrity": "sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA==", + "dependencies": { + "@jimp/utils": "^0.22.12" }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5", + "@jimp/plugin-scale": ">=0.3.5" } }, - "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/@jimp/plugin-crop": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.22.12.tgz", + "integrity": "sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==", + "dependencies": { + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "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/@jimp/plugin-displace": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.22.12.tgz", + "integrity": "sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA==", + "dependencies": { + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/commander": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", - "integrity": "sha512-PhbTMT+ilDXZKqH8xbvuUY2ZEQNef0Q7DKxgoEKb4ccytsdvVVJmYqR0sGbi96nxU6oGrwEIQnclpK2NBZuQlg==", - "engines": { - "node": ">= 0.6.x" + "node_modules/@jimp/plugin-dither": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.22.12.tgz", + "integrity": "sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw==", + "dependencies": { + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "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/@jimp/plugin-fisheye": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.12.tgz", + "integrity": "sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q==", + "dependencies": { + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } }, - "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/@jimp/plugin-flip": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.22.12.tgz", + "integrity": "sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q==", + "dependencies": { + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-rotate": ">=0.3.5" + } }, - "node_modules/constantinople": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", - "integrity": "sha512-UnEggAQrmhxuTxlb7n1OsTtagNXWUv2CRlOogZhWOU4jLK4EJEbF8UDSNxuGu+jVtWNtO2j51ab2H1wlBIzF/w==", - "deprecated": "Please update to at least constantinople 3.1.1", + "node_modules/@jimp/plugin-gaussian": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.12.tgz", + "integrity": "sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg==", "dependencies": { - "acorn": "^2.1.0" + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "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==", + "node_modules/@jimp/plugin-invert": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.22.12.tgz", + "integrity": "sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ==", "dependencies": { - "safe-buffer": "5.2.1" + "@jimp/utils": "^0.22.12" }, - "engines": { - "node": ">= 0.6" + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/content-disposition/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/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/@jimp/plugin-mask": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.22.12.tgz", + "integrity": "sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA==", + "dependencies": { + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/cookie": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", - "engines": { - "node": ">= 0.6" + "node_modules/@jimp/plugin-normalize": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.22.12.tgz", + "integrity": "sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA==", + "dependencies": { + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/cookie-parser": { - "version": "1.4.6", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", - "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "node_modules/@jimp/plugin-print": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.22.12.tgz", + "integrity": "sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ==", "dependencies": { - "cookie": "0.4.1", - "cookie-signature": "1.0.6" + "@jimp/utils": "^0.22.12", + "load-bmfont": "^1.4.1" }, - "engines": { - "node": ">= 0.8.0" + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5" } }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "node_modules/cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "node_modules/@jimp/plugin-resize": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.22.12.tgz", + "integrity": "sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==", "dependencies": { - "object-assign": "^4", - "vary": "^1" + "@jimp/utils": "^0.22.12" }, - "engines": { - "node": ">= 0.10" + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/css": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", - "integrity": "sha512-qmTYWhHk910nQWnGqMAiWWPQlB6tESiWgNebQJmiozOAGcBAQ1+U/UzUOkhdrcshlkSRRiKWodwmVvO0OmnIGg==", + "node_modules/@jimp/plugin-rotate": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.22.12.tgz", + "integrity": "sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==", "dependencies": { - "css-parse": "1.0.4", - "css-stringify": "1.0.5" + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blit": ">=0.3.5", + "@jimp/plugin-crop": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" } }, - "node_modules/css-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", - "integrity": "sha512-pfstzKVRZiHprDXdsmtfH1HYUEw22lzjuHdnpe1hscwoQvgW2C5zDQIBE0RKoALEReTn9W1ECdY8uaT/kO4VfA==" - }, - "node_modules/css-stringify": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", - "integrity": "sha512-aIThpcErhG5EyHorGqNlTh0TduNBqLrrXLO3x5rku3ZKBxuVfY+T7noyM2G2X/01iQANqJUb6d3+FLoa+N7Xwg==" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "node_modules/@jimp/plugin-scale": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.22.12.tgz", + "integrity": "sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw==", "dependencies": { - "ms": "2.0.0" + "@jimp/utils": "^0.22.12" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" } }, - "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==", + "node_modules/@jimp/plugin-shadow": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.22.12.tgz", + "integrity": "sha512-FX8mTJuCt7/3zXVoeD/qHlm4YH2bVqBuWQHXSuBK054e7wFRnRnbSLPUqAwSeYP3lWqpuQzJtgiiBxV3+WWwTg==", "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "@jimp/utils": "^0.22.12" }, - "engines": { - "node": ">= 0.4" + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-blur": ">=0.3.5", + "@jimp/plugin-resize": ">=0.3.5" + } + }, + "node_modules/@jimp/plugin-threshold": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.22.12.tgz", + "integrity": "sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw==", + "dependencies": { + "@jimp/utils": "^0.22.12" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@jimp/custom": ">=0.3.5", + "@jimp/plugin-color": ">=0.8.0", + "@jimp/plugin-resize": ">=0.8.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/@jimp/plugins": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.22.12.tgz", + "integrity": "sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww==", + "dependencies": { + "@jimp/plugin-blit": "^0.22.12", + "@jimp/plugin-blur": "^0.22.12", + "@jimp/plugin-circle": "^0.22.12", + "@jimp/plugin-color": "^0.22.12", + "@jimp/plugin-contain": "^0.22.12", + "@jimp/plugin-cover": "^0.22.12", + "@jimp/plugin-crop": "^0.22.12", + "@jimp/plugin-displace": "^0.22.12", + "@jimp/plugin-dither": "^0.22.12", + "@jimp/plugin-fisheye": "^0.22.12", + "@jimp/plugin-flip": "^0.22.12", + "@jimp/plugin-gaussian": "^0.22.12", + "@jimp/plugin-invert": "^0.22.12", + "@jimp/plugin-mask": "^0.22.12", + "@jimp/plugin-normalize": "^0.22.12", + "@jimp/plugin-print": "^0.22.12", + "@jimp/plugin-resize": "^0.22.12", + "@jimp/plugin-rotate": "^0.22.12", + "@jimp/plugin-scale": "^0.22.12", + "@jimp/plugin-shadow": "^0.22.12", + "@jimp/plugin-threshold": "^0.22.12", + "timm": "^1.6.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" + } }, - "node_modules/depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", - "engines": { - "node": ">= 0.6" + "node_modules/@jimp/png": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.22.12.tgz", + "integrity": "sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg==", + "dependencies": { + "@jimp/utils": "^0.22.12", + "pngjs": "^6.0.0" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "node_modules/@jimp/png/node_modules/pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==", "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" + "node": ">=12.13.0" } }, - "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/@jimp/tiff": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.22.12.tgz", + "integrity": "sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg==", + "dependencies": { + "utif2": "^4.0.1" + }, + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" + "node_modules/@jimp/types": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.22.12.tgz", + "integrity": "sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA==", + "dependencies": { + "@jimp/bmp": "^0.22.12", + "@jimp/gif": "^0.22.12", + "@jimp/jpeg": "^0.22.12", + "@jimp/png": "^0.22.12", + "@jimp/tiff": "^0.22.12", + "timm": "^1.6.1" }, - "funding": { - "url": "https://dotenvx.com" + "peerDependencies": { + "@jimp/custom": ">=0.3.5" } }, - "node_modules/ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "node_modules/@jimp/utils": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz", + "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==", "dependencies": { - "safe-buffer": "^5.0.1" + "regenerator-runtime": "^0.13.3" } }, - "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/@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/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/@mongodb-js/saslprep": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.7.tgz", + "integrity": "sha512-dCHW/oEX0KJ4NjDULBo3JiOaK5+6axtpBbS+ao2ZInoAL9/YRQLhXzSNAFz7hP4nzLkIqsfYAK/PDE3+XHny0Q==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } }, - "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==", + "node_modules/@puppeteer/browsers": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.5.0.tgz", + "integrity": "sha512-za318PweGINh5LnHSph7C4xhs0tmRjCD8EPpzcKlw4nzSPhnULj+LTG3+TGefZvW1ti5gjw2JkdQvQsivBeZlg==", + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "progress": "2.0.3", + "proxy-agent": "6.3.0", + "tar-fs": "3.0.4", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, "engines": { - "node": ">= 0.8" + "node": ">=16.3.0" } }, - "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==", + "node_modules/@puppeteer/browsers/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dependencies": { - "get-intrinsic": "^1.2.4" + "ms": "2.1.2" }, "engines": { - "node": ">= 0.4" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "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/@puppeteer/browsers/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/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + }, + "node_modules/@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "optional": true, + "dependencies": { + "undici-types": "~5.26.4" } }, - "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/@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/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "node_modules/@types/whatwg-url": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz", + "integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "dependencies": { + "@types/node": "*" + } + }, + "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/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "node_modules/acorn": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", + "integrity": "sha512-pXK8ez/pVjqFdAgBkF1YPVRacuLQ9EXBKaKWaeh58WNfMkCmZhOZzu+NtKSPD5PHmCCHheQ5cD29qM1K4QTxIg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", + "integrity": "sha512-j3/4pkfih8W4NK22gxVSXcEonTpAHOHh0hu5BoZrKcOsW/4oBPxTi4Yk3SAj+FhC1f3+bRTkXdm4019gw1vg9g==", "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" + "acorn": "^2.1.0" + } + }, + "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": ">= 0.10.0" + "node": ">= 6.0.0" } }, - "node_modules/express/node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">= 0.6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/express/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==", + "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/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "engines": { - "node": ">= 0.8" + "node": ">=0.4.2" } }, - "node_modules/express/node_modules/http-errors": { + "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": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, + "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/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "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==", + "deprecated": "This package is no longer supported.", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 0.8" + "node": ">=10" } }, - "node_modules/express/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/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, - "node_modules/express/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==", + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" + }, + "node_modules/ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", "dependencies": { - "ee-first": "1.1.1" + "tslib": "^2.0.1" }, "engines": { - "node": ">= 0.8" + "node": ">=4" } }, - "node_modules/express/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==", + "node_modules/b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" + }, + "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.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "optional": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", "funding": [ { "type": "github", @@ -756,162 +1195,221 @@ } ] }, - "node_modules/express/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/express/node_modules/statuses": { + "node_modules/basic-auth": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "dependencies": { + "safe-buffer": "5.1.2" + }, "engines": { "node": ">= 0.8" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", - "dev": true, + "node_modules/basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, "dependencies": { - "to-regex-range": "^5.0.1" + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "node_modules/bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" + }, + "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", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/finalhandler/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" - }, + "node_modules/body-parser/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/finalhandler/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/body-parser/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/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "node_modules/body-parser/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/body-parser/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.6" + "node": ">= 0.8" } }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "node_modules/body-parser/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/body-parser/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.6" + "node": ">= 0.8" } }, - "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==", + "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": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "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==", + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, "dependencies": { - "yallist": "^4.0.0" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + "node_modules/bson": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", + "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==", + "engines": { + "node": ">=16.20.1" + } }, - "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" + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "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==", "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": "*" } }, - "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/buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==", + "engines": { + "node": ">=0.4.0" } }, - "node_modules/gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "deprecated": "This package is no longer supported.", - "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" - }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "engines": { - "node": ">=10" + "node": ">= 0.8" } }, - "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==", + "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", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -920,604 +1418,706 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "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" - }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">=6" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "engines": { + "node": ">=6" + } + }, + "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==", "dependencies": { - "is-glob": "^4.0.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">= 6" + "node": ">=4" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/character-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", + "integrity": "sha512-6OEBVBlf/y8LaAphnbAnt743O3zMhlBer+FO5D40H6wqAdU9B1TvuApkejgLW0cvv0tEZNLktv1AnRI+C87ueQ==" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, "dependencies": { - "get-intrinsic": "^1.1.3" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "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, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "engines": { - "node": ">=4" + "node": ">=10" } }, - "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==", + "node_modules/chromium-bidi": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.20.tgz", + "integrity": "sha512-ruHgVZFEv00mAQMz1tQjfjdG63jiPWrQPF6HLlX2ucqLqVTJoWngeBEKHaJ6n1swV/HSvgnBNbtTRIlcVyW3Fw==", "dependencies": { - "es-define-property": "^1.0.0" + "mitt": "3.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "devtools-protocol": "*" } }, - "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==", + "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==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=12" + } + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12.5.0" } }, - "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/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==", + "dependencies": { + "color-name": "1.1.3" } }, - "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/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dependencies": { - "function-bind": "^1.1.2" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "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/color/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" + "node": ">=7.0.0" } }, - "node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "node_modules/color/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", + "integrity": "sha512-PhbTMT+ilDXZKqH8xbvuUY2ZEQNef0Q7DKxgoEKb4ccytsdvVVJmYqR0sGbi96nxU6oGrwEIQnclpK2NBZuQlg==", + "engines": { + "node": ">= 0.6.x" + } + }, + "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/constantinople": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", + "integrity": "sha512-UnEggAQrmhxuTxlb7n1OsTtagNXWUv2CRlOogZhWOU4jLK4EJEbF8UDSNxuGu+jVtWNtO2j51ab2H1wlBIzF/w==", + "deprecated": "Please update to at least constantinople 3.1.1", "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "acorn": "^2.1.0" + } + }, + "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/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==", + "node_modules/content-disposition/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/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/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", "dependencies": { - "agent-base": "6", - "debug": "4" + "cookie": "0.4.1", + "cookie-signature": "1.0.6" }, "engines": { - "node": ">= 6" + "node": ">= 0.8.0" } }, - "node_modules/https-proxy-agent/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", "dependencies": { - "ms": "2.1.2" + "object-assign": "^4", + "vary": "^1" }, "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.10" } }, - "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/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" } }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", - "dev": true + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dependencies": { + "node-fetch": "^2.6.12" + } }, - "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==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/css": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", + "integrity": "sha512-qmTYWhHk910nQWnGqMAiWWPQlB6tESiWgNebQJmiozOAGcBAQ1+U/UzUOkhdrcshlkSRRiKWodwmVvO0OmnIGg==", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "css-parse": "1.0.4", + "css-stringify": "1.0.5" } }, - "node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + "node_modules/css-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", + "integrity": "sha512-pfstzKVRZiHprDXdsmtfH1HYUEw22lzjuHdnpe1hscwoQvgW2C5zDQIBE0RKoALEReTn9W1ECdY8uaT/kO4VfA==" }, - "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==", + "node_modules/css-stringify": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", + "integrity": "sha512-aIThpcErhG5EyHorGqNlTh0TduNBqLrrXLO3x5rku3ZKBxuVfY+T7noyM2G2X/01iQANqJUb6d3+FLoa+N7Xwg==" + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==", "engines": { - "node": ">= 0.10" + "node": ">= 14" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" + "ms": "2.0.0" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "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": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, + "node_modules/degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", "dependencies": { - "is-extglob": "^2.1.1" + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 14" } }, - "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/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, - "node_modules/jade": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/jade/-/jade-1.9.2.tgz", - "integrity": "sha512-MhDlh3ZW0a06RiI2T/sDEYPUXTnfOkSIECRsPLiZtebz+Fi2ZaB0IVdJxSGDt6lWg4jHMEiHuq/0cPpppt1kqQ==", - "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", - "dependencies": { - "character-parser": "1.2.1", - "commander": "~2.6.0", - "constantinople": "~3.0.1", - "mkdirp": "~0.5.0", - "transformers": "2.1.0", - "void-elements": "~2.0.1", - "with": "~4.0.0" - }, - "bin": { - "jade": "bin/jade.js" + "node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "engines": { + "node": ">= 0.6" } }, - "node_modules/jsonwebtoken": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", - "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", - "dependencies": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^7.5.4" - }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "engines": { - "node": ">=12", - "npm": ">=6" + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/jsonwebtoken/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "dependencies": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" + "node_modules/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/jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "dependencies": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } + "node_modules/devtools-protocol": { + "version": "0.0.1147663", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", + "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==" }, - "node_modules/kareem": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", - "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "node_modules/dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, + "node_modules/dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "engines": { - "node": ">=12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, - "node_modules/lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + "node_modules/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/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + "node_modules/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/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + "node_modules/encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "node_modules/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/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + "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==", + "dependencies": { + "is-arrayish": "^0.2.1" + } }, - "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==", + "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": { - "semver": "^6.0.0" + "get-intrinsic": "^1.2.4" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "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/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/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==", + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "engines": { - "node": ">= 0.6" + "node": ">=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": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "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/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "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==", "engines": { - "node": ">= 0.6" + "node": ">=0.8.0" } }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, "bin": { - "mime": "cli.js" + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=4" + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "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==", + "node_modules/escodegen/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==", + "optional": true, "engines": { - "node": ">= 0.6" + "node": ">=0.10.0" } }, - "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" + "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==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" }, "engines": { - "node": ">= 0.6" + "node": ">=4" } }, - "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" - }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=4.0" } }, - "node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "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" - }, + "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": ">= 8" + "node": ">= 0.6" } }, - "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/exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "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": { - "minimist": "^1.2.6" + "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" }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">= 0.10.0" } }, - "node_modules/mongodb": { - "version": "6.6.2", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", - "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==", - "dependencies": { - "@mongodb-js/saslprep": "^1.1.5", - "bson": "^6.7.0", - "mongodb-connection-string-url": "^3.0.0" - }, + "node_modules/express/node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "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": ">= 0.6" } }, - "node_modules/mongodb-connection-string-url": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", - "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", - "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^13.0.0" + "node_modules/express/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/mongoose": { - "version": "8.4.3", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.3.tgz", - "integrity": "sha512-GxPVLD+I/dxVkgcts2r2QmJJvS62/++btVj3RFt8YnHt+DSOp1Qjj62YEvgZaElwIOTcc4KGJM95X5LlrU1qQg==", + "node_modules/express/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": { - "bson": "^6.7.0", - "kareem": "2.6.3", - "mongodb": "6.6.2", - "mpath": "0.9.0", - "mquery": "5.0.0", - "ms": "2.1.3", - "sift": "17.1.3" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" }, "engines": { - "node": ">=16.20.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" + "node": ">= 0.8" } }, - "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/express/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/morgan": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", - "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "node_modules/express/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": { - "basic-auth": "~2.0.0", - "debug": "2.6.9", - "depd": "~1.1.2", - "on-finished": "~2.3.0", - "on-headers": "~1.0.1" + "ee-first": "1.1.1" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.8" } }, - "node_modules/mpath": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", - "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "node_modules/express/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/express/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/express/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": ">=4.0.0" + "node": ">= 0.8" } }, - "node_modules/mquery": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", - "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "node_modules/extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dependencies": { - "debug": "4.x" + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" }, "engines": { - "node": ">=14.0.0" + "node": ">= 10.17.0" + }, + "optionalDependencies": { + "@types/yauzl": "^2.9.1" } }, - "node_modules/mquery/node_modules/debug": { + "node_modules/extract-zip/node_modules/debug": { "version": "4.3.5", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", @@ -1533,599 +2133,552 @@ } } }, - "node_modules/mquery/node_modules/ms": { + "node_modules/extract-zip/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": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "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==" }, - "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/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==", + "dependencies": { + "pend": "~1.2.0" } }, - "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==", + "node_modules/file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", "dependencies": { - "whatwg-url": "^5.0.0" + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" }, "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" + "node": ">=10" }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" } }, - "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/nodemon": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", - "integrity": "sha512-m4Vqs+APdKzDFpuaL9F9EVOF85+h070FnkHVEoU4+rmT6Vw0bmNl7s61VEkY/cJkL7RCv1p4urnUDUMrS5rk2w==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" + "to-regex-range": "^5.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" + "node": ">=8" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", - "dev": true, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dependencies": { - "ms": "2.1.2" + "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": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">= 0.8" } }, - "node_modules/nodemon/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/nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "node_modules/finalhandler/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": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" + "ee-first": "1.1.1" }, "engines": { - "node": ">=6" + "node": ">= 0.8" } }, - "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, + "node_modules/finalhandler/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.10.0" + "node": ">= 0.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==", - "deprecated": "This package is no longer supported.", + "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==", "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==", + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, "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": ">=8" } }, - "node_modules/on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", - "dependencies": { - "ee-first": "1.1.1" - }, + "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.8" + "node": ">= 0.6" } }, - "node_modules/on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "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.8" + "node": ">= 0.6" } }, - "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/fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" }, - "node_modules/optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dependencies": { - "wordwrap": "~0.0.2" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" } }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "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": ">= 0.8" + "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==", + "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": ">=0.10.0" + "node": ">=8" } }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "node_modules/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/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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.6" - }, + "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/jonschlinkert" + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "deprecated": "This package is no longer supported.", "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" + "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": ">= 0.10" + "node": ">=10" } }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "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==", "engines": { - "node": ">=6" + "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "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": { - "side-channel": "^1.0.4" + "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.6" + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "pump": "^3.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/raw-body/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==", + "node_modules/get-uri": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4", + "fs-extra": "^11.2.0" + }, "engines": { - "node": ">= 0.8" + "node": ">= 14" } }, - "node_modules/raw-body/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==", + "node_modules/get-uri/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "ms": "2.1.2" }, "engines": { - "node": ">= 0.8" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/raw-body/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/raw-body/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "node_modules/get-uri/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/raw-body/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/gifwrap": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz", + "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==", + "dependencies": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" } }, - "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==", + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "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": ">= 6" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "dependencies": { - "picomatch": "^2.2.1" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=8.10.0" + "node": ">= 6" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "node_modules/global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, + "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/isaacs" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "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==" }, - "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, "bin": { - "semver": "bin/semver.js" + "handlebars": "bin/handlebars" }, "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" + "node": ">=0.4.7" }, - "engines": { - "node": ">= 0.8.0" + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/send/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==", + "node_modules/handlebars/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==", "engines": { - "node": ">= 0.8" + "node": ">=0.10.0" } }, - "node_modules/send/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" + "node_modules/handlebars/node_modules/uglify-js": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" }, "engines": { - "node": ">= 0.8" + "node": ">=0.8.0" } }, - "node_modules/send/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/handlebars/node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" }, - "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/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==", + "engines": { + "node": ">=4" + } }, - "node_modules/send/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==", + "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": { - "ee-first": "1.1.1" + "es-define-property": "^1.0.0" }, - "engines": { - "node": ">= 0.8" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/send/node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "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/send/node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "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.8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "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==", + "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": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" + "function-bind": "^1.1.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 0.4" } }, - "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==", + "node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", "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" + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" }, "engines": { - "node": ">= 0.4" + "node": ">= 0.6" } }, - "node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" - }, - "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==", + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 14" } }, - "node_modules/sift": { - "version": "17.1.3", - "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", - "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" - }, - "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/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dev": true, + "node_modules/http-proxy-agent/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==", "dependencies": { - "semver": "^7.5.3" + "debug": "^4.3.4" }, "engines": { - "node": ">=10" + "node": ">= 14" } }, - "node_modules/source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { - "amdefine": ">=0.0.4" + "ms": "2.1.2" }, "engines": { - "node": ">=0.8.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "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==", + "node_modules/http-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/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": { - "memory-pager": "^1.0.2" + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/statuses": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", - "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, "engines": { - "node": ">= 0.6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "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==", + "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/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dependencies": { - "safe-buffer": "~5.2.0" + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/string_decoder/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==", + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", "funding": [ { "type": "github", @@ -2141,271 +2694,2979 @@ } ] }, - "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==", + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/image-q": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", + "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" + "@types/node": "16.9.1" } }, - "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==", + "node_modules/image-q/node_modules/@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dependencies": { - "ansi-regex": "^5.0.1" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "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, + "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==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" + "once": "^1.3.0", + "wrappy": "1" } }, - "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==", + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "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==", "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" + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" }, "engines": { - "node": ">=10" + "node": ">= 12" } }, - "node_modules/tar/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" - }, + "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": ">=10" + "node": ">= 0.10" } }, - "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==", + "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==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, "dependencies": { - "is-number": "^7.0.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=8.0" + "node": ">=8" } }, - "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==", + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, "engines": { - "node": ">=0.6" + "node": ">=0.10.0" } }, - "node_modules/touch": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", - "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "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-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-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/isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "dependencies": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, + "node_modules/jade": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/jade/-/jade-1.9.2.tgz", + "integrity": "sha512-MhDlh3ZW0a06RiI2T/sDEYPUXTnfOkSIECRsPLiZtebz+Fi2ZaB0IVdJxSGDt6lWg4jHMEiHuq/0cPpppt1kqQ==", + "deprecated": "Jade has been renamed to pug, please install the latest version of pug instead of jade", + "dependencies": { + "character-parser": "1.2.1", + "commander": "~2.6.0", + "constantinople": "~3.0.1", + "mkdirp": "~0.5.0", + "transformers": "2.1.0", + "void-elements": "~2.0.1", + "with": "~4.0.0" + }, "bin": { - "nodetouch": "bin/nodetouch.js" + "jade": "bin/jade.js" } }, - "node_modules/tr46": { + "node_modules/jimp": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.22.12.tgz", + "integrity": "sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg==", + "dependencies": { + "@jimp/custom": "^0.22.12", + "@jimp/plugins": "^0.22.12", + "@jimp/types": "^0.22.12", + "regenerator-runtime": "^0.13.3" + } + }, + "node_modules/jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" + }, + "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==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dependencies": { + "argparse": "^2.0.1" + }, + "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==" + }, + "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==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", + "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/kareem": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", + "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==", + "engines": { + "node": ">=12.0.0" + } + }, + "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==" + }, + "node_modules/load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "dependencies": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "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==", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + }, + "node_modules/lodash.once": { "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "engines": { + "node": ">=12" + } + }, + "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": { - "punycode": "^2.3.0" + "semver": "^6.0.0" }, "engines": { - "node": ">=14" + "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/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": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.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/min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "dependencies": { + "dom-walk": "^0.1.0" + } + }, + "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/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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/mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, + "node_modules/mongodb": { + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", + "integrity": "sha512-ZF9Ugo2JCG/GfR7DEb4ypfyJJyiKbg5qBYKRintebj8+DNS33CyGMkWbrS9lara+u+h+yEOGSRiLhFO/g1s1aw==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.7.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/mongodb-connection-string-url": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.1.tgz", + "integrity": "sha512-XqMGwRX0Lgn05TDB4PyG2h2kKO/FfWJyCzYQbIhXUxz7ETt0I/FqHjUeqj37irJ+Dl1ZtU82uYyj14u2XsZKfg==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.4.3", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.4.3.tgz", + "integrity": "sha512-GxPVLD+I/dxVkgcts2r2QmJJvS62/++btVj3RFt8YnHt+DSOp1Qjj62YEvgZaElwIOTcc4KGJM95X5LlrU1qQg==", + "dependencies": { + "bson": "^6.7.0", + "kareem": "2.6.3", + "mongodb": "6.6.2", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "17.1.3" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/morgan": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz", + "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==", + "dependencies": { + "basic-auth": "~2.0.0", + "debug": "2.6.9", + "depd": "~1.1.2", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "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": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + }, + "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/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "engines": { + "node": ">= 0.4.0" + } + }, + "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-html-to-image": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/node-html-to-image/-/node-html-to-image-4.0.0.tgz", + "integrity": "sha512-lB8fkRleAKG4afJ2Wr7qJzIA5+//ue9OEoz+BMxQsowriGKR8sf4j4lK/pIXKakYwf/3aZHoDUNgOXuJ4HOzYA==", + "dependencies": { + "handlebars": "4.7.8", + "puppeteer": "21.0.1", + "puppeteer-cluster": "^0.23.0" + } + }, + "node_modules/nodemon": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", + "integrity": "sha512-m4Vqs+APdKzDFpuaL9F9EVOF85+h070FnkHVEoU4+rmT6Vw0bmNl7s61VEkY/cJkL7RCv1p4urnUDUMrS5rk2w==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/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/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/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "deprecated": "This package is no longer supported.", + "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/omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", + "dependencies": { + "wordwrap": "~0.0.2" + } + }, + "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==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/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==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-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/pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" + }, + "node_modules/parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" + }, + "node_modules/parse-bmfont-xml": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz", + "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==", + "dependencies": { + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.5.0" + } + }, + "node_modules/parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "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==", + "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==", + "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-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==", + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "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==" + }, + "node_modules/phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, + "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/pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", + "dependencies": { + "pngjs": "^3.0.0" + }, + "bin": { + "pixelmatch": "bin/pixelmatch" + } + }, + "node_modules/pixelmatch/node_modules/pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==", + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "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/proxy-agent": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/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==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/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/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "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/puppeteer": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.0.1.tgz", + "integrity": "sha512-KTjmSdPZ6bMkq3EbAzAUhcB3gMDXvdwd6912rxG9hNtjwRJzHSA568vh6vIbO2WQeNmozRdt1LtiUMLSWfeMrg==", + "deprecated": "< 22.6.4 is no longer supported", + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "1.5.0", + "cosmiconfig": "8.2.0", + "puppeteer-core": "21.0.1" + }, + "engines": { + "node": ">=16.3.0" + } + }, + "node_modules/puppeteer-cluster": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/puppeteer-cluster/-/puppeteer-cluster-0.23.0.tgz", + "integrity": "sha512-108terIWDzPrQopmoYSPd5yDoy3FGJ2dNnoGMkGYPs6xtkdhgaECwpfZkzaRToMQPZibUOz0/dSSGgPEdXEhkQ==", + "dependencies": { + "debug": "^4.3.3" + }, + "peerDependencies": { + "puppeteer": ">=1.5.0" + } + }, + "node_modules/puppeteer-cluster/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/puppeteer-cluster/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/puppeteer-core": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.0.1.tgz", + "integrity": "sha512-E8eWLGhaZZpa7dYe/58qGX7SLb4mTg42NP5M7B+ibPrncgNjTOQa9x1sFIlTn1chF/BmoZqOcMIvwuxcb/9XzQ==", + "dependencies": { + "@puppeteer/browsers": "1.5.0", + "chromium-bidi": "0.4.20", + "cross-fetch": "4.0.0", + "debug": "4.3.4", + "devtools-protocol": "0.0.1147663", + "ws": "8.13.0" + }, + "engines": { + "node": ">=16.3.0" + } + }, + "node_modules/puppeteer-core/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/puppeteer-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==" + }, + "node_modules/qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "dependencies": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "bin": { + "qrcode": "bin/qrcode" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/qrcode/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/qrcode/node_modules/cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/qrcode/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/qrcode/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/qrcode/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/qrcode/node_modules/yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/qrcode/node_modules/yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "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==" + }, + "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/raw-body/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/raw-body/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/raw-body/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/raw-body/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/raw-body/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/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/readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "dependencies": { + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + }, + "node_modules/semver": { + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/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/send/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/send/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/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/send/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/send/node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/send/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/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.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" + }, + "node_modules/sharp": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", + "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", + "hasInstallScript": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.0" + }, + "engines": { + "libvips": ">=8.15.2", + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.4", + "@img/sharp-darwin-x64": "0.33.4", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.4", + "@img/sharp-linux-arm64": "0.33.4", + "@img/sharp-linux-s390x": "0.33.4", + "@img/sharp-linux-x64": "0.33.4", + "@img/sharp-linuxmusl-arm64": "0.33.4", + "@img/sharp-linuxmusl-x64": "0.33.4", + "@img/sharp-wasm32": "0.33.4", + "@img/sharp-win32-ia32": "0.33.4", + "@img/sharp-win32-x64": "0.33.4" + } + }, + "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": "17.1.3", + "resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz", + "integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==" + }, + "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/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "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==", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/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==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-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/source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha512-VtCvB9SIQhk3aF6h+N85EaqIaBFIAfZ9Cu+NJHHVvc8BbEcnvDcFw6sqQ2dQrT6SlOrZq3tIvyD9+EGq/lJryQ==", + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.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.1.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", + "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" + }, + "node_modules/statuses": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", + "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamx": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "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_decoder/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/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/strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "dependencies": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "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==", + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/tar/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/text-decoder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", + "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", + "dependencies": { + "b4a": "^1.6.4" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "node_modules/tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, + "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/token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "dependencies": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/touch": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", + "integrity": "sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==", + "dev": true, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "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/transformers": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", + "integrity": "sha512-zJf5m2EIOngmBbDe2fhTPpCjzM2qkZVqrFJZc2jaln+KBeEaYKhS2QMOIkfVrNUyoOwqgbTwOHATzr3jZRQDyg==", + "deprecated": "Deprecated, use jstransformer", + "dependencies": { + "css": "~1.0.8", + "promise": "~2.0", + "uglify-js": "~2.2.5" + } + }, + "node_modules/transformers/node_modules/is-promise": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", + "integrity": "sha512-mjWH5XxnhMA8cFnDchr6qRP9S/kLntKuEfIYku+PaN1CnS8v+OG9O/BKpRCVRJvpIkgAZm0Pf5Is3iSSOILlcg==" + }, + "node_modules/transformers/node_modules/promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", + "integrity": "sha512-OgMc+sxI3zWF8D5BJGtA0z7/IsrDy1/0cPaDv6HPpqa2fSTo7AdON5U10NbZCUeF+zCAj3PtfPE50Hf02386aA==", + "dependencies": { + "is-promise": "~1" + } + }, + "node_modules/tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, + "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/uglify-js": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", + "integrity": "sha512-viLk+/8G0zm2aKt1JJAVcz5J/5ytdiNaIsKgrre3yvSUjwVG6ZUujGH7E2TiPigZUwLYCe7eaIUEP2Zka2VJPA==", + "dependencies": { + "optimist": "~0.3.5", + "source-map": "~0.1.7" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "dependencies": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/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==", + "optional": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "engines": { + "node": ">= 10.0.0" + } + }, + "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/utif2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz", + "integrity": "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==", + "dependencies": { + "pako": "^1.0.11" + } + }, + "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": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "engines": { + "node": ">=0.10.0" + } + }, + "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-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, + "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/which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, + "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/with": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", + "integrity": "sha512-mJZFpyEc1JTAdxhi/vhVeAM2S7vsltEKDiexDDo1HuAzlYKhcVUU6cwY8cHrFYdt82ZNkfKCeyhA3IYFegI0Kg==", + "dependencies": { + "acorn": "^1.0.1", + "acorn-globals": "^1.0.3" + } + }, + "node_modules/with/node_modules/acorn": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", + "integrity": "sha512-FsqWmApWGMGLKKNpHt12PMc5AK7BaZee0WRh04fCysmTzHe+rrKOa2MKjORhnzfpe4r0JnfdqHn02iDA9Dqj2A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/wordwrap": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", + "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/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/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "dependencies": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" + }, + "node_modules/xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "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==", + "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==", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + } + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==" + }, + "@babel/highlight": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "requires": { + "@babel/helper-validator-identifier": "^7.24.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + } + }, + "@emnapi/runtime": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.2.0.tgz", + "integrity": "sha512-bV21/9LQmcQeCPEg3BDFtvwL6cwiTMksYNWQQ4KOxCZikEGalWtenoZ0wCiukJINlGCIi2KXx01g4FoH/LxpzQ==", + "optional": true, + "requires": { + "tslib": "^2.4.0" + } + }, + "@img/sharp-darwin-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.4.tgz", + "integrity": "sha512-p0suNqXufJs9t3RqLBO6vvrgr5OhgbWp76s5gTRvdmxmuv9E1rcaqGUsl3l4mKVmXPkTkTErXediAui4x+8PSA==", + "optional": true, + "requires": { + "@img/sharp-libvips-darwin-arm64": "1.0.2" + } + }, + "@img/sharp-darwin-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.4.tgz", + "integrity": "sha512-0l7yRObwtTi82Z6ebVI2PnHT8EB2NxBgpK2MiKJZJ7cz32R4lxd001ecMhzzsZig3Yv9oclvqqdV93jo9hy+Dw==", + "optional": true, + "requires": { + "@img/sharp-libvips-darwin-x64": "1.0.2" + } + }, + "@img/sharp-libvips-darwin-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.2.tgz", + "integrity": "sha512-tcK/41Rq8IKlSaKRCCAuuY3lDJjQnYIW1UXU1kxcEKrfL8WR7N6+rzNoOxoQRJWTAECuKwgAHnPvqXGN8XfkHA==", + "optional": true + }, + "@img/sharp-libvips-darwin-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.2.tgz", + "integrity": "sha512-Ofw+7oaWa0HiiMiKWqqaZbaYV3/UGL2wAPeLuJTx+9cXpCRdvQhCLG0IH8YGwM0yGWGLpsF4Su9vM1o6aer+Fw==", + "optional": true + }, + "@img/sharp-libvips-linux-arm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.2.tgz", + "integrity": "sha512-iLWCvrKgeFoglQxdEwzu1eQV04o8YeYGFXtfWU26Zr2wWT3q3MTzC+QTCO3ZQfWd3doKHT4Pm2kRmLbupT+sZw==", + "optional": true + }, + "@img/sharp-libvips-linux-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.2.tgz", + "integrity": "sha512-x7kCt3N00ofFmmkkdshwj3vGPCnmiDh7Gwnd4nUwZln2YjqPxV1NlTyZOvoDWdKQVDL911487HOueBvrpflagw==", + "optional": true + }, + "@img/sharp-libvips-linux-s390x": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.2.tgz", + "integrity": "sha512-cmhQ1J4qVhfmS6szYW7RT+gLJq9dH2i4maq+qyXayUSn9/3iY2ZeWpbAgSpSVbV2E1JUL2Gg7pwnYQ1h8rQIog==", + "optional": true + }, + "@img/sharp-libvips-linux-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.2.tgz", + "integrity": "sha512-E441q4Qdb+7yuyiADVi5J+44x8ctlrqn8XgkDTwr4qPJzWkaHwD489iZ4nGDgcuya4iMN3ULV6NwbhRZJ9Z7SQ==", + "optional": true + }, + "@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.2.tgz", + "integrity": "sha512-3CAkndNpYUrlDqkCM5qhksfE+qSIREVpyoeHIU6jd48SJZViAmznoQQLAv4hVXF7xyUB9zf+G++e2v1ABjCbEQ==", + "optional": true + }, + "@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.2.tgz", + "integrity": "sha512-VI94Q6khIHqHWNOh6LLdm9s2Ry4zdjWJwH56WoiJU7NTeDwyApdZZ8c+SADC8OH98KWNQXnE01UdJ9CSfZvwZw==", + "optional": true + }, + "@img/sharp-linux-arm": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.4.tgz", + "integrity": "sha512-RUgBD1c0+gCYZGCCe6mMdTiOFS0Zc/XrN0fYd6hISIKcDUbAW5NtSQW9g/powkrXYm6Vzwd6y+fqmExDuCdHNQ==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-arm": "1.0.2" + } + }, + "@img/sharp-linux-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.4.tgz", + "integrity": "sha512-2800clwVg1ZQtxwSoTlHvtm9ObgAax7V6MTAB/hDT945Tfyy3hVkmiHpeLPCKYqYR1Gcmv1uDZ3a4OFwkdBL7Q==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-arm64": "1.0.2" + } + }, + "@img/sharp-linux-s390x": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.4.tgz", + "integrity": "sha512-h3RAL3siQoyzSoH36tUeS0PDmb5wINKGYzcLB5C6DIiAn2F3udeFAum+gj8IbA/82+8RGCTn7XW8WTFnqag4tQ==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-s390x": "1.0.2" + } + }, + "@img/sharp-linux-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.4.tgz", + "integrity": "sha512-GoR++s0XW9DGVi8SUGQ/U4AeIzLdNjHka6jidVwapQ/JebGVQIpi52OdyxCNVRE++n1FCLzjDovJNozif7w/Aw==", + "optional": true, + "requires": { + "@img/sharp-libvips-linux-x64": "1.0.2" + } + }, + "@img/sharp-linuxmusl-arm64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.4.tgz", + "integrity": "sha512-nhr1yC3BlVrKDTl6cO12gTpXMl4ITBUZieehFvMntlCXFzH2bvKG76tBL2Y/OqhupZt81pR7R+Q5YhJxW0rGgQ==", + "optional": true, + "requires": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2" + } + }, + "@img/sharp-linuxmusl-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.4.tgz", + "integrity": "sha512-uCPTku0zwqDmZEOi4ILyGdmW76tH7dm8kKlOIV1XC5cLyJ71ENAAqarOHQh0RLfpIpbV5KOpXzdU6XkJtS0daw==", + "optional": true, + "requires": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.2" + } + }, + "@img/sharp-wasm32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.4.tgz", + "integrity": "sha512-Bmmauh4sXUsUqkleQahpdNXKvo+wa1V9KhT2pDA4VJGKwnKMJXiSTGphn0gnJrlooda0QxCtXc6RX1XAU6hMnQ==", + "optional": true, + "requires": { + "@emnapi/runtime": "^1.1.1" + } + }, + "@img/sharp-win32-ia32": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.4.tgz", + "integrity": "sha512-99SJ91XzUhYHbx7uhK3+9Lf7+LjwMGQZMDlO/E/YVJ7Nc3lyDFZPGhjwiYdctoH2BOzW9+TnfqcaMKt0jHLdqw==", + "optional": true + }, + "@img/sharp-win32-x64": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.4.tgz", + "integrity": "sha512-3QLocdTRVIrFNye5YocZl+KKpYKP+fksi1QhmOArgx7GyhIbQp/WrJRu176jm8IxromS7RIkzMiMINVdBtC8Aw==", + "optional": true + }, + "@jimp/bmp": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/bmp/-/bmp-0.22.12.tgz", + "integrity": "sha512-aeI64HD0npropd+AR76MCcvvRaa+Qck6loCOS03CkkxGHN5/r336qTM5HPUdHKMDOGzqknuVPA8+kK1t03z12g==", + "requires": { + "@jimp/utils": "^0.22.12", + "bmp-js": "^0.1.0" + } + }, + "@jimp/core": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/core/-/core-0.22.12.tgz", + "integrity": "sha512-l0RR0dOPyzMKfjUW1uebzueFEDtCOj9fN6pyTYWWOM/VS4BciXQ1VVrJs8pO3kycGYZxncRKhCoygbNr8eEZQA==", + "requires": { + "@jimp/utils": "^0.22.12", + "any-base": "^1.1.0", + "buffer": "^5.2.0", + "exif-parser": "^0.1.12", + "file-type": "^16.5.4", + "isomorphic-fetch": "^3.0.0", + "pixelmatch": "^4.0.2", + "tinycolor2": "^1.6.0" + } + }, + "@jimp/custom": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/custom/-/custom-0.22.12.tgz", + "integrity": "sha512-xcmww1O/JFP2MrlGUMd3Q78S3Qu6W3mYTXYuIqFq33EorgYHV/HqymHfXy9GjiCJ7OI+7lWx6nYFOzU7M4rd1Q==", + "requires": { + "@jimp/core": "^0.22.12" + } + }, + "@jimp/gif": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/gif/-/gif-0.22.12.tgz", + "integrity": "sha512-y6BFTJgch9mbor2H234VSjd9iwAhaNf/t3US5qpYIs0TSbAvM02Fbc28IaDETj9+4YB4676sz4RcN/zwhfu1pg==", + "requires": { + "@jimp/utils": "^0.22.12", + "gifwrap": "^0.10.1", + "omggif": "^1.0.9" + } + }, + "@jimp/jpeg": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/jpeg/-/jpeg-0.22.12.tgz", + "integrity": "sha512-Rq26XC/uQWaQKyb/5lksCTCxXhtY01NJeBN+dQv5yNYedN0i7iYu+fXEoRsfaJ8xZzjoANH8sns7rVP4GE7d/Q==", + "requires": { + "@jimp/utils": "^0.22.12", + "jpeg-js": "^0.4.4" + } + }, + "@jimp/plugin-blit": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blit/-/plugin-blit-0.22.12.tgz", + "integrity": "sha512-xslz2ZoFZOPLY8EZ4dC29m168BtDx95D6K80TzgUi8gqT7LY6CsajWO0FAxDwHz6h0eomHMfyGX0stspBrTKnQ==", + "requires": { + "@jimp/utils": "^0.22.12" + } + }, + "@jimp/plugin-blur": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-blur/-/plugin-blur-0.22.12.tgz", + "integrity": "sha512-S0vJADTuh1Q9F+cXAwFPlrKWzDj2F9t/9JAbUvaaDuivpyWuImEKXVz5PUZw2NbpuSHjwssbTpOZ8F13iJX4uw==", + "requires": { + "@jimp/utils": "^0.22.12" + } + }, + "@jimp/plugin-circle": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-circle/-/plugin-circle-0.22.12.tgz", + "integrity": "sha512-SWVXx1yiuj5jZtMijqUfvVOJBwOifFn0918ou4ftoHgegc5aHWW5dZbYPjvC9fLpvz7oSlptNl2Sxr1zwofjTg==", + "requires": { + "@jimp/utils": "^0.22.12" + } + }, + "@jimp/plugin-color": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-color/-/plugin-color-0.22.12.tgz", + "integrity": "sha512-xImhTE5BpS8xa+mAN6j4sMRWaUgUDLoaGHhJhpC+r7SKKErYDR0WQV4yCE4gP+N0gozD0F3Ka1LUSaMXrn7ZIA==", + "requires": { + "@jimp/utils": "^0.22.12", + "tinycolor2": "^1.6.0" + } + }, + "@jimp/plugin-contain": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-contain/-/plugin-contain-0.22.12.tgz", + "integrity": "sha512-Eo3DmfixJw3N79lWk8q/0SDYbqmKt1xSTJ69yy8XLYQj9svoBbyRpSnHR+n9hOw5pKXytHwUW6nU4u1wegHNoQ==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "node_modules/transformers": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", - "integrity": "sha512-zJf5m2EIOngmBbDe2fhTPpCjzM2qkZVqrFJZc2jaln+KBeEaYKhS2QMOIkfVrNUyoOwqgbTwOHATzr3jZRQDyg==", - "deprecated": "Deprecated, use jstransformer", - "dependencies": { - "css": "~1.0.8", - "promise": "~2.0", - "uglify-js": "~2.2.5" + "@jimp/plugin-cover": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-cover/-/plugin-cover-0.22.12.tgz", + "integrity": "sha512-z0w/1xH/v/knZkpTNx+E8a7fnasQ2wHG5ze6y5oL2dhH1UufNua8gLQXlv8/W56+4nJ1brhSd233HBJCo01BXA==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "node_modules/transformers/node_modules/is-promise": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", - "integrity": "sha512-mjWH5XxnhMA8cFnDchr6qRP9S/kLntKuEfIYku+PaN1CnS8v+OG9O/BKpRCVRJvpIkgAZm0Pf5Is3iSSOILlcg==" + "@jimp/plugin-crop": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-crop/-/plugin-crop-0.22.12.tgz", + "integrity": "sha512-FNuUN0OVzRCozx8XSgP9MyLGMxNHHJMFt+LJuFjn1mu3k0VQxrzqbN06yIl46TVejhyAhcq5gLzqmSCHvlcBVw==", + "requires": { + "@jimp/utils": "^0.22.12" + } }, - "node_modules/transformers/node_modules/promise": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", - "integrity": "sha512-OgMc+sxI3zWF8D5BJGtA0z7/IsrDy1/0cPaDv6HPpqa2fSTo7AdON5U10NbZCUeF+zCAj3PtfPE50Hf02386aA==", - "dependencies": { - "is-promise": "~1" + "@jimp/plugin-displace": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-displace/-/plugin-displace-0.22.12.tgz", + "integrity": "sha512-qpRM8JRicxfK6aPPqKZA6+GzBwUIitiHaZw0QrJ64Ygd3+AsTc7BXr+37k2x7QcyCvmKXY4haUrSIsBug4S3CA==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "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" + "@jimp/plugin-dither": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-dither/-/plugin-dither-0.22.12.tgz", + "integrity": "sha512-jYgGdSdSKl1UUEanX8A85v4+QUm+PE8vHFwlamaKk89s+PXQe7eVE3eNeSZX4inCq63EHL7cX580dMqkoC3ZLw==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "node_modules/uglify-js": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", - "integrity": "sha512-viLk+/8G0zm2aKt1JJAVcz5J/5ytdiNaIsKgrre3yvSUjwVG6ZUujGH7E2TiPigZUwLYCe7eaIUEP2Zka2VJPA==", - "dependencies": { - "optimist": "~0.3.5", - "source-map": "~0.1.7" - }, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, - "engines": { - "node": ">=0.4.0" + "@jimp/plugin-fisheye": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-fisheye/-/plugin-fisheye-0.22.12.tgz", + "integrity": "sha512-LGuUTsFg+fOp6KBKrmLkX4LfyCy8IIsROwoUvsUPKzutSqMJnsm3JGDW2eOmWIS/jJpPaeaishjlxvczjgII+Q==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true + "@jimp/plugin-flip": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-flip/-/plugin-flip-0.22.12.tgz", + "integrity": "sha512-m251Rop7GN8W0Yo/rF9LWk6kNclngyjIJs/VXHToGQ6EGveOSTSQaX2Isi9f9lCDLxt+inBIb7nlaLLxnvHX8Q==", + "requires": { + "@jimp/utils": "^0.22.12" + } }, - "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" + "@jimp/plugin-gaussian": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-gaussian/-/plugin-gaussian-0.22.12.tgz", + "integrity": "sha512-sBfbzoOmJ6FczfG2PquiK84NtVGeScw97JsCC3rpQv1PHVWyW+uqWFF53+n3c8Y0P2HWlUjflEla2h/vWShvhg==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "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==" + "@jimp/plugin-invert": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-invert/-/plugin-invert-0.22.12.tgz", + "integrity": "sha512-N+6rwxdB+7OCR6PYijaA/iizXXodpxOGvT/smd/lxeXsZ/empHmFFFJ/FaXcYh19Tm04dGDaXcNF/dN5nm6+xQ==", + "requires": { + "@jimp/utils": "^0.22.12" + } }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", - "engines": { - "node": ">= 0.4.0" + "@jimp/plugin-mask": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-mask/-/plugin-mask-0.22.12.tgz", + "integrity": "sha512-4AWZg+DomtpUA099jRV8IEZUfn1wLv6+nem4NRJC7L/82vxzLCgXKTxvNvBcNmJjT9yS1LAAmiJGdWKXG63/NA==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "engines": { - "node": ">= 0.8" + "@jimp/plugin-normalize": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-normalize/-/plugin-normalize-0.22.12.tgz", + "integrity": "sha512-0So0rexQivnWgnhacX4cfkM2223YdExnJTTy6d06WbkfZk5alHUx8MM3yEzwoCN0ErO7oyqEWRnEkGC+As1FtA==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "engines": { - "node": ">=0.10.0" + "@jimp/plugin-print": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-print/-/plugin-print-0.22.12.tgz", + "integrity": "sha512-c7TnhHlxm87DJeSnwr/XOLjJU/whoiKYY7r21SbuJ5nuH+7a78EW1teOaj5gEr2wYEd7QtkFqGlmyGXY/YclyQ==", + "requires": { + "@jimp/utils": "^0.22.12", + "load-bmfont": "^1.4.1" } }, - "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" + "@jimp/plugin-resize": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-resize/-/plugin-resize-0.22.12.tgz", + "integrity": "sha512-3NyTPlPbTnGKDIbaBgQ3HbE6wXbAlFfxHVERmrbqAi8R3r6fQPxpCauA8UVDnieg5eo04D0T8nnnNIX//i/sXg==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "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" + "@jimp/plugin-rotate": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-rotate/-/plugin-rotate-0.22.12.tgz", + "integrity": "sha512-9YNEt7BPAFfTls2FGfKBVgwwLUuKqy+E8bDGGEsOqHtbuhbshVGxN2WMZaD4gh5IDWvR+emmmPPWGgaYNYt1gA==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "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" + "@jimp/plugin-scale": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-scale/-/plugin-scale-0.22.12.tgz", + "integrity": "sha512-dghs92qM6MhHj0HrV2qAwKPMklQtjNpoYgAB94ysYpsXslhRTiPisueSIELRwZGEr0J0VUxpUY7HgJwlSIgGZw==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "node_modules/with": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", - "integrity": "sha512-mJZFpyEc1JTAdxhi/vhVeAM2S7vsltEKDiexDDo1HuAzlYKhcVUU6cwY8cHrFYdt82ZNkfKCeyhA3IYFegI0Kg==", - "dependencies": { - "acorn": "^1.0.1", - "acorn-globals": "^1.0.3" + "@jimp/plugin-shadow": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-shadow/-/plugin-shadow-0.22.12.tgz", + "integrity": "sha512-FX8mTJuCt7/3zXVoeD/qHlm4YH2bVqBuWQHXSuBK054e7wFRnRnbSLPUqAwSeYP3lWqpuQzJtgiiBxV3+WWwTg==", + "requires": { + "@jimp/utils": "^0.22.12" } }, - "node_modules/with/node_modules/acorn": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", - "integrity": "sha512-FsqWmApWGMGLKKNpHt12PMc5AK7BaZee0WRh04fCysmTzHe+rrKOa2MKjORhnzfpe4r0JnfdqHn02iDA9Dqj2A==", - "bin": { - "acorn": "bin/acorn" + "@jimp/plugin-threshold": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugin-threshold/-/plugin-threshold-0.22.12.tgz", + "integrity": "sha512-4x5GrQr1a/9L0paBC/MZZJjjgjxLYrqSmWd+e+QfAEPvmRxdRoQ5uKEuNgXnm9/weHQBTnQBQsOY2iFja+XGAw==", + "requires": { + "@jimp/utils": "^0.22.12" + } + }, + "@jimp/plugins": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/plugins/-/plugins-0.22.12.tgz", + "integrity": "sha512-yBJ8vQrDkBbTgQZLty9k4+KtUQdRjsIDJSPjuI21YdVeqZxYywifHl4/XWILoTZsjTUASQcGoH0TuC0N7xm3ww==", + "requires": { + "@jimp/plugin-blit": "^0.22.12", + "@jimp/plugin-blur": "^0.22.12", + "@jimp/plugin-circle": "^0.22.12", + "@jimp/plugin-color": "^0.22.12", + "@jimp/plugin-contain": "^0.22.12", + "@jimp/plugin-cover": "^0.22.12", + "@jimp/plugin-crop": "^0.22.12", + "@jimp/plugin-displace": "^0.22.12", + "@jimp/plugin-dither": "^0.22.12", + "@jimp/plugin-fisheye": "^0.22.12", + "@jimp/plugin-flip": "^0.22.12", + "@jimp/plugin-gaussian": "^0.22.12", + "@jimp/plugin-invert": "^0.22.12", + "@jimp/plugin-mask": "^0.22.12", + "@jimp/plugin-normalize": "^0.22.12", + "@jimp/plugin-print": "^0.22.12", + "@jimp/plugin-resize": "^0.22.12", + "@jimp/plugin-rotate": "^0.22.12", + "@jimp/plugin-scale": "^0.22.12", + "@jimp/plugin-shadow": "^0.22.12", + "@jimp/plugin-threshold": "^0.22.12", + "timm": "^1.6.1" + } + }, + "@jimp/png": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/png/-/png-0.22.12.tgz", + "integrity": "sha512-Mrp6dr3UTn+aLK8ty/dSKELz+Otdz1v4aAXzV5q53UDD2rbB5joKVJ/ChY310B+eRzNxIovbUF1KVrUsYdE8Hg==", + "requires": { + "@jimp/utils": "^0.22.12", + "pngjs": "^6.0.0" }, - "engines": { - "node": ">=0.4.0" + "dependencies": { + "pngjs": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-6.0.0.tgz", + "integrity": "sha512-TRzzuFRRmEoSW/p1KVAmiOgPco2Irlah+bGFCeNfJXxxYGwSw7YwAOAcd7X28K/m5bjBWKsC29KyoMfHbypayg==" + } } }, - "node_modules/wordwrap": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", - "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==", - "engines": { - "node": ">=0.4.0" + "@jimp/tiff": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/tiff/-/tiff-0.22.12.tgz", + "integrity": "sha512-E1LtMh4RyJsoCAfAkBRVSYyZDTtLq9p9LUiiYP0vPtXyxX4BiYBUYihTLSBlCQg5nF2e4OpQg7SPrLdJ66u7jg==", + "requires": { + "utif2": "^4.0.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==" + "@jimp/types": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/types/-/types-0.22.12.tgz", + "integrity": "sha512-wwKYzRdElE1MBXFREvCto5s699izFHNVvALUv79GXNbsOVqlwlOxlWJ8DuyOGIXoLP4JW/m30YyuTtfUJgMRMA==", + "requires": { + "@jimp/bmp": "^0.22.12", + "@jimp/gif": "^0.22.12", + "@jimp/jpeg": "^0.22.12", + "@jimp/png": "^0.22.12", + "@jimp/tiff": "^0.22.12", + "timm": "^1.6.1" + } + }, + "@jimp/utils": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/@jimp/utils/-/utils-0.22.12.tgz", + "integrity": "sha512-yJ5cWUknGnilBq97ZXOyOS0HhsHOyAyjHwYfHxGbSyMTohgQI6sVyE8KPgDwH8HHW/nMKXk8TrSwAE71zt716Q==", + "requires": { + "regenerator-runtime": "^0.13.3" + } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - }, - "dependencies": { "@mapbox/node-pre-gyp": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", @@ -2430,6 +5691,54 @@ "sparse-bitfield": "^3.0.3" } }, + "@puppeteer/browsers": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.5.0.tgz", + "integrity": "sha512-za318PweGINh5LnHSph7C4xhs0tmRjCD8EPpzcKlw4nzSPhnULj+LTG3+TGefZvW1ti5gjw2JkdQvQsivBeZlg==", + "requires": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "progress": "2.0.3", + "proxy-agent": "6.3.0", + "tar-fs": "3.0.4", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==" + }, + "@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@tootallnate/quickjs-emscripten/-/quickjs-emscripten-0.23.0.tgz", + "integrity": "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==" + }, + "@types/node": { + "version": "20.14.9", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz", + "integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==", + "optional": true, + "requires": { + "undici-types": "~5.26.4" + } + }, "@types/webidl-conversions": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", @@ -2443,6 +5752,15 @@ "@types/webidl-conversions": "*" } }, + "@types/yauzl": { + "version": "2.10.3", + "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", + "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", + "optional": true, + "requires": { + "@types/node": "*" + } + }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", @@ -2503,6 +5821,19 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "any-base": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/any-base/-/any-base-1.1.0.tgz", + "integrity": "sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==" + }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -2527,16 +5858,45 @@ "readable-stream": "^3.6.0" } }, + "argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" + }, "array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" }, + "ast-types": { + "version": "0.13.4", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.13.4.tgz", + "integrity": "sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==", + "requires": { + "tslib": "^2.0.1" + } + }, + "b4a": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.6.tgz", + "integrity": "sha512-5Tk1HLk6b6ctmjIkAcU/Ujv/1WqiDl0F0JdRCR80VsOcUlHcu7pWeWRlOqQLHfDEsVx9YH/aif5AG4ehoCtTmg==" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, + "bare-events": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.4.2.tgz", + "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", + "optional": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, "basic-auth": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", @@ -2545,6 +5905,11 @@ "safe-buffer": "5.1.2" } }, + "basic-ftp": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/basic-ftp/-/basic-ftp-5.0.5.tgz", + "integrity": "sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==" + }, "bcrypt": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", @@ -2560,6 +5925,11 @@ "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", "dev": true }, + "bmp-js": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/bmp-js/-/bmp-js-0.1.0.tgz", + "integrity": "sha512-vHdS19CnY3hwiNdkaqk93DvjVLfbEcI8mys4UjuWrlX1haDmroo8o4xCzh4wD6DGV6HxRCyauwhHRqMTfERtjw==" + }, "body-parser": { "version": "1.20.2", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", @@ -2644,6 +6014,25 @@ "resolved": "https://registry.npmjs.org/bson/-/bson-6.7.0.tgz", "integrity": "sha512-w2IquM5mYzYZv6rs3uN2DZTOBe2a0zXLj53TGDqwF4l6Sz/XsISrisXOJihArF9+BZ6Cq/GjVht7Sjfmri7ytQ==" }, + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==" + }, + "buffer-equal": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-0.0.1.tgz", + "integrity": "sha512-RgSV6InVQ9ODPdLWJ5UAqBqJBOg370Nz6ZQtRzpt6nUjc8v0St97uJ4PYC6NztqIScrAXafKM3mZPMygSe1ggA==" + }, "buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", @@ -2666,6 +6055,26 @@ "set-function-length": "^1.2.1" } }, + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, "character-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", @@ -2692,6 +6101,70 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, + "chromium-bidi": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.20.tgz", + "integrity": "sha512-ruHgVZFEv00mAQMz1tQjfjdG63jiPWrQPF6HLlX2ucqLqVTJoWngeBEKHaJ6n1swV/HSvgnBNbtTRIlcVyW3Fw==", + "requires": { + "mitt": "3.0.1" + } + }, + "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==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + } + }, + "color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, + "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==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, "color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -2768,6 +6241,25 @@ "vary": "^1" } }, + "cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, + "cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "requires": { + "node-fetch": "^2.6.12" + } + }, "css": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", @@ -2787,6 +6279,11 @@ "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", "integrity": "sha512-aIThpcErhG5EyHorGqNlTh0TduNBqLrrXLO3x5rku3ZKBxuVfY+T7noyM2G2X/01iQANqJUb6d3+FLoa+N7Xwg==" }, + "data-uri-to-buffer": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-6.0.2.tgz", + "integrity": "sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==" + }, "debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -2795,14 +6292,29 @@ "ms": "2.0.0" } }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + }, "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==", "requires": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + } + }, + "degenerator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/degenerator/-/degenerator-5.0.1.tgz", + "integrity": "sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==", + "requires": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" } }, "delegates": { @@ -2825,6 +6337,21 @@ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==" }, + "devtools-protocol": { + "version": "0.0.1147663", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", + "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==" + }, + "dijkstrajs": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dijkstrajs/-/dijkstrajs-1.0.3.tgz", + "integrity": "sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==" + }, + "dom-walk": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", + "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, "dotenv": { "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", @@ -2848,11 +6375,32 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, + "encode-utf8": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", + "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==" + }, "encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==" }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "requires": { + "once": "^1.4.0" + } + }, + "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==", + "requires": { + "is-arrayish": "^0.2.1" + } + }, "es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -2866,16 +6414,65 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==" }, + "escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==" + }, "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==" }, + "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==" + }, + "escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==" + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" + }, "etag": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==" }, + "exif-parser": { + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/exif-parser/-/exif-parser-0.1.12.tgz", + "integrity": "sha512-c2bQfLNbMzLPmzQuOr8fy0csy84WmwnER81W88DzTp9CYNPJ6yzOj2EZAh9pywYpqHnshVLHQJ8WzldAyfY+Iw==" + }, "express": { "version": "4.19.2", "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", @@ -2966,6 +6563,55 @@ } } }, + "extract-zip": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", + "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", + "requires": { + "@types/yauzl": "^2.9.1", + "debug": "^4.1.1", + "get-stream": "^5.1.0", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "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==" + }, + "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==", + "requires": { + "pend": "~1.2.0" + } + }, + "file-type": { + "version": "16.5.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-16.5.4.tgz", + "integrity": "sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==", + "requires": { + "readable-web-to-node-stream": "^3.0.0", + "strtok3": "^6.2.4", + "token-types": "^4.1.1" + } + }, "fill-range": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", @@ -3004,6 +6650,15 @@ } } }, + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, "forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -3014,6 +6669,21 @@ "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==" }, + "fs": { + "version": "0.0.1-security", + "resolved": "https://registry.npmjs.org/fs/-/fs-0.0.1-security.tgz", + "integrity": "sha512-3XY9e1pP0CVEUCdj5BmfIZxRBTSDycnbqhIOGec9QYtmVH2fbLpj86CFWkrNOkt/Fvty4KZG5lTglL9j/gJ87w==" + }, + "fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -3065,6 +6735,11 @@ "wide-align": "^1.1.2" } }, + "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==" + }, "get-intrinsic": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", @@ -3077,6 +6752,49 @@ "hasown": "^2.0.0" } }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "requires": { + "pump": "^3.0.0" + } + }, + "get-uri": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/get-uri/-/get-uri-6.0.3.tgz", + "integrity": "sha512-BzUrJBS9EcUb4cFol8r4W3v1cPsSyajLSthNkz5BxbpDcHN5tIrM10E2eNvfnvBn3DaT3DUgx0OpsBKkaOpanw==", + "requires": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4", + "fs-extra": "^11.2.0" + }, + "dependencies": { + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "gifwrap": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/gifwrap/-/gifwrap-0.10.1.tgz", + "integrity": "sha512-2760b1vpJHNmLzZ/ubTtNnEx5WApN/PYWJvXvgS+tL1egTTthayFYIQQNi136FLEDcN/IyEY2EcGpIITD6eYUw==", + "requires": { + "image-q": "^4.0.0", + "omggif": "^1.0.10" + } + }, "glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -3099,6 +6817,15 @@ "is-glob": "^4.0.1" } }, + "global": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", + "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", + "requires": { + "min-document": "^2.19.0", + "process": "^0.11.10" + } + }, "gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -3107,11 +6834,45 @@ "get-intrinsic": "^1.1.3" } }, + "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==" + }, + "handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "uglify-js": { + "version": "3.18.0", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", + "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "optional": true + }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==" + } + } + }, "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 + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" }, "has-property-descriptors": { "version": "1.0.2", @@ -3155,6 +6916,38 @@ "statuses": ">= 1.4.0 < 2" } }, + "http-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", + "requires": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "https-proxy-agent": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", @@ -3187,12 +6980,41 @@ "safer-buffer": ">= 2.1.2 < 3" } }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, "ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, + "image-q": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/image-q/-/image-q-4.0.0.tgz", + "integrity": "sha512-PfJGVgIfKQJuq3s0tTDOKtztksibuUEbJQIYT3by6wctQo+Rdlh7ef4evJ5NCdxY4CfMbvFkocEwbl4BF8RlJw==", + "requires": { + "@types/node": "16.9.1" + }, + "dependencies": { + "@types/node": { + "version": "16.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.9.1.tgz", + "integrity": "sha512-QpLcX9ZSsq3YYUUnD3nFDY8H7wctAhQj/TFKL8Ya8v5fMm3CFXxo8zStsLAl780ltoYoo1WvKUVGBQK+1ifr7g==" + } + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -3207,11 +7029,25 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" }, + "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==", + "requires": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + } + }, "ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" + }, "is-binary-path": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", @@ -3232,6 +7068,11 @@ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, + "is-function": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", + "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, "is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", @@ -3247,6 +7088,15 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true }, + "isomorphic-fetch": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-3.0.0.tgz", + "integrity": "sha512-qvUtwJ3j6qwsF3jLxkZ72qCgjMysPzDfeV240JHiGZsANBYd+EEuu35v7dfrJ9Up0Ak07D7GGSkGhCHTqg/5wA==", + "requires": { + "node-fetch": "^2.6.1", + "whatwg-fetch": "^3.4.1" + } + }, "jade": { "version": "1.9.2", "resolved": "https://registry.npmjs.org/jade/-/jade-1.9.2.tgz", @@ -3261,6 +7111,54 @@ "with": "~4.0.0" } }, + "jimp": { + "version": "0.22.12", + "resolved": "https://registry.npmjs.org/jimp/-/jimp-0.22.12.tgz", + "integrity": "sha512-R5jZaYDnfkxKJy1dwLpj/7cvyjxiclxU3F4TrI/J4j2rS0niq6YDUMoPn5hs8GDpO+OZGo7Ky057CRtWesyhfg==", + "requires": { + "@jimp/custom": "^0.22.12", + "@jimp/plugins": "^0.22.12", + "@jimp/types": "^0.22.12", + "regenerator-runtime": "^0.13.3" + } + }, + "jpeg-js": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/jpeg-js/-/jpeg-js-0.4.4.tgz", + "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg==" + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "requires": { + "argparse": "^2.0.1" + } + }, + "jsbn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", + "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==" + }, + "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==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, "jsonwebtoken": { "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", @@ -3309,6 +7207,34 @@ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz", "integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==" }, + "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==" + }, + "load-bmfont": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/load-bmfont/-/load-bmfont-1.4.1.tgz", + "integrity": "sha512-8UyQoYmdRDy81Brz6aLAUhfZLwr5zV0L3taTQ4hju7m6biuwiWiJXjPhBJxbUQJA8PrkvJ/7Enqmwk2sM14soA==", + "requires": { + "buffer-equal": "0.0.1", + "mime": "^1.3.4", + "parse-bmfont-ascii": "^1.0.3", + "parse-bmfont-binary": "^1.0.5", + "parse-bmfont-xml": "^1.1.4", + "phin": "^2.9.1", + "xhr": "^2.0.1", + "xtend": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, "lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", @@ -3344,6 +7270,11 @@ "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" }, + "lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" + }, "make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -3397,6 +7328,14 @@ "mime-db": "1.52.0" } }, + "min-document": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", + "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", + "requires": { + "dom-walk": "^0.1.0" + } + }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -3434,6 +7373,11 @@ } } }, + "mitt": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mitt/-/mitt-3.0.1.tgz", + "integrity": "sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==" + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -3442,6 +7386,11 @@ "minimist": "^1.2.6" } }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" + }, "mongodb": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", @@ -3532,6 +7481,16 @@ "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" }, + "neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==" + }, "node-addon-api": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", @@ -3566,6 +7525,16 @@ } } }, + "node-html-to-image": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/node-html-to-image/-/node-html-to-image-4.0.0.tgz", + "integrity": "sha512-lB8fkRleAKG4afJ2Wr7qJzIA5+//ue9OEoz+BMxQsowriGKR8sf4j4lK/pIXKakYwf/3aZHoDUNgOXuJ4HOzYA==", + "requires": { + "handlebars": "4.7.8", + "puppeteer": "21.0.1", + "puppeteer-cluster": "^0.23.0" + } + }, "nodemon": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", @@ -3636,6 +7605,11 @@ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==" }, + "omggif": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/omggif/-/omggif-1.0.10.tgz", + "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw==" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -3644,25 +7618,150 @@ "ee-first": "1.1.1" } }, - "on-headers": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", - "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==" + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.3.7", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", + "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", + "requires": { + "wordwrap": "~0.0.2" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "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==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "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==" + }, + "pac-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/pac-proxy-agent/-/pac-proxy-agent-7.0.2.tgz", + "integrity": "sha512-BFi3vZnO9X5Qt6NRz7ZOaPja3ic0PhlsmCRYLOpN11+mWBCR6XJDqW5RF3j8jm4WGGQZtBA+bTfxYzeKW73eHg==", + "requires": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.5", + "pac-resolver": "^7.0.1", + "socks-proxy-agent": "^8.0.4" + }, + "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "pac-resolver": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/pac-resolver/-/pac-resolver-7.0.1.tgz", + "integrity": "sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==", + "requires": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + } + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "requires": { + "callsites": "^3.0.0" + } + }, + "parse-bmfont-ascii": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-ascii/-/parse-bmfont-ascii-1.0.6.tgz", + "integrity": "sha512-U4RrVsUFCleIOBsIGYOMKjn9PavsGOXxbvYGtMOEfnId0SVNsgehXh1DxUdVPLoxd5mvcEtvmKs2Mmf0Mpa1ZA==" + }, + "parse-bmfont-binary": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-binary/-/parse-bmfont-binary-1.0.6.tgz", + "integrity": "sha512-GxmsRea0wdGdYthjuUeWTMWPqm2+FAd4GI8vCvhgJsFnoGhTrLhXDDupwTo7rXVAgaLIGoVHDZS9p/5XbSqeWA==" }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "parse-bmfont-xml": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/parse-bmfont-xml/-/parse-bmfont-xml-1.1.6.tgz", + "integrity": "sha512-0cEliVMZEhrFDwMh4SxIyVJpqYoOWDJ9P895tFuS+XuNzI5UBmBk5U5O4KuJdTnZpSBI4LFA2+ZiJaiwfSwlMA==", "requires": { - "wrappy": "1" + "xml-parse-from-string": "^1.0.0", + "xml2js": "^0.5.0" } }, - "optimist": { - "version": "0.3.7", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", - "integrity": "sha512-TCx0dXQzVtSCg2OgY/bO9hjM9cV4XYx09TVK+s3+FhkjT6LovsLe+pPMzpWf+6yXK/hUizs2gUoTw3jHM0VaTQ==", + "parse-headers": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", + "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "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==", "requires": { - "wordwrap": "~0.0.2" + "@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" } }, "parseurl": { @@ -3670,6 +7769,11 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "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==" + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", @@ -3680,12 +7784,67 @@ "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==" + }, + "peek-readable": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/peek-readable/-/peek-readable-4.1.0.tgz", + "integrity": "sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==" + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + }, + "phin": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/phin/-/phin-2.9.3.tgz", + "integrity": "sha512-CzFr90qM24ju5f88quFC/6qohjC144rehe5n6DH900lgXmUe86+xCKc10ev56gRKC4/BkHUoG4uSiQgBiIXwDA==" + }, + "picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" + }, "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pixelmatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-4.0.2.tgz", + "integrity": "sha512-J8B6xqiO37sU/gkcMglv6h5Jbd9xNER7aHzpfRdNmV4IbQBzBpe4l9XmbG+xPF/znacgu2jfEw+wHffaq/YkXA==", + "requires": { + "pngjs": "^3.0.0" + }, + "dependencies": { + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==" + } + } + }, + "pngjs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz", + "integrity": "sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==" + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" + }, "proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -3695,17 +7854,225 @@ "ipaddr.js": "1.9.1" } }, + "proxy-agent": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", + "requires": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + }, + "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, + "puppeteer": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.0.1.tgz", + "integrity": "sha512-KTjmSdPZ6bMkq3EbAzAUhcB3gMDXvdwd6912rxG9hNtjwRJzHSA568vh6vIbO2WQeNmozRdt1LtiUMLSWfeMrg==", + "requires": { + "@puppeteer/browsers": "1.5.0", + "cosmiconfig": "8.2.0", + "puppeteer-core": "21.0.1" + } + }, + "puppeteer-cluster": { + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/puppeteer-cluster/-/puppeteer-cluster-0.23.0.tgz", + "integrity": "sha512-108terIWDzPrQopmoYSPd5yDoy3FGJ2dNnoGMkGYPs6xtkdhgaECwpfZkzaRToMQPZibUOz0/dSSGgPEdXEhkQ==", + "requires": { + "debug": "^4.3.3" + }, + "dependencies": { + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "puppeteer-core": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.0.1.tgz", + "integrity": "sha512-E8eWLGhaZZpa7dYe/58qGX7SLb4mTg42NP5M7B+ibPrncgNjTOQa9x1sFIlTn1chF/BmoZqOcMIvwuxcb/9XzQ==", + "requires": { + "@puppeteer/browsers": "1.5.0", + "chromium-bidi": "0.4.20", + "cross-fetch": "4.0.0", + "debug": "4.3.4", + "devtools-protocol": "0.0.1147663", + "ws": "8.13.0" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, + "qrcode": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/qrcode/-/qrcode-1.5.3.tgz", + "integrity": "sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg==", + "requires": { + "dijkstrajs": "^1.0.1", + "encode-utf8": "^1.0.3", + "pngjs": "^5.0.0", + "yargs": "^15.3.1" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "cliui": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", + "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "yargs": { + "version": "15.4.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", + "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "requires": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + } + }, + "yargs-parser": { + "version": "18.1.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", + "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "qs": { "version": "6.11.0", "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", @@ -3714,6 +8081,11 @@ "side-channel": "^1.0.4" } }, + "queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==" + }, "range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -3774,6 +8146,14 @@ "util-deprecate": "^1.0.1" } }, + "readable-web-to-node-stream": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.2.tgz", + "integrity": "sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==", + "requires": { + "readable-stream": "^3.6.0" + } + }, "readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -3783,6 +8163,26 @@ "picomatch": "^2.2.1" } }, + "regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==" + }, + "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==" + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" + }, "rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -3801,6 +8201,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" + }, "semver": { "version": "7.6.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", @@ -3907,6 +8312,35 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" }, + "sharp": { + "version": "0.33.4", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.4.tgz", + "integrity": "sha512-7i/dt5kGl7qR4gwPRD2biwD2/SvBn3O04J77XKFgL2OnZtQw+AG9wnuS/csmu80nPRHLYE9E41fyEiG8nhH6/Q==", + "requires": { + "@img/sharp-darwin-arm64": "0.33.4", + "@img/sharp-darwin-x64": "0.33.4", + "@img/sharp-libvips-darwin-arm64": "1.0.2", + "@img/sharp-libvips-darwin-x64": "1.0.2", + "@img/sharp-libvips-linux-arm": "1.0.2", + "@img/sharp-libvips-linux-arm64": "1.0.2", + "@img/sharp-libvips-linux-s390x": "1.0.2", + "@img/sharp-libvips-linux-x64": "1.0.2", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.2", + "@img/sharp-libvips-linuxmusl-x64": "1.0.2", + "@img/sharp-linux-arm": "0.33.4", + "@img/sharp-linux-arm64": "0.33.4", + "@img/sharp-linux-s390x": "0.33.4", + "@img/sharp-linux-x64": "0.33.4", + "@img/sharp-linuxmusl-arm64": "0.33.4", + "@img/sharp-linuxmusl-x64": "0.33.4", + "@img/sharp-wasm32": "0.33.4", + "@img/sharp-win32-ia32": "0.33.4", + "@img/sharp-win32-x64": "0.33.4", + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.0" + } + }, "side-channel": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", @@ -3928,6 +8362,21 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + } + } + }, "simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", @@ -3937,6 +8386,53 @@ "semver": "^7.5.3" } }, + "smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" + }, + "socks": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", + "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", + "requires": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + } + }, + "socks-proxy-agent": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.4.tgz", + "integrity": "sha512-GNAq/eg8Udq2x0eNiFkr9gRg5bA7PXEWagQdeRX4cPSG+X/8V38v637gim9bjFptMk1QWsCTr0ttrJEiXbNnRw==", + "requires": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.8.3" + }, + "dependencies": { + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + }, + "debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + } + } + }, "source-map": { "version": "0.1.43", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", @@ -3953,11 +8449,27 @@ "memory-pager": "^1.0.2" } }, + "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==" + }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" }, + "streamx": { + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.18.0.tgz", + "integrity": "sha512-LLUC1TWdjVdn1weXGcSxyTR3T4+acB6tVGXT95y0nGbca4t4o/ng1wKAGTljm9VicuCVLvRlqFYXYy5GwgM7sQ==", + "requires": { + "bare-events": "^2.2.0", + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + } + }, "string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -3991,11 +8503,19 @@ "ansi-regex": "^5.0.1" } }, + "strtok3": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-6.3.0.tgz", + "integrity": "sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==", + "requires": { + "@tokenizer/token": "^0.3.0", + "peek-readable": "^4.1.0" + } + }, "supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, "requires": { "has-flag": "^3.0.0" } @@ -4020,6 +8540,49 @@ } } }, + "tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "requires": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "requires": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "text-decoder": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.1.0.tgz", + "integrity": "sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==", + "requires": { + "b4a": "^1.6.4" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "timm": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/timm/-/timm-1.7.1.tgz", + "integrity": "sha512-IjZc9KIotudix8bMaBW6QvMuq64BrJWFs1+4V0lXwWGQZwH+LnX87doAYhem4caOEusRP9/g6jVDQmZ8XOk1nw==" + }, + "tinycolor2": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/tinycolor2/-/tinycolor2-1.6.0.tgz", + "integrity": "sha512-XPaBkWQJdsf3pLKJV9p4qN/S+fm2Oj8AIPo1BTUhg5oxkvm9+SVEGFdhyOz7tTdUTfvxMiAs4sp6/eZO2Ew+pw==" + }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -4034,6 +8597,15 @@ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" }, + "token-types": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-4.2.1.tgz", + "integrity": "sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==", + "requires": { + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + } + }, "touch": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.1.tgz", @@ -4073,6 +8645,11 @@ } } }, + "tslib": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", + "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + }, "type-is": { "version": "1.6.18", "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", @@ -4091,17 +8668,45 @@ "source-map": "~0.1.7" } }, + "unbzip2-stream": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", + "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "requires": { + "buffer": "^5.2.1", + "through": "^2.3.8" + } + }, "undefsafe": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "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==", + "optional": true + }, + "universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==" + }, "unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "utif2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz", + "integrity": "sha512-+oknB9FHrJ7oW7A2WZYajOcv4FcDR4CfoGB0dPNfxbi4GO05RRnFmt5oa23+9w32EanrYcSJWspUiJkLMs+37w==", + "requires": { + "pako": "^1.0.11" + } + }, "util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", @@ -4127,6 +8732,11 @@ "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" }, + "whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==" + }, "whatwg-url": { "version": "13.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", @@ -4136,6 +8746,11 @@ "webidl-conversions": "^7.0.0" } }, + "which-module": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.1.tgz", + "integrity": "sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==" + }, "wide-align": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", @@ -4165,15 +8780,122 @@ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", "integrity": "sha512-xSBsCeh+g+dinoBv3GAOWM4LcVVO68wLXRanibtBSdUvkGWQRGeE9P7IwU9EmDDi4jA6L44lz15CGMwdw9N5+Q==" }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + } + } + }, "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "requires": {} + }, + "xhr": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", + "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", + "requires": { + "global": "~4.4.0", + "is-function": "^1.0.1", + "parse-headers": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "xml-parse-from-string": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", + "integrity": "sha512-ErcKwJTF54uRzzNMXq2X5sMIy88zJvfN2DmdoQvy7PAFJ+tPRU6ydWuOKNMyfmOjdyBQTFREi60s0Y0SyI0G0g==" + }, + "xml2js": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", + "integrity": "sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" + }, "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "requires": { + "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" + } + }, + "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==" + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } } } } diff --git a/package.json b/package.json index df4bc45..6910a06 100644 --- a/package.json +++ b/package.json @@ -13,11 +13,16 @@ "debug": "~2.6.9", "dotenv": "^16.4.5", "express": "^4.19.2", + "fs": "^0.0.1-security", "http-errors": "~1.6.3", "jade": "^1.9.2", + "jimp": "^0.22.12", "jsonwebtoken": "^9.0.2", "mongoose": "^8.4.3", - "morgan": "~1.9.1" + "morgan": "~1.9.1", + "node-html-to-image": "^4.0.0", + "qrcode": "^1.5.3", + "sharp": "^0.33.4" }, "devDependencies": { "nodemon": "^3.1.0" diff --git a/src/index.js b/src/index.js index ba0de07..4cf353d 100644 --- a/src/index.js +++ b/src/index.js @@ -4,6 +4,11 @@ const cors = require('cors'); const db = require('./configurations/db.config'); const MongoMemberRepository = require('./repositories/MongoMemberRepository'); const memberRepository = new MongoMemberRepository(); +const nodeHtmlToImage = require('node-html-to-image'); +const QRCode = require('qrcode'); +const fs = require('fs'); +const path = require('path'); +const Jimp = require('jimp'); dotenv.config({ path: '.env' }); @@ -25,81 +30,293 @@ app.use(cors()); // Servicios const createMember = async (req, res) => { - try { - const member = req.body; - // Verificar si ya existe un miembro con el mismo DNI - const existingMember = await memberRepository.findById(member.dni); - console.log(existingMember) - if (existingMember) { - return res.status(400).json({ message: 'El número de DNI ya está en uso.' }); - } - - // Si no hay un miembro con el mismo DNI, guardar el nuevo miembro - const savedMember = await memberRepository.save(member); - res.status(201).json(savedMember); - } catch (error) { - res.status(500).json({ message: error.message }); + + try { + const member = req.body; + // Verificar si ya existe un miembro con el mismo DNI + const existingMember = await memberRepository.findById(member.dni); + console.log(existingMember) + if (existingMember) { + return res.status(400).json({ message: 'El número de DNI ya está en uso.' }); } + + // Si no hay un miembro con el mismo DNI, guardar el nuevo miembro + const savedMember = await memberRepository.save(member); + res.status(201).json(savedMember); + } catch (error) { + res.status(500).json({ message: error.message }); + } }; const getMembers = async (req, res) => { - const { page, filter } = req.query; - try { - let members; - if (filter) { - members = await memberRepository.findByFilter(filter, page); - } else { - members = await memberRepository.find(page); - } - res.status(200).json(members); - } catch (error) { - res.status(500).json({ message: error.message }); + const { page, filter } = req.query; + try { + let members; + if (filter) { + members = await memberRepository.findByFilter(filter, page); + } else { + members = await memberRepository.find(page); } + res.status(200).json(members); + } catch (error) { + res.status(500).json({ message: error.message }); + } }; - const getMemberById = async (req, res) => { - try { - const { id } = req.params; - const member = await memberRepository.findById(id); - if (member) { - res.status(200).json(member); - } else { - res.status(404).json({ message: 'Member not found' }); - } - } catch (error) { - res.status(500).json({ message: error.message }); + try { + const { id } = req.params; + const member = await memberRepository.findById(id); + if (member) { + res.status(200).json(member); + } else { + res.status(404).json({ message: 'Member not found' }); } + } catch (error) { + res.status(500).json({ message: error.message }); + } }; const updateMember = async (req, res) => { - try { - const { id } = req.params; - const member = req.body; - member.dni = id; - const updatedMember = await memberRepository.update(member); - res.status(200).json(updatedMember); - } catch (error) { - res.status(500).json({ message: error.message }); - } + try { + const { id } = req.params; + const member = req.body; + member.dni = id; + const updatedMember = await memberRepository.update(member); + res.status(200).json(updatedMember); + } catch (error) { + res.status(500).json({ message: error.message }); + } }; const deleteMember = async (req, res) => { - try { - const { id } = req.params; - const result = await memberRepository.delete(id); - res.status(200).json({ message: result }); - } catch (error) { - res.status(500).json({ message: error.message }); - } + try { + const { id } = req.params; + const result = await memberRepository.delete(id); + res.status(200).json({ message: result }); + } catch (error) { + res.status(500).json({ message: error.message }); + } }; +const generateCredential = async (req, res) => { + + try { + const { dni } = req.params; + const member = await memberRepository.findById(dni); + + let avatarDefault; + + const qrUrl = `${process.env.URL_BASE_FRONT}/members/status/${dni}`; + const qr = await QRCode.toDataURL(qrUrl); + + // Retrieve the image from the filesystem using Jimp + const imagePath = path.join(__dirname, 'public/static/logo.png'); + const image = await Jimp.read(imagePath); + const logoBuffer = await image.getBufferAsync(Jimp.MIME_PNG); + const logoBase64 = logoBuffer.toString('base64'); + const logoDataURL = `data:image/png;base64,${logoBase64}`; + + if(!member.avatar){ + const imagePathDefault = path.join(__dirname, 'public/static/default.jpg'); + const imageDefault = await Jimp.read(imagePathDefault); + const logoBufferDefault = await imageDefault.getBufferAsync(Jimp.MIME_PNG); + const logoBase64Default = logoBufferDefault.toString('base64'); + avatarDefault = `data:image/png;base64,${logoBase64Default}`; + } + + + try { + const html = ` + + + + + +
+
+
+

+
+
+ Logo +
+
IEPE
+
+

+
    +
  • Iglesia
  • +
  • Evangelica
  • +
  • Pueblo Elegido
  • +
+
+
+ Avatar +
+
+ QR +
+
    +
  • APELLIDO Y NOMBRE: ${member.lastName} ${member.firstName}
  • + ${member.position !== "MIEMBRO" ? `
  • SERVICIO: ${member.position}
  • ` : ''} +
+
+
+
+
+
+
+
+

+
+

+
+
+
IEPE
+
+

+ Teniendo a Dios tenemos todo +
    +
  • Dirección: Sánchez de Bustamante 786, Rosario, Santa Fe, Argentina
  • +
  • Pastor: Dante David Sarmiento
  • +
+
+
+
+
+ + `; + + const image = await nodeHtmlToImage({ html: html }); + + res.status(200).json({ image: image.toString('base64') }); + } catch (error) { + console.error('Error generating images:', error); + res.status(500).send('Error generating images'); + } + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; // Rutas app.post('/members', createMember); app.get('/members', getMembers); +app.get('/members/generate-credential/:dni', generateCredential); app.get('/members/:id', getMemberById); app.put('/members/:id', updateMember); app.delete('/members/:id', deleteMember); diff --git a/src/public/static/default.jpg b/src/public/static/default.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4beb6af42ee232a4c9c57972ac9bbaff0c4edafa GIT binary patch literal 18388 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 literal 0 HcmV?d00001 diff --git a/src/public/static/logo.png b/src/public/static/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..67b48334ca42c50513e71adeffefa0c13baf3520 GIT binary patch literal 815115 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∨5T~Y{mP6m}xCMT;pT^bl;E4 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Ã&!eWSy%Kc18?RXGqTTq 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

-
-
-
-

-
-

-
-
-
IEPE
-
-

- Teniendo a Dios tenemos todo -
    -
  • Dirección: Sánchez de Bustamante 786, Rosario, Santa Fe, Argentina
  • -
  • Pastor: Dante David Sarmiento
  • -
-
-
-
-
- - `; - - const image = await nodeHtmlToImage({ html: html }); - - res.status(200).json({ image: image.toString('base64') }); - } catch (error) { - console.error('Error generating images:', error); - res.status(500).send('Error generating images'); - } + res.status(200).json({ image: image.toString('base64') }); } catch (error) { - res.status(500).json({ message: error.message }); + console.error('Error generating images:', error); + res.status(500).send('Error generating images'); } }; diff --git a/src/resources/templates/template.html b/src/resources/templates/template.html new file mode 100644 index 0000000..5e55468 --- /dev/null +++ b/src/resources/templates/template.html @@ -0,0 +1,159 @@ + + + + + + +
+
+
+

+
+
+ Logo +
+
IEPE
+
+

+
    +
  • Iglesia
  • +
  • Evangelica
  • +
  • Pueblo Elegido
  • +
+
+
+ Avatar +
+
+ QR +
+
    +
  • APELLIDO Y NOMBRE: {member.lastName} {member.firstName}
  • + {member.position} +
+
+
+
+
+
+
+
+

+
+

+
+
+
IEPE
+
+

+ Teniendo a Dios tenemos todo +
    +
  • Dirección: Sánchez de Bustamante 786, Rosario, Santa Fe, Argentina
  • +
  • Pastor: Dante David Sarmiento
  • +
+
+
+
+
+ + From eb4120810f387e1ee427415d7434050112e3d5e1 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:00:35 -0300 Subject: [PATCH 32/73] cors --- src/index.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index d47ea3d..e5fad80 100644 --- a/src/index.js +++ b/src/index.js @@ -26,7 +26,12 @@ const app = express(); // Set the limits once app.use(express.json({ limit: '50mb' })); app.use(express.urlencoded({ limit: '50mb', extended: true })); -app.use(cors()); +app.use(cors({ + origin: 'https://iepe-portal.vercel.app', // Replace with your actual front-end URL + methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', + credentials: true, + optionsSuccessStatus: 204 +})); // Servicios const createMember = async (req, res) => { From ff9834c24f2d6c758194ff43579c2e506182b6f0 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:07:15 -0300 Subject: [PATCH 33/73] cors --- src/index.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index e5fad80..9a4f65c 100644 --- a/src/index.js +++ b/src/index.js @@ -27,7 +27,7 @@ const app = express(); app.use(express.json({ limit: '50mb' })); app.use(express.urlencoded({ limit: '50mb', extended: true })); app.use(cors({ - origin: 'https://iepe-portal.vercel.app', // Replace with your actual front-end URL + origin: '*', methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', credentials: true, optionsSuccessStatus: 204 @@ -39,7 +39,6 @@ const createMember = async (req, res) => { const member = req.body; // Verificar si ya existe un miembro con el mismo DNI const existingMember = await memberRepository.findById(member.dni); - console.log(existingMember) if (existingMember) { return res.status(400).json({ message: 'El número de DNI ya está en uso.' }); } From 12e8614bace6d6ca6a017407718b685e7cbd4236 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:12:15 -0300 Subject: [PATCH 34/73] cors --- src/index.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index 9a4f65c..814a441 100644 --- a/src/index.js +++ b/src/index.js @@ -24,10 +24,11 @@ const app = express(); })(); // Set the limits once -app.use(express.json({ limit: '50mb' })); -app.use(express.urlencoded({ limit: '50mb', extended: true })); +app.use(express.json({ limit: '10mb' })); // Reduce limit if possible +app.use(express.urlencoded({ limit: '10mb', extended: true })); // Reduce limit if possible + app.use(cors({ - origin: '*', + origin: process.env.URL_BASE_FRONT, methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', credentials: true, optionsSuccessStatus: 204 From e533262b800b5e2ad6aca5efbc4b43caef8e571a Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:14:12 -0300 Subject: [PATCH 35/73] cors --- src/index.js | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index 814a441..c71aaa2 100644 --- a/src/index.js +++ b/src/index.js @@ -116,14 +116,16 @@ const generateCredential = async (req, res) => { // Retrieve the image from the filesystem using Jimp const imagePath = path.join(__dirname, 'public/static/logo.png'); const imageLogo = await Jimp.read(imagePath); - const logoBuffer = await imageLogo.getBufferAsync(Jimp.MIME_PNG); + imageLogo.resize(100, 100); // Redimensionar logo a 100x100 píxeles + const logoBuffer = await imageLogo.quality(60).getBufferAsync(Jimp.MIME_PNG); // Reducir calidad al 60% const logoBase64 = logoBuffer.toString('base64'); const logoDataURL = `data:image/png;base64,${logoBase64}`; if (!member.avatar) { const imagePathDefault = path.join(__dirname, 'public/static/default.jpg'); const imageDefault = await Jimp.read(imagePathDefault); - const logoBufferDefault = await imageDefault.getBufferAsync(Jimp.MIME_PNG); + imageDefault.resize(100, 100); // Redimensionar avatar a 100x100 píxeles + const logoBufferDefault = await imageDefault.quality(60).getBufferAsync(Jimp.MIME_PNG); // Reducir calidad al 60% const logoBase64Default = logoBufferDefault.toString('base64'); avatarDefault = `data:image/png;base64,${logoBase64Default}`; } @@ -141,7 +143,11 @@ const generateCredential = async (req, res) => { .replace('{member.firstName}', member.firstName) .replace('{member.position}', member.position !== "MIEMBRO" ? `
  • SERVICIO: ${member.position}
  • ` : ""); - const image = await nodeHtmlToImage({ html: html }); + const image = await nodeHtmlToImage({ + html: html, + type: 'png', + quality: 60 // Reducir calidad al 60% + }); res.status(200).json({ image: image.toString('base64') }); } catch (error) { @@ -150,6 +156,7 @@ const generateCredential = async (req, res) => { } }; + // Rutas app.post('/members', createMember); app.get('/members', getMembers); From bb3544f79d896b2769082ac653477bb80d050636 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:21:26 -0300 Subject: [PATCH 36/73] test --- src/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index c71aaa2..63d8069 100644 --- a/src/index.js +++ b/src/index.js @@ -114,7 +114,7 @@ const generateCredential = async (req, res) => { const qr = await QRCode.toDataURL(qrUrl); // Retrieve the image from the filesystem using Jimp - const imagePath = path.join(__dirname, 'public/static/logo.png'); +/* const imagePath = path.join(__dirname, 'public/static/logo.png'); const imageLogo = await Jimp.read(imagePath); imageLogo.resize(100, 100); // Redimensionar logo a 100x100 píxeles const logoBuffer = await imageLogo.quality(60).getBufferAsync(Jimp.MIME_PNG); // Reducir calidad al 60% @@ -128,7 +128,7 @@ const generateCredential = async (req, res) => { const logoBufferDefault = await imageDefault.quality(60).getBufferAsync(Jimp.MIME_PNG); // Reducir calidad al 60% const logoBase64Default = logoBufferDefault.toString('base64'); avatarDefault = `data:image/png;base64,${logoBase64Default}`; - } + } */ // Read HTML template from file const templatePath = path.join(__dirname, 'resources/templates/template.html'); @@ -136,7 +136,7 @@ const generateCredential = async (req, res) => { // Replace placeholders in the HTML template const html = htmlTemplate - .replace('{logoDataURL}', logoDataURL) + .replace('{logoDataURL}', 'logoDataURL') .replace('{member.avatar}', member.avatar ? member.avatar : avatarDefault) .replace('{qr}', qr) .replace('{member.lastName}', member.lastName) From 9a6c709f8e4e944c4eb18be196d78007dc258dcb Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:26:06 -0300 Subject: [PATCH 37/73] cors --- src/index.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index 63d8069..c71aaa2 100644 --- a/src/index.js +++ b/src/index.js @@ -114,7 +114,7 @@ const generateCredential = async (req, res) => { const qr = await QRCode.toDataURL(qrUrl); // Retrieve the image from the filesystem using Jimp -/* const imagePath = path.join(__dirname, 'public/static/logo.png'); + const imagePath = path.join(__dirname, 'public/static/logo.png'); const imageLogo = await Jimp.read(imagePath); imageLogo.resize(100, 100); // Redimensionar logo a 100x100 píxeles const logoBuffer = await imageLogo.quality(60).getBufferAsync(Jimp.MIME_PNG); // Reducir calidad al 60% @@ -128,7 +128,7 @@ const generateCredential = async (req, res) => { const logoBufferDefault = await imageDefault.quality(60).getBufferAsync(Jimp.MIME_PNG); // Reducir calidad al 60% const logoBase64Default = logoBufferDefault.toString('base64'); avatarDefault = `data:image/png;base64,${logoBase64Default}`; - } */ + } // Read HTML template from file const templatePath = path.join(__dirname, 'resources/templates/template.html'); @@ -136,7 +136,7 @@ const generateCredential = async (req, res) => { // Replace placeholders in the HTML template const html = htmlTemplate - .replace('{logoDataURL}', 'logoDataURL') + .replace('{logoDataURL}', logoDataURL) .replace('{member.avatar}', member.avatar ? member.avatar : avatarDefault) .replace('{qr}', qr) .replace('{member.lastName}', member.lastName) From a82b75c90831b98b89ab4969736e09ba6c201449 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:30:08 -0300 Subject: [PATCH 38/73] cors --- src/index.js | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/index.js b/src/index.js index c71aaa2..5780ae4 100644 --- a/src/index.js +++ b/src/index.js @@ -28,7 +28,7 @@ app.use(express.json({ limit: '10mb' })); // Reduce limit if possible app.use(express.urlencoded({ limit: '10mb', extended: true })); // Reduce limit if possible app.use(cors({ - origin: process.env.URL_BASE_FRONT, + origin: '*', methods: 'GET,HEAD,PUT,PATCH,POST,DELETE', credentials: true, optionsSuccessStatus: 204 @@ -108,33 +108,34 @@ const generateCredential = async (req, res) => { const { dni } = req.params; const member = await memberRepository.findById(dni); + if (!member) { + return res.status(404).json({ message: 'Member not found' }); + } + let avatarDefault; const qrUrl = `${process.env.URL_BASE_FRONT}/members/status/${dni}`; const qr = await QRCode.toDataURL(qrUrl); - // Retrieve the image from the filesystem using Jimp const imagePath = path.join(__dirname, 'public/static/logo.png'); const imageLogo = await Jimp.read(imagePath); - imageLogo.resize(100, 100); // Redimensionar logo a 100x100 píxeles - const logoBuffer = await imageLogo.quality(60).getBufferAsync(Jimp.MIME_PNG); // Reducir calidad al 60% + imageLogo.resize(100, 100); + const logoBuffer = await imageLogo.quality(60).getBufferAsync(Jimp.MIME_PNG); const logoBase64 = logoBuffer.toString('base64'); const logoDataURL = `data:image/png;base64,${logoBase64}`; if (!member.avatar) { const imagePathDefault = path.join(__dirname, 'public/static/default.jpg'); const imageDefault = await Jimp.read(imagePathDefault); - imageDefault.resize(100, 100); // Redimensionar avatar a 100x100 píxeles - const logoBufferDefault = await imageDefault.quality(60).getBufferAsync(Jimp.MIME_PNG); // Reducir calidad al 60% + imageDefault.resize(100, 100); + const logoBufferDefault = await imageDefault.quality(60).getBufferAsync(Jimp.MIME_PNG); const logoBase64Default = logoBufferDefault.toString('base64'); avatarDefault = `data:image/png;base64,${logoBase64Default}`; } - // Read HTML template from file const templatePath = path.join(__dirname, 'resources/templates/template.html'); const htmlTemplate = fs.readFileSync(templatePath, 'utf8'); - // Replace placeholders in the HTML template const html = htmlTemplate .replace('{logoDataURL}', logoDataURL) .replace('{member.avatar}', member.avatar ? member.avatar : avatarDefault) @@ -146,17 +147,18 @@ const generateCredential = async (req, res) => { const image = await nodeHtmlToImage({ html: html, type: 'png', - quality: 60 // Reducir calidad al 60% + quality: 60 }); res.status(200).json({ image: image.toString('base64') }); } catch (error) { - console.error('Error generating images:', error); - res.status(500).send('Error generating images'); + console.error('Error generating credential:', error); // Enhanced error logging + res.status(500).send('Error generating credential'); } }; + // Rutas app.post('/members', createMember); app.get('/members', getMembers); From 03f084eaa146261a038eba7579dc99d8de729665 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:35:12 -0300 Subject: [PATCH 39/73] cors --- package-lock.json | 723 +++++++++++++++++++++++++++++++++++++++------- package.json | 1 + src/index.js | 21 +- 3 files changed, 621 insertions(+), 124 deletions(-) diff --git a/package-lock.json b/package-lock.json index fe9e754..addb7ef 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "mongoose": "^8.4.3", "morgan": "~1.9.1", "node-html-to-image": "^4.0.0", + "puppeteer": "^22.12.1", "qrcode": "^1.5.3", "sharp": "^0.33.4" }, @@ -927,23 +928,24 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.5.0.tgz", - "integrity": "sha512-za318PweGINh5LnHSph7C4xhs0tmRjCD8EPpzcKlw4nzSPhnULj+LTG3+TGefZvW1ti5gjw2JkdQvQsivBeZlg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", + "integrity": "sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==", "dependencies": { "debug": "4.3.4", "extract-zip": "2.0.1", "progress": "2.0.3", - "proxy-agent": "6.3.0", - "tar-fs": "3.0.4", + "proxy-agent": "6.4.0", + "semver": "7.6.0", + "tar-fs": "3.0.5", "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" + "yargs": "17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" }, "engines": { - "node": ">=16.3.0" + "node": ">=18" } }, "node_modules/@puppeteer/browsers/node_modules/debug": { @@ -962,11 +964,36 @@ } } }, + "node_modules/@puppeteer/browsers/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/@puppeteer/browsers/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/@puppeteer/browsers/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/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", @@ -1176,6 +1203,41 @@ "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", "optional": true }, + "node_modules/bare-fs": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", + "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", + "optional": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz", + "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", + "optional": true + }, + "node_modules/bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "optional": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz", + "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", + "optional": true, + "dependencies": { + "streamx": "^2.18.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -1485,11 +1547,13 @@ } }, "node_modules/chromium-bidi": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.20.tgz", - "integrity": "sha512-ruHgVZFEv00mAQMz1tQjfjdG63jiPWrQPF6HLlX2ucqLqVTJoWngeBEKHaJ6n1swV/HSvgnBNbtTRIlcVyW3Fw==", + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.24.tgz", + "integrity": "sha512-5xQNN2SVBdZv4TxeMLaI+PelrnZsHDhn8h2JtyriLr+0qHcZS8BMuo93qN6J1VmtmrgYP+rmcLHcbpnA8QJh+w==", "dependencies": { - "mitt": "3.0.1" + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" }, "peerDependencies": { "devtools-protocol": "*" @@ -1669,20 +1733,28 @@ } }, "node_modules/cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dependencies": { - "import-fresh": "^3.2.1", + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/cross-fetch": { @@ -1796,9 +1868,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1147663", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", - "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==" + "version": "0.0.1299070", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1299070.tgz", + "integrity": "sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg==" }, "node_modules/dijkstrajs": { "version": "1.0.3", @@ -1860,6 +1932,14 @@ "once": "^1.4.0" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -3401,6 +3481,199 @@ "puppeteer-cluster": "^0.23.0" } }, + "node_modules/node-html-to-image/node_modules/@puppeteer/browsers": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.5.0.tgz", + "integrity": "sha512-za318PweGINh5LnHSph7C4xhs0tmRjCD8EPpzcKlw4nzSPhnULj+LTG3+TGefZvW1ti5gjw2JkdQvQsivBeZlg==", + "dependencies": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "progress": "2.0.3", + "proxy-agent": "6.3.0", + "tar-fs": "3.0.4", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + }, + "bin": { + "browsers": "lib/cjs/main-cli.js" + }, + "engines": { + "node": ">=16.3.0" + } + }, + "node_modules/node-html-to-image/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==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/node-html-to-image/node_modules/chromium-bidi": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.20.tgz", + "integrity": "sha512-ruHgVZFEv00mAQMz1tQjfjdG63jiPWrQPF6HLlX2ucqLqVTJoWngeBEKHaJ6n1swV/HSvgnBNbtTRIlcVyW3Fw==", + "dependencies": { + "mitt": "3.0.1" + }, + "peerDependencies": { + "devtools-protocol": "*" + } + }, + "node_modules/node-html-to-image/node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/node-html-to-image/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/node-html-to-image/node_modules/devtools-protocol": { + "version": "0.0.1147663", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", + "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==" + }, + "node_modules/node-html-to-image/node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/node-html-to-image/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/node-html-to-image/node_modules/proxy-agent": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/node-html-to-image/node_modules/puppeteer": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.0.1.tgz", + "integrity": "sha512-KTjmSdPZ6bMkq3EbAzAUhcB3gMDXvdwd6912rxG9hNtjwRJzHSA568vh6vIbO2WQeNmozRdt1LtiUMLSWfeMrg==", + "deprecated": "< 22.6.4 is no longer supported", + "hasInstallScript": true, + "dependencies": { + "@puppeteer/browsers": "1.5.0", + "cosmiconfig": "8.2.0", + "puppeteer-core": "21.0.1" + }, + "engines": { + "node": ">=16.3.0" + } + }, + "node_modules/node-html-to-image/node_modules/puppeteer-core": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.0.1.tgz", + "integrity": "sha512-E8eWLGhaZZpa7dYe/58qGX7SLb4mTg42NP5M7B+ibPrncgNjTOQa9x1sFIlTn1chF/BmoZqOcMIvwuxcb/9XzQ==", + "dependencies": { + "@puppeteer/browsers": "1.5.0", + "chromium-bidi": "0.4.20", + "cross-fetch": "4.0.0", + "debug": "4.3.4", + "devtools-protocol": "0.0.1147663", + "ws": "8.13.0" + }, + "engines": { + "node": ">=16.3.0" + } + }, + "node_modules/node-html-to-image/node_modules/tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "dependencies": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "node_modules/node-html-to-image/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/node-html-to-image/node_modules/yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "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/nodemon": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.3.tgz", @@ -3840,18 +4113,18 @@ } }, "node_modules/proxy-agent": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", - "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", "dependencies": { "agent-base": "^7.0.2", "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.0", + "pac-proxy-agent": "^7.0.1", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.2" }, "engines": { "node": ">= 14" @@ -3930,18 +4203,21 @@ } }, "node_modules/puppeteer": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.0.1.tgz", - "integrity": "sha512-KTjmSdPZ6bMkq3EbAzAUhcB3gMDXvdwd6912rxG9hNtjwRJzHSA568vh6vIbO2WQeNmozRdt1LtiUMLSWfeMrg==", - "deprecated": "< 22.6.4 is no longer supported", + "version": "22.12.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.12.1.tgz", + "integrity": "sha512-1GxY8dnEnHr1SLzdSDr0FCjM6JQfAh2E2I/EqzeF8a58DbGVk9oVjj4lFdqNoVbpgFSpAbz7VER9St7S1wDpNg==", "hasInstallScript": true, "dependencies": { - "@puppeteer/browsers": "1.5.0", - "cosmiconfig": "8.2.0", - "puppeteer-core": "21.0.1" + "@puppeteer/browsers": "2.2.3", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1299070", + "puppeteer-core": "22.12.1" + }, + "bin": { + "puppeteer": "lib/esm/puppeteer/node/cli.js" }, "engines": { - "node": ">=16.3.0" + "node": ">=18" } }, "node_modules/puppeteer-cluster": { @@ -3977,25 +4253,24 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/puppeteer-core": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.0.1.tgz", - "integrity": "sha512-E8eWLGhaZZpa7dYe/58qGX7SLb4mTg42NP5M7B+ibPrncgNjTOQa9x1sFIlTn1chF/BmoZqOcMIvwuxcb/9XzQ==", + "version": "22.12.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.12.1.tgz", + "integrity": "sha512-XmqeDPVdC5/3nGJys1jbgeoZ02wP0WV1GBlPtr/ULRbGXJFuqgXMcKQ3eeNtFpBzGRbpeoCGWHge1ZWKWl0Exw==", "dependencies": { - "@puppeteer/browsers": "1.5.0", - "chromium-bidi": "0.4.20", - "cross-fetch": "4.0.0", - "debug": "4.3.4", - "devtools-protocol": "0.0.1147663", - "ws": "8.13.0" + "@puppeteer/browsers": "2.2.3", + "chromium-bidi": "0.5.24", + "debug": "^4.3.5", + "devtools-protocol": "0.0.1299070", + "ws": "^8.17.1" }, "engines": { - "node": ">=16.3.0" + "node": ">=18" } }, "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dependencies": { "ms": "2.1.2" }, @@ -4728,13 +5003,16 @@ } }, "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", + "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", "dependencies": { - "mkdirp-classic": "^0.5.2", "pump": "^3.0.0", "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" } }, "node_modules/tar-stream": { @@ -4930,6 +5208,11 @@ "node": ">= 0.8" } }, + "node_modules/urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" + }, "node_modules/utif2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz", @@ -5085,9 +5368,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "engines": { "node": ">=10.0.0" }, @@ -5162,9 +5445,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -5194,6 +5477,14 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } } }, "dependencies": { @@ -5692,17 +5983,18 @@ } }, "@puppeteer/browsers": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.5.0.tgz", - "integrity": "sha512-za318PweGINh5LnHSph7C4xhs0tmRjCD8EPpzcKlw4nzSPhnULj+LTG3+TGefZvW1ti5gjw2JkdQvQsivBeZlg==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", + "integrity": "sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==", "requires": { "debug": "4.3.4", "extract-zip": "2.0.1", "progress": "2.0.3", - "proxy-agent": "6.3.0", - "tar-fs": "3.0.4", + "proxy-agent": "6.4.0", + "semver": "7.6.0", + "tar-fs": "3.0.5", "unbzip2-stream": "1.4.3", - "yargs": "17.7.1" + "yargs": "17.7.2" }, "dependencies": { "debug": { @@ -5713,10 +6005,26 @@ "ms": "2.1.2" } }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "requires": { + "lru-cache": "^6.0.0" + } } } }, @@ -5892,6 +6200,41 @@ "integrity": "sha512-qMKFd2qG/36aA4GwvKq8MxnPgCQAmBWmSyLWsJcbn8v03wvIPQ/hG1Ms8bPzndZxMDoHpxez5VOS+gC9Yi24/Q==", "optional": true }, + "bare-fs": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.1.tgz", + "integrity": "sha512-W/Hfxc/6VehXlsgFtbB5B4xFcsCl+pAh30cYhoFyXErf6oGrwjh8SwiPAdHgpmWonKuYpZgGywN0SXt7dgsADA==", + "optional": true, + "requires": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "bare-os": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.0.tgz", + "integrity": "sha512-v8DTT08AS/G0F9xrhyLtepoo9EJBJ85FRSMbu1pQUlAf6A8T0tEEQGMVObWeqpjhSPXsE0VGlluFBJu2fdoTNg==", + "optional": true + }, + "bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "optional": true, + "requires": { + "bare-os": "^2.1.0" + } + }, + "bare-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.1.3.tgz", + "integrity": "sha512-tiDAH9H/kP+tvNO5sczyn9ZAA7utrSMobyDchsnyyXBuUe2FSQWbxhtuHB8jwpHYYevVo2UJpcmvvjrbHboUUQ==", + "optional": true, + "requires": { + "streamx": "^2.18.0" + } + }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -6102,11 +6445,13 @@ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "chromium-bidi": { - "version": "0.4.20", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.20.tgz", - "integrity": "sha512-ruHgVZFEv00mAQMz1tQjfjdG63jiPWrQPF6HLlX2ucqLqVTJoWngeBEKHaJ6n1swV/HSvgnBNbtTRIlcVyW3Fw==", + "version": "0.5.24", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.24.tgz", + "integrity": "sha512-5xQNN2SVBdZv4TxeMLaI+PelrnZsHDhn8h2JtyriLr+0qHcZS8BMuo93qN6J1VmtmrgYP+rmcLHcbpnA8QJh+w==", "requires": { - "mitt": "3.0.1" + "mitt": "3.0.1", + "urlpattern-polyfill": "10.0.0", + "zod": "3.23.8" } }, "cliui": { @@ -6242,14 +6587,14 @@ } }, "cosmiconfig": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", - "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "requires": { - "import-fresh": "^3.2.1", + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.0.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" } }, "cross-fetch": { @@ -6338,9 +6683,9 @@ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==" }, "devtools-protocol": { - "version": "0.0.1147663", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", - "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==" + "version": "0.0.1299070", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1299070.tgz", + "integrity": "sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg==" }, "dijkstrajs": { "version": "1.0.3", @@ -6393,6 +6738,11 @@ "once": "^1.4.0" } }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -7533,6 +7883,144 @@ "handlebars": "4.7.8", "puppeteer": "21.0.1", "puppeteer-cluster": "^0.23.0" + }, + "dependencies": { + "@puppeteer/browsers": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-1.5.0.tgz", + "integrity": "sha512-za318PweGINh5LnHSph7C4xhs0tmRjCD8EPpzcKlw4nzSPhnULj+LTG3+TGefZvW1ti5gjw2JkdQvQsivBeZlg==", + "requires": { + "debug": "4.3.4", + "extract-zip": "2.0.1", + "progress": "2.0.3", + "proxy-agent": "6.3.0", + "tar-fs": "3.0.4", + "unbzip2-stream": "1.4.3", + "yargs": "17.7.1" + } + }, + "agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "requires": { + "debug": "^4.3.4" + } + }, + "chromium-bidi": { + "version": "0.4.20", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.4.20.tgz", + "integrity": "sha512-ruHgVZFEv00mAQMz1tQjfjdG63jiPWrQPF6HLlX2ucqLqVTJoWngeBEKHaJ6n1swV/HSvgnBNbtTRIlcVyW3Fw==", + "requires": { + "mitt": "3.0.1" + } + }, + "cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "requires": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + } + }, + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "requires": { + "ms": "2.1.2" + } + }, + "devtools-protocol": { + "version": "0.0.1147663", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1147663.tgz", + "integrity": "sha512-hyWmRrexdhbZ1tcJUGpO95ivbRhWXz++F4Ko+n21AY5PNln2ovoJw+8ZMNDTtip+CNFQfrtLVh/w4009dXO/eQ==" + }, + "https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "requires": { + "agent-base": "^7.0.2", + "debug": "4" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "proxy-agent": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", + "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", + "requires": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.0", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.1" + } + }, + "puppeteer": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.0.1.tgz", + "integrity": "sha512-KTjmSdPZ6bMkq3EbAzAUhcB3gMDXvdwd6912rxG9hNtjwRJzHSA568vh6vIbO2WQeNmozRdt1LtiUMLSWfeMrg==", + "requires": { + "@puppeteer/browsers": "1.5.0", + "cosmiconfig": "8.2.0", + "puppeteer-core": "21.0.1" + } + }, + "puppeteer-core": { + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.0.1.tgz", + "integrity": "sha512-E8eWLGhaZZpa7dYe/58qGX7SLb4mTg42NP5M7B+ibPrncgNjTOQa9x1sFIlTn1chF/BmoZqOcMIvwuxcb/9XzQ==", + "requires": { + "@puppeteer/browsers": "1.5.0", + "chromium-bidi": "0.4.20", + "cross-fetch": "4.0.0", + "debug": "4.3.4", + "devtools-protocol": "0.0.1147663", + "ws": "8.13.0" + } + }, + "tar-fs": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", + "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "requires": { + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + } + }, + "ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "requires": {} + }, + "yargs": { + "version": "17.7.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", + "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "requires": { + "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" + } + } } }, "nodemon": { @@ -7855,18 +8343,18 @@ } }, "proxy-agent": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.3.0.tgz", - "integrity": "sha512-0LdR757eTj/JfuU7TL2YCuAZnxWXu3tkJbg4Oq3geW/qFNT/32T0sp2HnZ9O0lMR4q3vwAt0+xCA8SR0WAD0og==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/proxy-agent/-/proxy-agent-6.4.0.tgz", + "integrity": "sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==", "requires": { "agent-base": "^7.0.2", "debug": "^4.3.4", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.0", + "http-proxy-agent": "^7.0.1", + "https-proxy-agent": "^7.0.3", "lru-cache": "^7.14.1", - "pac-proxy-agent": "^7.0.0", + "pac-proxy-agent": "^7.0.1", "proxy-from-env": "^1.1.0", - "socks-proxy-agent": "^8.0.1" + "socks-proxy-agent": "^8.0.2" }, "dependencies": { "agent-base": { @@ -7927,13 +8415,14 @@ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "puppeteer": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-21.0.1.tgz", - "integrity": "sha512-KTjmSdPZ6bMkq3EbAzAUhcB3gMDXvdwd6912rxG9hNtjwRJzHSA568vh6vIbO2WQeNmozRdt1LtiUMLSWfeMrg==", + "version": "22.12.1", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.12.1.tgz", + "integrity": "sha512-1GxY8dnEnHr1SLzdSDr0FCjM6JQfAh2E2I/EqzeF8a58DbGVk9oVjj4lFdqNoVbpgFSpAbz7VER9St7S1wDpNg==", "requires": { - "@puppeteer/browsers": "1.5.0", - "cosmiconfig": "8.2.0", - "puppeteer-core": "21.0.1" + "@puppeteer/browsers": "2.2.3", + "cosmiconfig": "^9.0.0", + "devtools-protocol": "0.0.1299070", + "puppeteer-core": "22.12.1" } }, "puppeteer-cluster": { @@ -7960,22 +8449,21 @@ } }, "puppeteer-core": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-21.0.1.tgz", - "integrity": "sha512-E8eWLGhaZZpa7dYe/58qGX7SLb4mTg42NP5M7B+ibPrncgNjTOQa9x1sFIlTn1chF/BmoZqOcMIvwuxcb/9XzQ==", + "version": "22.12.1", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.12.1.tgz", + "integrity": "sha512-XmqeDPVdC5/3nGJys1jbgeoZ02wP0WV1GBlPtr/ULRbGXJFuqgXMcKQ3eeNtFpBzGRbpeoCGWHge1ZWKWl0Exw==", "requires": { - "@puppeteer/browsers": "1.5.0", - "chromium-bidi": "0.4.20", - "cross-fetch": "4.0.0", - "debug": "4.3.4", - "devtools-protocol": "0.0.1147663", - "ws": "8.13.0" + "@puppeteer/browsers": "2.2.3", + "chromium-bidi": "0.5.24", + "debug": "^4.3.5", + "devtools-protocol": "0.0.1299070", + "ws": "^8.17.1" }, "dependencies": { "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "requires": { "ms": "2.1.2" } @@ -8541,11 +9029,12 @@ } }, "tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", + "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", "requires": { - "mkdirp-classic": "^0.5.2", + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0", "pump": "^3.0.0", "tar-stream": "^3.1.5" } @@ -8699,6 +9188,11 @@ "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==" }, + "urlpattern-polyfill": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/urlpattern-polyfill/-/urlpattern-polyfill-10.0.0.tgz", + "integrity": "sha512-H/A06tKD7sS1O1X2SshBVeA5FLycRpjqiBeqGKmBwBDBy28EnRjORxTNe269KSSr5un5qyWi1iL61wLxpd+ZOg==" + }, "utif2": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/utif2/-/utif2-4.1.0.tgz", @@ -8819,9 +9313,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", - "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", "requires": {} }, "xhr": { @@ -8870,9 +9364,9 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { - "version": "17.7.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.1.tgz", - "integrity": "sha512-cwiTb08Xuv5fqF4AovYacTFNxk62th7LKJ6BL9IGUpTJrWoU7/7WdQGTP2SjKf1dUNBGzDd28p/Yfs/GI6JrLw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -8896,6 +9390,11 @@ "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" } + }, + "zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==" } } } diff --git a/package.json b/package.json index 6910a06..910206b 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "mongoose": "^8.4.3", "morgan": "~1.9.1", "node-html-to-image": "^4.0.0", + "puppeteer": "^22.12.1", "qrcode": "^1.5.3", "sharp": "^0.33.4" }, diff --git a/src/index.js b/src/index.js index 5780ae4..fae46b1 100644 --- a/src/index.js +++ b/src/index.js @@ -9,6 +9,7 @@ const QRCode = require('qrcode'); const fs = require('fs'); const path = require('path'); const Jimp = require('jimp'); +const puppeteer = require('puppeteer'); dotenv.config({ path: '.env' }); @@ -108,10 +109,6 @@ const generateCredential = async (req, res) => { const { dni } = req.params; const member = await memberRepository.findById(dni); - if (!member) { - return res.status(404).json({ message: 'Member not found' }); - } - let avatarDefault; const qrUrl = `${process.env.URL_BASE_FRONT}/members/status/${dni}`; @@ -144,21 +141,21 @@ const generateCredential = async (req, res) => { .replace('{member.firstName}', member.firstName) .replace('{member.position}', member.position !== "MIEMBRO" ? `
  • SERVICIO: ${member.position}
  • ` : ""); - const image = await nodeHtmlToImage({ - html: html, - type: 'png', - quality: 60 - }); + const browser = await puppeteer.launch(); + const page = await browser.newPage(); + await page.setContent(html); + const image = await page.screenshot({ type: 'png', quality: 60 }); + + await browser.close(); res.status(200).json({ image: image.toString('base64') }); } catch (error) { - console.error('Error generating credential:', error); // Enhanced error logging - res.status(500).send('Error generating credential'); + console.error('Error generating images:', error); + res.status(500).send('Error generating images'); } }; - // Rutas app.post('/members', createMember); app.get('/members', getMembers); From a0ab0942dde384063962c94bd9480b4a33e19f25 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:41:25 -0300 Subject: [PATCH 40/73] rendimiento --- package.json | 2 +- src/index.js | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 910206b..e3d7a7b 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Deploy express js to vercel.", "main": "index.js", "scripts": { - "start": "node src/index.js" + "start": "node --max-old-space-size=4096 src/index.js" }, "dependencies": { "bcrypt": "^5.1.1", diff --git a/src/index.js b/src/index.js index fae46b1..3bd2b25 100644 --- a/src/index.js +++ b/src/index.js @@ -141,17 +141,18 @@ const generateCredential = async (req, res) => { .replace('{member.firstName}', member.firstName) .replace('{member.position}', member.position !== "MIEMBRO" ? `
  • SERVICIO: ${member.position}
  • ` : ""); - const browser = await puppeteer.launch(); + const browser = await puppeteer.launch({ headless: true }); const page = await browser.newPage(); await page.setContent(html); const image = await page.screenshot({ type: 'png', quality: 60 }); + await page.close(); await browser.close(); res.status(200).json({ image: image.toString('base64') }); } catch (error) { - console.error('Error generating images:', error); - res.status(500).send('Error generating images'); + console.error('Error generando imágenes:', error); + res.status(500).send('Error generando imágenes'); } }; From 984c4bfd63c389d6251ed1feabf5fff98f1e7f76 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:47:06 -0300 Subject: [PATCH 41/73] memoria --- package.json | 2 +- src/index.js | 28 +++++++++++++++------------- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index e3d7a7b..7e8aa5a 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Deploy express js to vercel.", "main": "index.js", "scripts": { - "start": "node --max-old-space-size=4096 src/index.js" + "start": "node --max-old-space-size=1024 src/index.js" }, "dependencies": { "bcrypt": "^5.1.1", diff --git a/src/index.js b/src/index.js index 3bd2b25..feaf42e 100644 --- a/src/index.js +++ b/src/index.js @@ -141,19 +141,21 @@ const generateCredential = async (req, res) => { .replace('{member.firstName}', member.firstName) .replace('{member.position}', member.position !== "MIEMBRO" ? `
  • SERVICIO: ${member.position}
  • ` : ""); - const browser = await puppeteer.launch({ headless: true }); - const page = await browser.newPage(); - await page.setContent(html); - const image = await page.screenshot({ type: 'png', quality: 60 }); - - await page.close(); - await browser.close(); - - res.status(200).json({ image: image.toString('base64') }); - } catch (error) { - console.error('Error generando imágenes:', error); - res.status(500).send('Error generando imágenes'); - } + browser = await puppeteer.launch({ headless: true }); + const page = await browser.newPage(); + await page.setContent(html); + const image = await page.screenshot({ type: 'png', quality: 60 }); + + await page.close(); + res.status(200).json({ image: image.toString('base64') }); + } catch (error) { + console.error('Error generando imágenes:', error); + res.status(500).send('Error generando imágenes'); + } finally { + if (browser) { + await browser.close(); + } + } }; From 9fcac9163784b3f4d4b0eb44f41bc8cc71ac764c Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:52:02 -0300 Subject: [PATCH 42/73] timeout --- vercel.json | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/vercel.json b/vercel.json index afa062c..d79b4bd 100644 --- a/vercel.json +++ b/vercel.json @@ -1,16 +1,21 @@ { - "version": 2, - "builds": [ - { - "src": "src/index.js", - "use": "@vercel/node" - } - ], - "routes": [ - { - "src": "/(.*)", - "dest": "src/index.js" - } - ] + "version": 2, + "builds": [ + { + "src": "src/index.js", + "use": "@vercel/node" + } + ], + "routes": [ + { + "src": "/(.*)", + "dest": "src/index.js" + } + ], + "functions": { + "src/index.js": { + "memory": 1024, + "maxDuration": 60 + } } - \ No newline at end of file +} From be35acb14da583002d2572596c2c71516e58920f Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 23:59:14 -0300 Subject: [PATCH 43/73] limit --- vercel.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/vercel.json b/vercel.json index d79b4bd..159a2ac 100644 --- a/vercel.json +++ b/vercel.json @@ -14,8 +14,8 @@ ], "functions": { "src/index.js": { - "memory": 1024, - "maxDuration": 60 + "memory": 3009, + "maxDuration": 30 } } } From 633b7a100a13e2a61d09302bacd8a5d432d71e7e Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 26 Jul 2024 09:44:04 -0300 Subject: [PATCH 44/73] se agrega exportacion de excel --- exportacion.xlsx | Bin 0 -> 236018 bytes package-lock.json | 158 +++++++++++++++++++++- package.json | 3 +- src/index.js | 36 +++++ src/repositories/MongoMemberRepository.js | 35 ++++- 5 files changed, 229 insertions(+), 3 deletions(-) create mode 100644 exportacion.xlsx diff --git a/exportacion.xlsx b/exportacion.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..4b24cccdac7d41510ec01132e3adb5fab8a0bb85 GIT binary patch literal 236018 zcmeFa-;X58mL_yz_o<~7NbrD=kX-e!+Li9Dj&S$*)!Ut`_~8-Z6~A&KGK*U!0m`n* z>dLuUm9?2!eQ(bbJ&Vv>Ru?qf1;I#2`+zhL2zJmcVjhO4`XhMbWqzz+k>+3EGml7j z`#v`_kL-tKX&Zcv16x;zwtN!%^yAd^WXj}|IwfPPygzVeq{dl zZ{rVtasBy!aC>=u_xaCnZh!Xm&CSoA{^H&BQ}ZWZ{(bz4zP-G?ySjP*)syzq)|2S+ z{i~bTSMR_1>dE=p^e6o%(cS&U`_~uOH}5aMdh*@n-IKq6^0z+wa(j7wagT@Y-d=sU ziy-Cw-B(ZE-rs-t;`7h%UcJ41cX9Xh=ELQC{LP!2+jkfD_|MyKKL2p>>Sq_^4|;q~WIH(}vbX-V-}~AB_V4`YN9KS3 z#-8ljl|P*27he>z_Wb_h;usdbzP-#z` z%d&CSF69+~i&wAkrh8p%nd!9O9zDpkK>MF{+2dBHl``IvpVV|7j7Fo*;GoN1XaU;) zOl$altD6pE!WW=DzEi`eqv3emC42$e^>zp)?u7k~Ks|L1@6A4dPjAODko@sIxtHy);~YUnTi zhkx|v|I4r4KzuMNeG3g=~lD?EWnQ*WX=SyKtjR?!4!>Fdi=8?Bj2fuDiFl zAMdXmEic}_BjD=h=6ZB<>+FDqY0K*2vybn;aW{VZ(Z+2rF1~fOJ-&EPLz{j40IT^x zO6vRZ+e=dO^!nocJzS9Ym-mtRyPKa~UOL|H#nlz{>+0&&?akfIoBQa+RW!P|a(2nt z)z?I%>Y@47JB-VBu6M>zQ{SwfN28l-*IQ36zhxvoh>OBm*?-RECw6vuP2D)V_;`Qu z&L#5f0^W`_Fw2Ykw=N}j-`&2laoOEHM*5q}>zgQheR+51dS-Kr_qAj%E?}>m!@j!y z?j0j<@2`I5lDWLNxv`Oxo1cx}UcCF@!tSo#zqPUX-OoVLi|F(Q&PM$sUES~(V*VTB zaPi(d+|RF!Ct2BzW$6JS5v&$Re@9w+nHy4+Mm4QhoOa1QZeaLKI zU%_tgTlj0U{ne8pCNbB?GZ$m+!~MU|L{Bb0zCXRhS5asGUt8$Ew$M-hKX0LZ-|}zX zE?1@)R@yiudtbZoyx(~p?>AT1*E_Q&U)~kI_Z=pn*HiqVd9DbnT$T&54{!0)e935l zaNpcs6wgGrH~0VU)&1Mu+Y1vwX&1}LZ|)AFzqyM(+#qJtD*o6h+cXN_|9-#P?3i`P z-g4Ys+^=q4@BcV4fBdlAD8&?7eN(Jy9~w%GfMXj=dIzC+w;$42+bDH(Ywbd{!YEQ} zW2-mY#n?SisP=y5_4XWjTyK`WhE8i%qM(JJKSy@*gMf#QEe1)yrtA0i zw{`tK`uSH+2A#O`Bzkr6;j1Tau+qiPcONilcg7dIxc&w~(O37kd)797i^WG;z45@! zsy2cbo)3mT;}5rY_mhjexBD?H{^~GP*Y8bBd;Q~1YRLARc>#wpIZlhD4~qOhrUf{{ zLwot=&E>0md$6rPF@3lH&x0kr`FMYMyLNcy^5I*5J5;@n-O@0;O^~3WWJQIp4{BtzrBGK`tbJZ)$|tgeqlSn7DQ
    D;bcOUj@e|`Dw<@K4dfn8&RpG0p#^}?DQ%s_!t{_%ewzM!waF+Pg@y^$p=r_TL1 z@PD`Cvj3RzQsPS({yy}7sbbMv?6~ZoFCKrGBkdP4e^Gf!>BCn+liy%)XzB;5aLfd3 z&9!@rReR&O^Pn6?vHr&R!_uGmfH+WO{txEAtJ_!Cmj#W@gnD+fg>8+n{jl%92(12z zv1(wDF_8OTU&HU&|KXlYM%2D*56-FSwTH?2H|zzK?Mi1G&5jxGM|O7UL~(QUE&e7u z`_RMG*ZV*7b~Q#;KT-VAn}>BsF)+nOm%SHt^Yw3IpeKm>f4tuBPThULe-+=shtu1F zU0>h4{_gPe`ffkr?pbHnFa~-3etY>Qx_bSKhxJF<6Z=nSzeDoiA{S`$m?2vEVB%Ud z@Ph}ud2~NpmJi3x50_6AEyHA&4;KM7mjLXK9SpZw+5x{evir9-AJ;=qUBCaA>9Qk~ zcXyd{<#TM8?H7u{f%*YmcK?fTmmPWvomVFwb~tY@u=Ls$_7{`Rp6LZ;Wjpxx5C8T5 z^`HLDAN|Pu?{Dq5gYSw>ZnK&E!#9Ep89TFGeSEIN-G|%Di`PX~0q+JE*%DuT3&Z)t zk{Vv$ygI$T`Ed9A44ZOy;OF~~@22nW@1j>XAKyc&8NmG?Mf-o5T#8QjNwm+z7~i}` zIN)#pgO4}&fA7!#*)qfA;q6{@;K3U;pm@$Gdm?fB(hr{m1(s zcX#`L|MNfm&kxTOU&BF-lP}FjLE4x=CSR|WW@;zdV zt%5_a`VBTNuD{#=aq--qnEOB2f1rj9`xc6SA?jf4L8*ZGip(FJe2G~IuKxQe{=-ae z=C|p>ub#X|a!c_Fdt3t=^VWB5EE|h<3&Ee8C(!QKH@B~mOk)qk{*O++yuN&6XbZ3I zt@-!;%?JG7uW#<}Z{Fd@>#K`zZr)#9NX{tO3USYdXP< zwfPB!4nOzu_Wxnz+tT*3EwQGv9xpcf#hXK87au-cf4Bbl?(0izAe+3O!`PC{c6yAi z%|eS;f$~-lQU8>0dPt{O8;!8vRcib7$E$1jZjQcz%-6rDdb{u&?k~Q+zAU`lvK937 z>-`LQR{rHzPpaRm%hy*Q-wjIC>D9M4`+4%KC)MvgDlG_ASsJly|K#-F|AYVR-}@Us zGXMLx_Lj|=y!6A3Tq*81X5-+b{4f)zsbR0N$Nt_VsYSP!Z?JdM{$iE3_U6DCW$eWL z93xiPTJt-4$aFLRQH^f-_Yc?!@{aIL-u&FSuEuP>GCzh$Is3X{dS*sSOPx>1xg+m6S(I= zOr4(g25}sB2jx=*Xhb0M<-q$Z5@j&`o2IaI8ZU?ElYA5HhO6^z8L@yd2{_qqCfj^= zp1ow$1Smx74M)E{Nd`&3`?TLnAO7hwIAf8g!_jgR<+EkB%ZIxtj@vE9PZ@u<9jZJj2&Kfv*!4SiXHon!C@`7RG;jZ=?ONQ*fn`{UEl&?!; z4L8R5y&njGzqSa_PWruGH|>?8_5@(i@;u)~Faew8RJwS~z~M5RZL?^Ut@E>*tpK#5 zLLB#6fey}C?&-7aX@o%@Z?+iisNL&|!c)et@@zHQimo$TffSLD&hQN-)T6CB#y%s%Jdx_}2aB>znBE?!)D)E2ObsMA*T=rUAC_ zzDDvECfl3ny9jeM=9HVKpN$TG_C*x8+TG9c{ht^ART&tfYNs?y*zU4enYR1*QsRU= zXG9>ky2IJ|?kr#HY(`I>oMzh^JAo+KnRJs@Kg3QJw;Qg{^5JX~O)!lXALb_Nv}I(c z{7hgrvo%TMF!SaFPSP}FUvpN$NmGU-NjFVQ0AEI8!7vX^8Pr5mB1X3)1_A^YF<`}e zgN}avBL+R&Y-d??Iy_&B1wb~mEzCs&ASxOpu#6!Zu((f z4bC9#n75MYazr4v3HbE=^7(MPQ4?^)lgr_DJN)!3wH^~ZT9KmF4Y~#ywR5s3#p!Z* z2DcTyOsCH_ZOU*rFYNZyRy)}KoWY&A9bjQLb7YsWLJ5yuHm`6DmZL<+od;~-Mvy``Q-O{*%i(CVH9-SWbVe$qE!dq90~n1pY!X1{ zqJ@(Kf&mGVR%a0RWMW(h&f{q?$~~!g$Wcu)G$pjHh${!_;?4lUwqA`Lj6zgR`+N+U zHqEl#c!OXG58=dsN^ZpcBnfqOCL*yyj;0yhmvz)l)b|wZaF-)`us)MHYeovBSbv3? zVXF(TAPuRTs|v12nqUkwdTDzwkXd*kxaax#q#j8VP|yd()?aB5IGP4S+rbwi25N){ z?D5QZ!%?>6;T#KQwprEIoCZ>jc-l{UfsZQ_fo8}lHcgSrGQpAzN zL(XUf$pZT3s)BRKxg*=1ZmZi)y0sB!n9mk4%JbQm9mQXL6(MbNye;m=1AJ1V(nwH< z3r86ogHn1izl;U7%hqC!Ck9b+0P}GY^a52LKKJc#Iz-$7mRT(5RKV`F1+@=9EDZ&^ z=8Eoy8Nfa1o(>pe))$DN$4cmhyo}o^5YXcofCyPAZfdrNEnhLl;uQarWza}avn_mY z#PGA{!}Tm%<~sai!M}vpsLKQcDH#&?2c3|i%|u|_LR2bxh9wFX3O%u7QvrLegslN~ zcY?vtIq3@*XArU}xvJo_65RFR2u|ALw7Ptg3z6kB6D+NXB*llkvP64W@-H7htsx7LRIVHA=;3xn#X^^npvFV9b+;ZyZpVm4j)$WymbTnk6C=@L6jrKF`$^n8{8Q;& zw4X`)(=9fMU?f=PR8anXLuwo`@Fc{MxuE;~(2_bACESeS9y0c>+lmp4jy{iig9LG@ zHow|Jr1~r$%T-=62dcnqo5OGTWZKx_78OQ<8Y2W-a9};Gdqpe|`zPah-KGFkG5}pL z2s=hBvcWlKaA>h?D}l|JBp4+#T~Ml=Vnr0%J;nY2@12uGptq+m!IUB#zn>go(-}2FIgTFgDHC#LFi5}d?pgH zC%Bm*E;mH*q%AA>sbD?RjNN>Sm_^8~nUk_0LU?0N6mV04d%c)uk^xprY6=+VGX;!# z92F3I3wp{Nn@f6~UJpCMtmmlBsFEKH8w>1gv)yV2%*0?yW+Z8^9kSP%NX&LC6Iq>L z#)wmySf+yYFvD&hBi+CZLbqVpgNtbCC8vAL7)%y0(VebLe+zjRuaRJBI!PRyj|$|W z!Vh+bkzDYQQ4oD*dBE^zZtkLX99?|+A8+m|UwL(L`#WZfC$0!ahAT$MHN;l)_tv_u z-R&bL+Ly0tB&gwXy3I7-Xe=NnR}H4*Dkc<@h2nQ?L}HMuf<4`AT`6WWQUKm^FEp>t z1s(S6b5X%*#{}bJtH3;FOi*sJS|AS-elS@dnEF}8$0;hcpnwyCa{Z2>?_H56^F{IB zrEOz|RuSiz1H~zpx!pl5%l46=_WKdhv*Gx+kjR;@C9XRbc(yymWcYGu0t0ZpcW0$m z#kV~%@RFfOW(>!nMffRV2w2QTE3-Mdi7-vemo$|J+$NQD!0u$wlbSOco9v;fITr=o zB;|3~d*BGOis!HpSw5Dsw5G{+Z(>EXClBjD!2N3PYQNemGOj9jjJZ~Yx?>KPwtGp^ zL&$*HFcMUe3OHOMBlS%7w#I^Vd-VoXk}FPn{m|@}iO8^5uVA13vo&Z8d6T|on>^%N zK4P(~CSoxYs)%>YG1xTiC2>oGF(X02Vf!i4LMKRms~H@Y zHySQi!*MpzHNFv8asd(cRxq$B&CkyB33As@k(3P6T1%@D^y`!Ou<5A`8+p)J&p}&xdj$;d^Apxa5PB7n;bF9J+ER@ zYypZav$Gt5u4=!vc&jl>I9XwL8*`V277eN-2_}M0Xn!ITnMNd5eaO4&${adXq-Rf* znlEy=1K#@lQRrM%aQXIv0Yyys2d5U;OfLlIvll$Hk7Gy`XEw!YESEWj57~-iNl6(A z3Wg%bRtW1oW{{gk$R323us+k2zKMCb7Yd!73KSK)&Wc=I@2b^4bm(=N^ZHcU^tQJfBoSFH2`YP@Enlp$4FSioo=+#>ZT6xT1u&3`4FhD?2R_wI1dcNJ&RcAe)iP@Y=CT zDtn1>fSG_>vBG&H29E`de3vysiuEbO4#Os`K`>`26QQf&3W-x00)-gkp9Oe!T_oKbpydT-^@X%A7me@0CLR1N6@0x ziaTPtMuM6a`L6IIcreBSJKJExy_R`tK;>X0IGhoR%x5BUJOtCQr4=D7LG1cepdRaB zw~lP0G`NdEx~2#ahF7!Pmu@OB#`u|dla3x5UC7HE368U6Luo6B3&{l7G)nUF(Xg&qHH`NBNERawJv75y{^U-4C$ zb2>tek)X2G5NGK4B*eiHCUNd>Yxe2a$RDew-r~uLX`-Zc+(H~NIOS10C#7?o=<%MZ zsP194-FVuG2cgF2q-qm77X{p`=GVc}0O^7<2n!Lkw{GPC7rnR?OcSGt6-kv#jGwkw zoFIR))r-YZ9|>wY9G|asA|DILclz4E%HdB^YzBpfUxXqv7za{XIwMa7Hr|*s*BhCN zXWaClpM*BO=Z`|?qJeYp1!LS_6hEn*gjfj9GrI}uaSW)Uw+YAjkZ*+p&zg-p64Yin z^CjOX(yV3?xMliI460;7jAamJ7ypie$UNVk&(4Q0qHgW;MQ8YZ=)S`D211$N3_fQQvCbLs%LMN8$1wq6yU-SP!ePC*g`>0WzI=ZpLCuy!gc95-dII(O9~7JIz~}}( z)=Y#3_p${Wn0#y%8h5je*oxC_?5+kB&P55gz2L6L)*})Ta2Q)j!Z6?5!zkx!VP$FM zA;sf%vmbU4zcWjqhZWM(z=n3?es)qtit&?tVv`PzTruvQk)S3+gnlqNy~viC_?=^c zdh(GCsv2j67TO`(#X5$M@k{%jNz87(@gP4d+Z`k!FFqFq+@$0;!X$>UCdz5lSjjja zD;cG%WGAKy0w)|s#1>2sUq+RrQ%pr8K|MRiq6Dd<%gv5CG8W+TY*zDw?HDYwFWSMK zB9V8P1B;vpR1g`i%(fKHh*v%_ zn5rw0s2NPK5{ZwZ0l!>ejp1q#_fU z&FM_?fX5ivIv|Ur8w>!G#wom%km<-p0XGA<^NlgUw1k3v+*b>c<@IG*+~a)NDvX+N z01qoI9Pm*8dc-KV%QGD1NHU4G=cqg;G14(Ve{%2`#HLRSs$vO>K!mLZYkoT1V)qbv z4lglpL@|7C?$@d4;30{v0_N*rfwVa(+_;A*3b;waFJ;U`#~cW)EqEB`GZTbz58LU| zuGJv}w_=^$5|I3}%Ob>3vn>+1r`dR3#9Hz-%FyjL(J;c<%R`CDN<4WiX%)c5Pj*&K z1(@1dCqX^iz*ptr9t-4jh~q7qd^9njl5yzf;H;2|NaS#0OA2T4qBi0)-27Cqf#WTY z(qaB6bS_#rDJK|Eu7};RL9OVN;5?KQ)T7K&T19d3)22ZT#|g1~U9$)(TW@n?1NK=i zJRoDin$Q~~CI(TG0qd1+FcnVZVUim9!)^k0+a78^>2|uoq;N*}VDLiAXi>mT1n%=< zg6blHTF$O6M3#>TEbVbbsKT%*#{x~cMii@&Iddc^I4frL%Hum05HbvE*^mZOQ2>XV zgJD+@=&zM3z|{~5-}ShxlEl%OiozquIfI^F#^WOh(nPfQ&z52 zyLhRIdAec}h!k2uWZc%tbO|43FBZPC>|Ra<>@g;G`&jP;YiZ6&+a`1_3b?t%gM>qq zI1LqRJai$Ve9kVz+=F>o1j#_G_|X$~R(9u=zcL!0pXIyN=Eo7Vz^Ms*e&v`l6{|Ge zl!Jv}qA8{&26H4R!@3bdEYHqOIp?yC{kDK$T{(6JQc?>`>)>8rCIbCAb^`PrU82@a z%0-CS^GBg`QNc|t>GC3`((fcPB`idiZ|3Fw#g+h@NfMwNxzzxm(4ljl7oUVje7Mhdr2J>E?`^IoTJ?-eo^UuJ1r|o~8o! zSTwtRbJ#iLp3O=<{Ak5pNSf*lKa8Fyu@8pu^-UZQF%>mm2J zed*bCC`{YSAy#LY<~Ary_^=-PafHttVLo#p9Qk#o9@*X??hNw5B1T!{TFgC-K4a>a zOTX&DpQ0-_(K@fp?1QAN_^TgBpB?_-3m9CS)jJqr{8y`5^YXWXFlg{w;V>z}-I#nd z&NfOJwcczIHE@?-5hx1B4VU!;HxmOZzYk=bgi8d8&@vCKU5i@?((`fHjiZ=jun^pw zR83nrUKm_Ea96oM4#t>|!&J0SWW~0Sm+{W`Ebd6NTs`C=i0AVtdHcXk3Rw(Kw;SBO zfUoC^2nEJ>XB$%&sP)6}be#t0Qtz zz|B(ba|^%2y5({TsKy(aqJoH z8GBoU=CNmV)7Y~D?y+Z#f9x6O8+%3_G4`D*!i}GHXfx@fpe?A#LpEZRdp?_GxMabU z_~K{B{OpN?5C%~Z0)^H?dtsT#Ya)ce-Gm?w3?V{0f^$JP5JD7i5<)O$Do9K@BlYG5 z=OKikjv+)9>+W!*6xU(Fz0l0fk)TXsp$3p$ zwg$~Z&*-M1X9e6t&lofGxaR_%0QcuY-rYC!EbW+~ucF%>j<|wP5OXF%$Mf^i`5DUpXmR$b09PoxZX(>=_>3CIzGgod zIubO>IffP~qJewhxwkR!IE~lCN{#hgh%Dd0vo!a>?*m36@DTrx<~aU=h4C_fiG*}d zMtY};d*dff9B^J+D9Xahj|64Py=A%+A{fM)v27;NhKT`{R6$l}Ke$p5kpZgkTX;+a zwH>#E3)DGl+DXG(VWO#V1Gk)5m-a*-2SWTAQ5bdTM@dlFEbUmXW(rOP#-FIr|sN`EcH!rS3roNxhUWs zcR%9IL|4ejha%WVJIARFMh(42SuZLM+U;(g3O)7NngAD>!G; zbR&&e1rLpE4Vr0WqZ3nfFJS0$(br8QR?@Jj+d&}~+0kE!EFX(l+Hox6XNW}s-c(`A z4u`qYb~->Ysv2(?b&4Ao#`Wu&MAidsu=i9qK@eDS2Nz%lqkowQZsZPY>*0>AK{Iy< zjm?ix?p7}Py1Bzj?zz*)^uyocLS%Uz5f;}#9(G2nxMha}U#$+7&ZwWtDvboS%}k8S zWIfattt<{#NaNH83!4~WB@;|~a;RrBY5I^z18WJ_Nv6!HU_CUjn=eXi2aLj;ltqqt zFnu@|1>7{?E^0me!@aZ+QSMD=0R(mX3O(+Cb8(T z;EGfOewm4ZltT{JF<4486M^T&Ess$f>7p!lDnR#mKdS9Hqp<)99lp#(0q1xN#<-kq zoICFbc^887ef9!7V*Syr0+aY@4}2PT&3$ANEg1>w87_fG-FT#gk5KBpp5P?#vDr!2 zNYTWAN(SI6s$eQ?CL&F8CCU$((2CgygA-aWC?=11xbPS)=A^T^)iJmj6$RW};QlvU zK)O{=@6=d`EH4*WT=?^^Vw7Eub0ICY-NV)3{Bey01;hIsB^R8>M+NF(fE}oWFBVS5 z7Li9WfL|++pl^hiWK2<&HRKo08Qlt}5a*(}n+B{YXn+t9icyFKUWhC&4Om>5237R2 z%Rww;pmqAVomy$Ys8e&DktsX6G!-~%0V$C=LY)NM7b{`oi9wb9A7hU^w7kni=228& zrG2#!NRMV7*jl6TUN{;dTDy6`Y8oEE$l!8m9)pF*@~kEV6{bNIj_h)P%-r3CHH|Eb zM}jh$t}?1)fq1Nd9pJ;AA>Gg}VJ0Gv8hU;mU(&0QTvD)k=xwx#8iexrbJ5y8^sFX^ z9(9)BZD=4$Wch}krG14PRn6C_;Us$#8jos*wbdi3?d# z_ED%ZF`%mVQF%9HfHM*KkXiR4n!*O5>b}Iorh@ml0;B?VLqd+;oE2_#3%SSK1YnFI zKp%A+G}U||FXNp9SllsgVHJ?81Es0t%AAaE=&SKr=5ni0W07p0b@V{Y+7TTBcI?xy5466SlTfh zsKSX|jw>ZNCT0v0kJ(62V;m(%6aZ(*QOZj`!?9pJmH^FGB zVpaw?EO%C;0L#NU^8Bo}Ep5b=6hJNdhRJ|MqO=5-q%)+uqr9=0(Q?;KMPm;S zY&{Zl8+>47=cKi{%`m(;WUbxCfHB}fx7ET%xxCCmUdG1*mUaves;FR>V^m2D&m^hG z2^h6M5rTrOYuuN^127hWTU^^+UlrJaIXGG28*)UVDP@6T1xRInfl7Vbm%95h6}*Q6 zwhAaI+zWl&b0e}OE^gWg9^1-A0XGG>M-2tK=3-DW!wZq+bqZKq&@Jp$;X(YgqeRGD z!|{Wf6%f>ZDyXL@2+ZsyZfhpMfXbe1<2-O^9?nE$hJtG*9;{L8so>m0PEBJW&<-s~ z=7h$*HAqbHmha1@edmY^1|x3HspJ3g2ec5J=c5!y? zdik*ZGjks|YdjVp_J*8gXq{;3|6G9ao>~Tm5E91D^Q$*Z+d^efm6x^yyb86ZWSWMB@H5 z!_Yd-P>v_15%sF*A%5CxhZf3EcCbrQKDWQtbCS;E%9_{m|aFdB8NgH++Jbejprn56a;0o!;WZ?up%a%T}K z$ay&fk9-v}>~Wk4k+5E8P#<|lnOeldXn*WU_XWlx5eL+_xfU*-7*NRptlB%F&o2{^ zXXmHq>)8->ERb7VTO)|7o8=IN#Y_UU@No7h9p;Qi<>HWUlZ(b~7OxNeFnaB*&hTq6@V9rRaXbYD zX#K!kNii}s{VFPnpY{}!BJaA>OLajaD06BG`vT{VyDtUlA&fy)1BR1Rp|3U*nL)w` z*6oizs`)vgQKLJYtSSmP`63wbrGxvN<64Ph!TJ1Afw>981gPSZeU5IS*0ssRkVWxG zP-VW-YWUP_5vdDYI3{Cx$eFfmFeMXWEKNg!;!GrtHrN)4l8$bwPX*^;f!#DtHg|$M zQ>-ZNhz&U>xhUXf0r$MI8c0+~68ZQRBFpV<2uKHnN52YB_BoCP53`R;FKVODsC_&F z6?ST;t3{l9#38I4ah!Guo>|I7qJP9$MbC)aO*fCYjYbARFovFsqV5rACHEtawB6c> zGtT?nGb}vjRS>ezp(|Xr(Q4Ja_K~1w$Pk8m5N%M^OOGcA)VU35Fy*M@Kz7hi%S7T3 zWk)}Kk5mVokks3)rh@g1yxlww90W->CuLDlDO}WE6mX9`_c=!1-1|1rxX(glc{~I` z9b@pT5M-aDS0+8Jz85+Y)M$$%3MNjk)Imgh7gHi4)8m9 zI6%!ea)8iHxoN7bD-t1?0|!uAtaQ?fX>%bs@7K@od<+SyC}f`_Vz@93cDQ!oji8n| ze>p@cLpXKVm(JG`Y#IyP%>g?Uh~#X#08-LpGZ7f30Kbuk0(R@oW`NK*z!maRb5+(! z0ansa0mgYLz_4Q|P=zD=9Lhq70f#YC35$&cRh)En=AsDD=lI*vKqSC~F98;rrUb}o z7Ohd!2j|p;EK>pd!%PNPO+~1^7#h~Opb>=$g_%SN_go+ykGUZ2r-`P5EJT)XE?{Y= z`KRBvlYrRqt3r!?j&+$L>NqkW$#Ek=jm#Z4&RZGJCtS|EQF!1HJsgN(1_TA&oU2Z=9p1JZ#WGzIN_v2@A zVehYsEcQ7dh15`2DQ-dGYeqgwc0NO@VQuDTfzF`^q#FA6puzcLfsI4YaL>>`MuWL| z`$}Kb%nz^iSONFgGX`UCF6gZ7r7xu4y<^YfbnN&04cw)bbC*r3a975ey?3~of zX$#7IqpyHmmr58&)$6!aC>TW)fmk6-aNYFN2)oPdPfZp1=?`|f-f%N}RO53-V^=L? z%W_e`O%Um7vp{GeUADF~WSnnO5Y#!&mu-;9i%aO%!(G`wG&u~apdfzIxFh&&>aCT} z?f0DowZaX)^^&^+a&J2rP&M+M@PUC$L>@-oG4KlXTqp9V*5`~Kq{vM2=PHT@&XE_4 znHJi(C`orv7J~DPyrPa8`6?PX;FuID*dbX=!)qf!;gEtkyXe|@6eP|wpy0CZGE5Ar z9Dfu|4%*vHWRB;bzJHDkg`OU=oC?rAGf>+pqHiIqGbgk;*%I;{b5X!O{M_SaWQc)+U|;6UP0 zt#%8}h;VKssM8^KZKLG|2?pu}3KDnRJr~HtK&nAU5%0&dzcrl5_})-cXH)iBJ>8#W(Rv~j>;Did#Np*98&?ub#oa}YS1hQ zo>|10MV#z5xVlaP)f0m$yBZb4;!rAjCK4Yq;*<9NJcMSEP8E;RO^C?VXChk(I3mFk z({obUY)OUo$#YS`%?=(B<9K!lX>FOe5LrH>!qUQiNEL=0a1aYs(y*CdUvDsKe>w{D z*9MyqGQp2UB8q!w_4NkiS>um``2i;&6N$~^&)RxygRMgI=rg)$^jQJ-=rhKQeh1Zq zS`s{2$jkdipQVLIzluc;IE=Nw;z3=Zk)W2SkYHkwj^rajuFgOG{zk*l24jsq+?e3l zvxbMUpKNxh*xHj>Y^u%Y*$Sn4*gnl3)&88(h&IHbXag(j9(Tr=aZh`w9VhRykazKo zJ4-ueN~ofX0}fK*bbc36kD5oxC?o;k|JOcx20gD|>thcbM)O_QIBHnbxVL9qyYnoVo|3MU1s4_}Ccqy;5%*dms=|sR(x!rD{&G0V&g2@8vBIBcGcg@tf*pKJT7z(b1eMsx z1b!_a6CR@jm_TrNOrbd}SCu_XU_}iRT4@*IU;c6yD$QdN6b8bCh){(hQ7nsz0Ivjh zn#lY#QrLcn@^Bnp#uzkUnXBPTT~~q!c3=?pI9y3lMdIkg*{~>=lCLK?t=k)DHt$p) z@o~Y{qp_eetBpI3lhDKlE^tqHxWFJYIdtKb>&YH)fq`BwFsxyEsG^kZ7RR>|+!>8v zvCL860>chbCuFKUGuOI^?FSne4ySH>E|dWs04gU4R5=gV&#B2gh7O{JXPwBJ96<^b&$$4TPwIknI)+q;QFN+Z-ilH9!c4Jusp089YUm z^chzkLxCwt5hH&yxNuaFxJc&HuaU1_yR;0ZK@|2Jrep<>GGtQHd`T&oCm^*{7q!QN zWx!w?LFJJrZw-zaoKIa85G@PpptWaUh3dYl#@2q`^ibwWyG&R`up1Yr;e0t3`V zXrCRA<4Jy zKd)y~erA`(H&;$QU7bI(u5uBxRmDLuanQVlJrERZOT?i90SV?&3w2^?GvcFw*WZCh@EgTItZ}>Dn42oEOX}g4JR@JXVWAhMOKw zmx2D+7~|Z;WSX?CSSfzn5i%T}z@k*^myK|o%Z7PqQsi@+f*rMra`OC%331K<iE4k#=-2pQ5jtBlfL!PQ%?I=D%~ zy?ydLPZI0rZOF3aqYaWomPBTPFBF|z-u&xlQft2GAV;Djc z3An&Y`hw^RTNkI#n1{1MSk*SpkB8DGzyVUViwbaoeIRf^RCP{b0)nBy=@uloNz4)) zU};_sFibORoaKs=RIKw)4>;{9(NEupW=m08Fsq*dqw%Xw`IZTMt&$FafnzQACG7EHHtAUM4V1t%vv* zR&2G+kvP<+Ynd{MtOkq$!wz-ohZCF-t0m(o*k=qNvf=?I@^DyHG#F>wY=_%Wq7F7G zSXFx3dey@nlm5$T^1xarW6!-zau z0~iB>oBC{FSArGsaDYLE1E@RF(=&JA00X@oVAxU9f)!D1b0p3vgKNcPaSkRh>;;Yq ztS7Rg1`;sJk)%^V$`OcR14A<{CIpsPodlCl24;Yf-jImFl?uSX2g?zG0u09h3XgB7oAa~umqgNu!jqg4_6%_f<3F>c%%S1*EbW z2u+5gQKH6Ua(z`B@9M&|QK^J)1uFTs>IIFj%a6`g2RB9JB@IPdxcj1`#|~AR&w_}& z@Y*7_0+jeo+`y4qRJE368@NF*x9vb&2}{m$%~7);EaL?JCMw*DR|>YErD|x*iYws4 zWun+gxFnIH{WXamr^a01jeBv@6&{XIpPzsuIGJo*J^pYP`c__!usp3ybO>XLYGqsO zkH%Ke62F;3#xK$p5-7wllL?qTB!HQkrF&1fY_CvftWRY)8f)qfu5%n{uI+)CCT#8m zT?24OG=d}Ut!k)XziF{`Xe?<~h%HraEN!S-c!kyeRRYP10Z7yPbfm+A1<^mO11s@e`9T3*&hjP_0zYx6XxT)&kp#m#v%mktu zCGGv=6BjBgF4?`m;wfz6h~$%`E>xiI?(GQ{8k%N(9= z@FDYi!8QO?@&M(nf@K6SU9ikX9x&X;16v1_y9rj|0}mM9aPU-B_V9oe1rHGL#|B{C z7iFM#x?ot423Bk{=I~j&hs-0#b_c`Uo+yq3ZcrF6DsSto`=Z)WPk1aD?E!xZwnfYT*om3dnE- z1>rD_^E+YM;CJ%d3dS`|8&>o)=13fB7IgX`E9(Jof?+Nb!3Y#a(vTP|1TbaKo8nvc zIW+q&dq!r(L3XC7B3&YQ_F_Iqi0VHQVXy@APrr(uhimB&rtf8G%(b zW&!0Ykgmk^hFM^s*K1(dF=R-r7$<&{UFeyNjavQWw!q-X@64I?sHmjOnvWIi%9t_o zDmD!8NYFo!=EE5?0`}O2M`)feV~f zPONAqe%mYn2XNw~TZ?oHY>XP1!)Q3lXTx0Y_eQ*pL^??TNY$q}aTPl9o2kSG5^(cA z5LG>;oT*S>&aJc^2v{3r)qc01gz~>Z0fHlM zJ!H5*0qz421sDVhbdW*Wt9yzf%{L_oticRe5yymMSBPquyq%hpD6nacLNaW!FbA-x z;c|kgM%_m=u(J0PT=Zuz6l&`P5n3M5&?^U~+Pv@cw_Ar%Z#9g)z?;Tiy1?lU$SYy& zaU(>(SI@f_p#SsdR*&)rtmtCGu_$DXbbGz}p18nf*#>vJ*Zo3)VNVh@?`D!tGl2(0 zEI`?ofL+Bzz&cvXMF$ZW8%mpFEs(w0zy@3C6wYL5_JSo~MLd>(LB=EK^-ycF7A_EJ zem1bcqu5}D7!wXj;jZycucv{|5!@EC^oO&i#U=!%hq`TGI6mVg%G-^l=nZHATxlF| zzeB_EEz!dA4?3EA3IoA9geC}E3lwQ+heBDHAQ;|oov-TQp#>{jOc183zF21X2n_U2 z5DaUWAgowp!qF!fY;1zmx1e&7JZ2j=XtFXjNtz$$nsz##wmERp873@k7lNKC9iB7WOz z1-NY86!(y`0|1-AFziPnYau_Y8w17-$2fsrD|A^%t4sl^GlUlIAOH)+IpgKi9TqAZ z#F2WnkfNZy(F21kl`x)BXqo~G7>=WbfmsbSV4XcQV32Vadbo2*7woVE3=Ew!7AQ`k zXV%q-y#JI~Aw~QqBEVN@p-x4O2n<_*1rA4nLD*HOI|+c4y^j*F!H_N}z!Ht?F)Z$P zHPsK7`D%!B=Q6Fr8t_9tYhY`FT+V(tlhOz+6;GR2jjV%*2MhuadaVv>N=XzCJYb;T z95AlI99YrBgyT;rAA+3DM1tHf2MjZ1&ae@PTqbNdjq65%(dSzn%E*~mm=pji`xVs= zg11|O5G->wT;cMb45S#Ov7`QF4ezXi%1XcsY&f<_Iv>FW*4e`a27wEvYzZ#F<_-fF z80hs57#5~NYQ+-q+cpT;_Gu5|Sf<=jTVS)z8uepPI3^nn5meO8q_N_WKf62QSDO@= ziVMi(4SkZCiu4}35mm=1m$}O~k^w&B)|(Dw&lQf^gu#hHlyH+kK!yZe=bGd0`NJZzu>!=9ZZmSifTVljYQS|#xSOkg;S$Qd$PtYnG9UW36^ zY#87|P{02LGO$$aX=CFFoQxdD@C56bAf$bKjsEsQ2U}aSkPM}?Y&nsfm*4hIuSEi4nJ z0ico$F?{z1)4(#rY+$U94YmRaiVB3;V56HWfJnzq^4&N;HRa^hhkjOc#Qj%K?(T1~ zE&Oef7wh2!zm}g9j5~@GRTc>G`^7=}wz>;8gZT$>FBV$&d)LkOe5 zt)8O#{uZ}2vg<%?Y!>3VX}~gJ2d=H62^gvU-DAV4!!F zU|55zV1*e|j!R+d$K0Y(+i(&X(w(P{#e<+$!|}XEf7k&uSrPzsyMl2X5P&rd5`dvT zGw_)9G5j_>O*=^_?1bTG9X!L&ATukNg@fKxf#GMM-vThMVf?MYV#*OHl=_p z3xEc!u!jZ=GDg8vGK$3)gHd3h*C;UTD96wWET$Zb!a1!0O6t@?N&@@zy}8HJx6dHp zm&4Pc#-c$6G+dFP)onQ7ATk@sz%S(^gRQ|4WU%2e?!O7|L5jj2GO(f`0}@hDlBRAF z80aMf!;T_@6<H)9&atP*C|CqWIoAn*R2=BRI|>A6U=Ud1 zAy4sazFD2_HtPsQyjcfK4*Z0V2(}uyoH-aHf>mI6_|9=y1=hhs1O^pEfW4`gLl$ZN zxq$^9!-S3%Uc_&TDZw9V;miy7?+Ax52zEGKTb0iDMicbGp}Cf)?mQS+Nf2E1)vy;S zQmc5vj~(G90eiT?8Z?y@C3N#iNm0Q~4FQ1~37n{|9_m`?V0ft^0*|7G6>jWsxC{0H zmv8Iz1!^$NT)$+F&n`E$^KgRn-OgD^EXmOBCBZ5gnJREdU_!WBSUjyEeV1w&MN0+D zCP-*aGiQCVR}-uYl&cmVGH|aNGW2k0R`0(985roBFa#EMAv;!(5x;E%QPi92bS1U{ z7BCEXBEx96K^7ZZlCc8)B!Iwj4BAN82_L->C(-KmvxD`UY& zHB{XYkytTA#UzAN9f(W6#MA(0VBZv@!!~U}lp0Q_85kwgDal}@7 z9fQwE@8C1+C}+TmEp|90g)Oe$0B3A?ctHV%tw90YB9DNAJ5NdA2t_*$0fd%(z}|N+ zw3vq>U>(AIV62Z1wgN}+f#A)2U>!VsU{Ht;jP&w>VMp=7iZpgOB!!GxtbY;-c!CcM zdof&NtHFK1NuX}a0C6P~P#q`^C5wRx+ z7utZz!9ebA!>x=WvnWkH$#LbHX8K{CU}XcD%%lU(J~rHwB5*8M1CbES6|9Gc5DWq# zQ0X4&ViL~*AsFa24GcSq4_2hH!?7tuSxoH&nYX|Ph9OtooOh1$9rk)_2j2vYqmud3 zQSr~fEJEPMu|V&_KClWwLI~7dF`U{zf(*90sB<4YrUf#H4(>GrgA5tE$R5;F=^z6G zy<}k6QDm?pjU5h8A;%c`lu4Zo44a#kx#?o|FW^2hZkbK8mwHYLD+i!T8lYSGo0OO< zXuv|T8}_WYiZSlHQWyp8a~W(E5*$qrEneV4+VB`9XTs@9qJzgQ@M}F}w{w?*2MqI6 zN)S|d?a;LXjQDNG4@@EdxUY2wM)*<*Rz()q*it|O8*4pQyesHzM3yW-j*_XA=sj4P zsl-wCTj$v}!WAjv)JzrWjUbQ$D9D3gKVzm&Q+D}4iV&moSqjM42_GwjZzX@;DWDEles zZMLUTy#@)(yVd5$h%6zu71=G-`hzp-yH*$zzik4h*qQF89WeqRAi>;k239UnuHkSv zTiyqpBoQY&@OE9_95twNn3Dmbs@CSH#MQt`k$Ik)^Ib0s<>>=Bc0P8!c3t*Mk*-bq1RA7gd}=$bzU?@D9K(hs{tC3|rcL`GmkA zg1JSWZcQ#BK98C`JK|xJ)QwN6_9abv;_~S2N3_G7a7|1W$?a$*@tJ?n%!dsEu zF2@AnEfxpVnV#S_!Q5|iSlq8S*$PIICBQfyA;GxyprJeqdgIxWSSa`uJVXq7Q&T59 z%Vx?)i@BV!p`*;CMcP6&fdF4YZ(HdmIOxrac<9ZbfZ=4IpWcjnq~Wwe#9a4{&(J>$619L z#8O!i=q?8=aVQeWZ0*|V7lyel6|Nuo^s9}S8JH+;!JLF~69=L|2H}9-yMYp>g5k+Vl8_;SaV9gk2@+LPZ0;~6- zf>{hS1$OibB+POEm7|Ib*oFjJk-5vaSUSO+;`S#A{DD~9eo+v>Ni16hZ1FVYQj^9A zaRePc5R0|&5Q{+|7BcX9h;Q@90%9@HODux9?Sa>Uqi0di->ke!O4*KBMX$>2iYY@- zHN48;sB4VNN>d#A<<|!12<8^KProtSZm1OEuyZ8h#B1jOtN4g&vkmbRmO5RcfYCNL zfizR-oL>WsWVCO3wN=0=uK`vRjtumB zT!eFvpO=r-v+f6d3yRV(R;!4IwL-<`-51tsqBW>i6Ife#S#8DryBsMtRrkzcSsr;1 zm|=T85a2mn?ZR-FPKKjj!72v9bOKaT73cf9p^?Xw%reb9KQrgh5RqcZ;3-3WJf-$K zI0h4N2|(1xz+pF82M&Miy&_pmNySanu<%+V@*= zy>fDwU~ZA4Yspcd(O;-eNTfn82Jsv^?^s6}vWwS-T&i4GoWv7*M;gB5o9dJObzB}khGW5*vJ zf+v+M_ptkHT@^fmBluwNKAQ}22kgVty>U+6mfOT+?pfOz_)XE|0m>%f^fPNe!udZN z=6-?g`N$C`;U`Z_#rB%HGnkT?NC`5;4D4)(NNl>B>XNuTT70UhsO_U9H=lNb8!Pid zXr*lfJXamul$2L8lr+}6X6yv#HFknKJEo^8vq6;>e99W-%04u#{z2Bv0u zDXy@`pbEjDA~8_8y@J}5)# zdnsep|Zb?{JzK^@!+g-ktuorQ|>6NaTV&5nmCiKVD}pnXPd@4z7% zQQHiw!YQ`H*6P{5T;+oag%O|*Q@Dy?o9YH>7o}PIS_20ZCYW1fv1#_{S4){?$MW!r zDN(=UQJEB&lES9yeTY7wFzM4wVTOAqVk5NF0ryQb1YI5l2ZdP&4}}@zqcEfV6lUD9 z6t13f5A<;q-q}-d#o?zmiQ6`btu1RIF+$j35_60jHJ`gU(IKlxkeFeZBawfCZD?c- z*0K*6>u%m$Uu-U(uW=delst-&MjKiyfXl2_es=zH2(RYTucNf%+Nu-0H#x!JN;R5d zH?YVA@1l@?z~um)S!)lS8H7nZ##KK!fyP}1qs%~GsE1+hQSmLUt!Ld225G%BwYm$_ z+|28C{5hhK{n9?0bGYRT3$+o74^x|C^;kf~*aneF4b*1X{_@mlGJKv-%9e{63f5Sl zSj22_YndeE!6E}!(g&wOf<7QvtYT+FB#FS%M+gwt-B3ZhkNT4exWA%{w0nPW=rL&U zmo@P4mqFk!sx@L0NLB;jF9W^&W!SL>xq8Y&7SAp-Rzt|QF{k_wo6UCM{4+e`P??$5pb;*Y_mnK=^es?wYS1n%a43_khb@3Gm3fZ<-Q6}78kwOm z!3^6|S=N^iCYYe^)+e}!R3lz6%6PJ(a@uNgEvO;5$-Ch*)L_}H$D1uO-jQS0tyT_& za$qz+6G)6FWfJTjgqEFPwXHi2p_{u0ebyYLW;HydW{~+(23;Ils{0oV^pcuk$CA2w z$~~4rQtv8O@5%&7H>Wq_vvV9;fn&Wi{2o;Nes;db#^mA8tJz76wsoYVS8X&DRqf1$ z1@QT5q-L18zX*|36a+@<=b4=6gloa*rAhEs*BTrKs^l=NTQ{_~4ab6oj)zkm3xG9- z8zde+xXW0dHMSK<8)NyTZxbBEWgR@kWe|wl!~MLyzRWLhEEwot>M^c~xk3zUkEh3* z0<8}2*ut({jTi)T)7}@hmnNJAh76`82~2Kq;~69&bxuxya)$l)+0ZgWt5RgYA?)&e*cDBV;t&Ft--wa?csU z4AFX+KhLYi58mBTB7Dp;50?X*40@f=N%Kt94Ka(g@=0%-!k)XYsL8Kmnf3a;lTq_$U#p^H0AILsugbS}(tQ_*hAUl_F&ymZ32sgFX44 z!6d=@GGq;|Q~|e?2OUIMDu&}MQZTwLT6mbms)9+qK`*X5XCll?BogNyQp-X;9K9=i zwrYfgS=K?2KF8RxzZD~aNY+qb7Qx(VtcJL8VuuR{X6GOnvjfCBLc(acM7iM%=7gVy zk;2pEz{Z0?ClpnHk)pUlau?6ZvV_28MDpGH3#C!ie4z4-!KPKLoi)i6Jf>)J>)_!GgTNWwuz(wCWEKZ!80h5;!Q7+S553GmK)9xV1*z2r{}r3 zJQh)WgcDFp183ZHUlPnBHNDKT)xjhaTo-^@1V^!lkoI5}>)>G)gTO3PP`#!070hCw zf4xUI_aHxZuCwCjeU7){2KoU!^}3tRuwA}btIaY>>q*Lj^oB#JeU!Nh`eh)At!~;v_35y~&H8#s!XPtcAuXY0?NT2? zPV!D(^TYCvseIG7Lgn~vPgzJ$z)3+(xrMo5*l;=B;;POFc^8gb+XM_ENNN&@0C^=5 zaDQ^cQ3#QEzCA}N=NAzQNHN1;ELc&W>tZ*Lw4&f72p%vT$Lzv9U>!U>V33)HP>TRJ za_}3$STNAb1BM;N11n_Rr^w}r*&s%RV43B?1BMk9wpY;%{%y9@vx4w&8GVX9Te-*! zOaP{00(v3zjlm|c$cJKBaZmUCKm~^Ss9?8`>Q?6PmN!csRA6|o6FOFld4qNEP=P^) z3cbz%Yug$X80e(}!;YcCz=|^Cw`~$|B|F%ld+ejOz%V7?A`Up5(`+PzJXY*)o#(ic zwZ5xrM3!7gTPx$)S5=G~j z!Z$VRW#9 z^f57yCgZ>lgi5TiD)3&yQwGD4I~>wHSIs^AU~Ts%!f7KI=$kU6yBg?W1!M;ljyp+V z5KVZmW+E8&46!H77L0;{U{tZvV9cbzR6IbLh){2W2P_iv6RICPL)IAX?q<=j4vh6# z2cSv?O#P^k07>WuYnaa#cz9>z{M!N zK_`~(#WcaN;>Z>c0T{p-?-T)8IR*(f!9%NekbtFzNx)bi2_B;WNI-COPdN4|`g%yf ziW(EpL)p@L>{Fz9Nx<@sB7qhA98ehS1SN)1f1oexGmwB``|Z6N3mAk;nXR&T#e@Sp z08B{%luzr16QZSEyU4b<*{}oLypIC50tjU^Yy*?Ni0B2+7Gf4)9Xu3Z(7xO{GP5WvD3d3;b7dhmjk_V9v1Fb&vm zLp@{p8bJ#NdQAhv8oUE5!Z_gIREqEhD%?t>9b_Pw+j+!>$hfwPj|qbw^&KuYsEQf= zRzr~(5jw<8qMyD;>PUo$NZnen24`?ycdLA7YRWK?XN9sys{v}*TH{K_b~x6cT02Ya z3dqbF-2o08)~Ug-fgU?o@w zkCkB1VfMf|Kk0p#2}XJ{a~1V;hO){}afHra)OKJ+Ao1JwB2ga)w@B&TIItBATMW0@ zHagTg=I;$;V63T3i^R05!tR4B0a!_e1o4`7AP(iKrKD1jul649efg>7A*9-DZI`zx=iVZ=%`7?W?Pc^24WCCMtqil;QxGSuLZ&hm7gSJYq4= z?TQrlcEKOPsY=-u2hZsF6Wj!k4Kj&@P6|{>G)y9C=vxQTSg0w?h+R-wV1r@|3wR=; zz@Q)8*#yrZxzZPfyI~=Hf%#nZ@X(Bv1D*#l^iU+OP7ZErd0yKBDVnKzx`hjJLcwp*>crY2 z{|Qb=?w+=PlI_M%lb=k^Hcw$iH6X6f`*NOHEgatu-eCm3;6=-~Ks+#b>=@sg^sx&WQSl$tiE6loOPdH{~@@8A9Ca=JrFl;}s=6{sV*DAlPwO+S@Cbkd3^ey=WV(fhi36yT0x@dn z23^&f(B<&VlsYvPOt^h8fZO-^CwBV@oU)L4f*l|@ri{=$2Rpzzco@JSFaQ%d3O>o6 z111gzdKtj51_o3SPdLW5tAMSKZVO>=Sr38%44Vx{TXUjepMK7x02VM9sWb3Yg)3kI zP$dgs2;yM)TZN7`o;zn17<3>WqXLLv!?Cmrr`xF_9wKmGfe1Jb1XCbB9f-g{FA*5l zK!hsf8Min*R@^Iy9cvz25P@NnY?YxR=;m+&fze;f=l=OTO`&7BRo3$$?eyP=P^#$$^1ho4~LJn^46y;}(a^Pzt1v zvYIkSfdC9c!uG}#!PpMZb#uH1HJ3{cw>1htU`YWSJWoSmA*?K={UvH*;8-_e%^K%c zsLw&L+lMUi%wzJF}Cp!D|D@W*oB%ELcT(3c1G*fnX+)skLmf#1=4AdZ3 zsDCL5k);M0oA8zOtZ)+?3=xIh3}KL&Fq~D$RhpL}EYFjYU($~k6>Tf-iQiWA=_E<| zT|~iaRzqMY6SB?3NgU&523wY!P{_eK+kX09xil#rE(Zx0gNAD~Nn0oD;d7j`-b9^& zI%89Xdd!GXzHA@G#v0;N0uNV5%T)*WRKoptVn~9LSv_^|7b?w15|-y4kHh>Tfuof+ z;V577P(pkdA-g4?Ewf!dEN?Ed()EOUh^>X{hQ)0Tz9H^|dup{j#zKk4?*a>8bumCpC{z+7#@$`v7>GzkDYHY4@&utel-8-=n=0?(Ic~&y zq}bRF?aj^^j)bM)783}{-R>bMgUmdK;~TX)Gax7feOtMLbC05zp;a612am5GW*2xY zi}6?`cTL%_PE|Gx`Q}>?#Z>A==&zdOh3Qtrx6P41XqsWP&vdnj@S?@5)IJH__jc? zmey0pOwP*s4&AW^O|c)43}Q=#o8TasXyJ7D1Y}Gl%3R>X=UE6OV`*NJF|3JX!V4>k z+~(jT*39^rV_AEF7Yu_b(i@v$hzR30L@3DZs3%Z7T6VcfQ4W~_7$IuuWc=yZ*z_79 zry9#f?og0~u|9VXs7irBs}oWH6nP9B6k#1ac8Ed6Y>GN{x?~4M80e)4!Q8`9n@oi$ zRh3p}_HDI&w1;O2dtuoW;V zq@k@2aDw0_A3mTjIKeu2IKdz@Hw{p6Dwb_jaDsteP7v&eal(o_w>g{%F93msv=(<3 z*k*@|_xLjfBUse#e6_N!lqn`j_}&1Ol)#!KT=Z0BZcK^xO@w3A(tR)z+`5ktcJpZ` zO+zCLLfG(lfOOz6Ay@|wAsA$GjA1R?nxzIpFfbHpW~iGK`w7PE=%3+gg>i9TArB$e zh}@*Zg?T7(SzZHaMg7I{SfT7Thd`04)9?2kQxw76uW?ucn#9feol>}D!VXxRAXRVp zQke=80#%VP9R%-V$6UoiajM}3F1(l&yP!#Zwqmr8h_(t%#dJZ$$G~BkSO*Ug8DwTF zWJ}ia>_J2Z`qzGpd!$EW1-{!HEj4Qsoa3zf+PskEk&v1H6mQK+HXjIAikh* z^b7|Y__F|CfGYWdJb~b0J@AEv#x1k1+*hV<)$UzXw2v>Of|)`BmI!=#3>iF25Mb_AM4U;U1t;-r$w{mQgGJ}TNoopbStr7C833j*?xu|QQPWf2Ds4JOkHhY1o$c3t)q4TMk zifkg6sO#P3F}P9-L$0v*uJC?%A5gS#+dKjJ$t6G^xde73x#TIsqxGjhfOlPlk0#y} z)!52i#&4TSG43mF)h>ttl?dkMF>-&l(L)Xra}o3+0Vg};vNL2-K+18A`?!cEFqeT{ zA`ywp+u?MG{3kdDl{qhr@>J1&azSdT1XcpUwD&pdY|h$*&IRVGg@;`HVuoBeQC=IA zg-Y|1i{%|lE`G{+sq72Ky-5#O%vxJSRVYkMniV*YIkt*&6iDRK1IOSY!8|-HPH?S1 z{Zb3_f`#<>38E8|4R(!cOa!bX0Z!rfL!$~NveebnB`&B#Kpw#+mJAv))L&nEj4a7SA^@Na z!Q8DPYtdBd-JjyBF9(hifz0a7%eq5mp0&miH@}9h8fkm7DYnpY_(nGB!6XKH)(6x& z(nuRJA|3??i&zH_ix>nJA$<z; zg2c1c@CE$t47Z8boe3;pB_rZK{yWSFmbx(~bex1>oR1Jdm5m!hgy;yf z@)$S>!8&*d!5|O<#r9B@tmc`EG(RC&;3ElPMZ#kWqMo2kbqBjsq8BU*!Q2+**#;ZB z5q8!-{Zdn4Kok;iQrt$sWP&#YOgT_V2ba8rS;8WV%LrUo5op_iVnm_>F4RI))Sq+7 z3Ww2P3hV1(3WLl9gmj&O-oXvi!9YJ#2r8^weWC}L50?Jo#0p+GMPQc(iFSPk-)V+llqdg;yp_h5?lxx z-Wno}o8X`xcY=p{3^LS1l?EKFtx=DGeltio_t@3UpfJXY%f}ph#pWG03|jKBgE0&< z772dT?hLtj{35VR1a&Jo{`CDA)thvYhnW)(mm`LoO~Mttq^**3)IgOGiJRCT0c$y>o>G0Hw zLI!Bv+hW+t++kc#QDI?j-2%CC=JAp<*zaocwpb^Bt{ki7%ax({nNsC1ecrn4W5 zt&8*?xPqf62-%63x=?98>mu?VNfj%kop9vR>_;M-LINnGm|<>2U;a(sz}dbpPENnXz*Sfu*BB32@aO9wjP!+ z$XFDUfm=T@CDObWMR1R#i4}29C>n`sf+oSeo=qSyFaovW*g}j^rBV1!_C)N_|_v`$P=XY0fP)gOgohFg zDkd3Z$!iTJ7!C${4F|#8A990Rl2~D7{HB=(cNHV#P_3K}yZiz}u`rWNJ3Q7b|S3xa3M@xskkSOLL1!J*&cALbzlLoJ=`u%sHF<9@I<{Bg#DFpTx? z<&y?5^8HXC3XHK8#{Cx!+pVgFb1z>&hB1gA4>X|6@9eweK zz%_tMuAxv-uuL4t#xlzToX8dB=D{_FdgDB#0crsSYdL^xw!%$tSSQxPW1ScTu9<5f zdwmIjfNKo&a*bh+oUg3lbV9Mq6P$o=nKRhj)!+rg^4WSg2LF66FrnRFf+w@zG*q$$ z&OjQD&8S{y=P$8K3fWQGiAK3hsh|vLcH*aut%eD>gmzOvna99E8P>u>83q~3V402U zvw3Vl83uYOLooNC)XbACovdJT!ZAb88CRjz_elkINaR3-W|E)H`AuL?SmyI=CbJ%_ z2_O|e`uJV~o(8N5OEguqm!{+)&O%}TUAhwVV7Pzwvb8|%wIncqf*p@QgB+rRd+uV8 znY&V4mZ}CF4J6^ngbVx)Bd5|vtgI~R!+J;rZ)_KFdx?7}iLe_*8u z=B9YbKzhf%eR3dI1#ABGBcy{ZkMiah{vJhJ;+XM&o zL<=|d7=%S|jC*%6nejV;dJGIwkD;?{U7U7a4rjV5TB+E_Q4f5p^c3S}#hw$2NuG3C zNMP$EwICwH+zNK2~38K;A^)7RZ;7(0Tw$+zBQD;!)IWkXcW_>~^!hRq`xC#zwO`z`8oE>I=; z;$FYoFz2#Rf6{=o?l*dN`#1+1G`V2kW8h#PtLtGOgNjWL94OP{qu?I{z0MfH+=Ewh z#vVvW&z>Aj!h(a7d|Z^u%=YC6EN_wtnOaeD{I+Lb6ff*_kpfMR#{_cY18iUf9M5?nw9>T!o~sUS z5=tk*=|jX0M`9|YQZQtp(tIQoc}+G@2x7&?Qx3 zD<3)?0V1g$J8UDEG7Gv<^-Q6LPCXoc)9o+N>Hli&Tz(|Uvb3H}4+u3H&5QsE4IsHn zVl`xjNBFx`9V3r$&q&XVm*SD#S!fudBBQ#pJ6}XZJ(>Y&N+8W3)EdpOKx#HDkYER! zkyx=H|A(0sY+3OKAhF}4|cI}wm&(1yf-1G2bhP`+^w2e|L zjplApXtYil@@<-G6$IrXpRBM-b?of;nK)Gg6G3MLg6kZ@PlZ`1f%9fTLB;G$ z_YbDKw7l1`W(BU|+ZKW68FhiK(qSK4SQUFZ9Tk=-EOV4+$nyT}=`8nx!!ng4P*)0q zUn7nth~vCvA%zMYkU~L_Vrz^t_9r2b zLV+PE1hytA?$nN4yELS7YKKs_N@qA?C9d|q`erxjv^Jjjb0~QLSPq=l3kR2+ssWC?9vgBr>E1W^G=5vW=9>Y6&)SLqwvT^N@bvuX3I8FL~ct< zhhHi~z%K>aqP8{R7|qvLgWKy`L)BHylb)?irwZ)u)UZ>UP>-rYbXM4X|9f|kkMU0= zUDcd^OFaL5_5BjKOOz7E%Z_TdqLAR`Xa`85;HWz30)F(q#^dPc47fZm> zr-QDRK5EtM9#Kk~u!fPZp#?wOH77?e=9U3bzNbQG?-jVUMS&rynY-3tK(cn?NUuo24ho2DU@2}5kr-HpyFD#JnY;LTD2n?4&Czm*kj>N z!)hV-=TtANtDY2Nmf~8W(HwmjUW8^6xEBQphBV9T`Wgw({Advg+<0q|An_y*)YXV# zX>CzztA&Fxxj1DAliXc21WJ0ag_JcUP#dg#yTr0&PnjTtN}4BwV#6(vh+urkO)z{& zC8qNJBKxBM{HX=U`rc|N1(hK5(}@_? zwl1gb;Xx`j*;rY(3p`LM0==LhGa#sRwOO|!-Dn{XbiB2AkT`1x>ZS%Lq4@N$Is&>=2MT+7bUJVBP~?WA{pubi z?^SQW1x72U0l#53d>Ah1&G)C)Z+kK8klL;zqYo4s>w{DRtGAs~OXvd!&nAhY4^)bP z2nw=wVZ_GL2Yj+FC@>fG<)C@j!ypM-=67l;_K1DtNVm3|a4;Jm8W0LqtFhvc&EW?I zDtSN|!)%fZJWwIe&X3Oz_on387!#c4f(nX`G(su@m6NkMgAhUB2%O(pIvD~YsGtym zVyRZ(CuyZh5~bNyMooU;YsgJKWP zsR~|SBmh-(AjM=Wmr>=0EE^f}h3XrF2=4C9o@qm^dwcXkibj)Xn^mzus0aZC6a)pZ zp7D`8WGtFE!+OB3Vaf^N zU?tmS6!jp|Y-b6f&}gMd?@zc>w)8!WP&oaHvi>C}Zomi?G{Xo5K3|;Ajy9aa-S@Ak zg%FAFaiD&wK6Pg(!0C)J2%)h3b244Yy|fNoC;CyM5)`{PJ@>l|76>pU1A60L)(V3G zIwTde=6efb#!oxAZJi!PD=0c5K`MgP5zVdtkU-!)j>+;QP#FReD9Ba@{8s%2b3uXe z%AmMB4Tgz-k>6@GcB%F-b|-;5)I1Pac{D}QwRz2@;J~!2FH*FXF0*3HiV8G~V#zHl zT{(?E_Y&+cXmNTrol$qKMgw>M;5@=m>)!r}6L!?53Y-YdEN~!Wf%QoAZ~vKp_Goc% z*f4ihgUzl91kw;DGzLU*voMdlbi)pUAyX^<+zolZ~q9veE;7_OQJTJYrzHF%)I zX7ltN_F#(II;knqy<*I@MSu$;@t8=htVVEB1YFR^f(v91VYb#hjBd1$3p!qlLP&gz zLv=|NTL+@@baqh)3L}yhLlN~v(C19CFhQ}+`$z*-b1)cpb6#F(pkuCf4(B^Z`}94= zE9W%WV}C)gHmDT%{L|`tPA5TxRAvsUvp$f87a<^mJ{Uykjr-)dx|JEFpums_3R_Dl zBre9Gx~9mbBnGh_#O`2h9L}bcMxXAT)9R+aK2xm`A5#Ro#LbKV{JphMmz$WQ#4 zIz&)pM1=JA^yq3S<}1?jl3KQpPKJO9DyT7GG~66EEDs6{nV_(>n2>lGhw8#w9y)kW z7m7h)httIgy=>2Y_!3${fhXjGIig@9fT>6@WZBJVT1cQn=18E(hy-$b%B*r69a$)7 zgA{EiM0rEe3)^_`k04~d^~sE#X~TNASX968~G!mN7A{(^KSx}?;4Q=k|Wy-Qm|YhJ31 zM>haVI5BDoe{`dIPWZ~xtP?6m#EDc24&bt83!G3m%UYfjDnq~t1;L3CE6~`N*MbuY z3^$Vww-zZ9XX8+PR7+C$B3h6_VPu2v(H7w8{Pf&SHH=UwO~t)U0Uf|3beI?&B3+G! z&=J>QgI*A^Ar)c`HYmK64Jt#x1_i+eY6}rA;tXQgpum_7id%~fiQ{poZY)YH4JPBR z^MAqyg*C@TJJ2fmr=}Pfs$xQ)tdGn$1{L(qs3aT~K_O#@jaZNhU>%}!iXWXIa0)Ty zdZoN1+YbB8$7q>{#uQExrA`GoKTaMcm&SI1~16+79n(6AE54y6b zY|_ux)71eZx;j{MjVDKk#Bn-OUz-^`#0J(}W)8Nhm&{?tQxfQX`q?glBtkNhfR4`2 z>dXLDDlhVgjTy1o2*Gk^s8R%so~-ZVNik>zCtf!f zLe_ z!loB*2YDZcN?tbcIayoC4ce0T;m{F1?jr*95O_-+W$2-=I-rMwpa*Ad79&^F7YYn* zVt3cI_>nkON9u_qXq_ewK6-Fx%fVPbD0yq~InNh0AG^bz&7app_6$>!fxdOamQ_Th zJU=<#JD; zC&fItyn|oM%LB_Cw ztLf;Ho1HfnRERc8C^|A0M1=k%8$Svo6wcvfMq(JDG6alJP=*l-3>l%YwHT3jQ%CB4 z<0zg~m9blbQ4R{TE?`9~x&>8H{D;ThLeWRh=T937U>K_81Mybf+<_JRM}y$ zx#*4^hcOx)oG$3d;3M2n5~&nDk}PtOxllsk`(`BW(JH{iXs#N+@hC zN+d4TkvijW)sU1`Z|3A+yOa_*BOy?gFkH~l&?SwDfCj6`Fk#=Hd9RScjaq~UcLqLF z3K}?IU^Jw6@A39?n?^_=@DbfDGQy%4REB^A3NjK*2GqZG#Kve)U`PUm#qL$J{F>oO@v9+|#Lbl(WH@dpBx4_YN4${eAAv+zT9EOipVt z_bNj$_X=X}**$G`>(N`}Ya6$}a!{@6o^(aU+k|!b{sc{Z7(&`W-O( z^c}2a_7hLzSp8D8%R%q^5GQ6|VRt^H+Waf*fQ(Oa{hXCPD@Lp4f7y|CM6~$wALm11 z{&m#HB%dEMZs$ekc)El8;&lGQGk1^2{-WKWqmqqXih|o@lwSrEPN+m~&4LRmdB6n) z!3E9`1~sS1Ge26$1s!i4TVR~H8u_jIpijFA@5zM`3Y&fS*E>}H?cA09uQ5a6)FwW} zN8O+rz?JiXNstYBf*Lw(oBP?pgDr!hN*UNIWsiHG6f#tB&d+k%1Wu^P0Vfn>oUm^1 z_40adw2%`z-ddbU+>2v%OIfo|qK{kv0Gv?R({n2padQ5t6Tzyn&$>>WrT_xF(Q>=jRiyDt&C6^0!Apv7(sImDyiz1hL%uZXfQb3T9im! zjbrst_0ZpRrm3A+I@r>$Fh8gBgrDhM4)R3v94|--J@Wy65CT|52%;hKClGGbDT99a zmSXwDbo;iFtQsmpM2A!Yyq(!dVibhHxoa+Z0|lWn1awf484z8Z{(j|#4hoFvpt!Z@ zka!%&>ZR)Uh+Bi9N=`I{!j_%PIyjMj=zB;(2gMTFM}Dwd=V1e=iVXzx=2m1D3?1}z z+T16`!6F`{_qIBPxm^rAP&oNX**&C_A>e^N4?Gz0LG*pL0z6P)xKJo;?_|19uyxuV zMo+EBiK~&{spU|_bJtwpa6n`0^Z^G{&}F9}s@c?n7u;we2Xs8+z@sb&66fMr9Z~35yx%^r5)LTr z;KRSQ?PO>F1yLfZGtdKyeKtRNUJuqZP)Px7rK}N#8qhJ17xUQ(B}-{rOAV8{Z6wQMO9XX04h zP=p8$h$(Z&A5cJHW*G!0(KY1mlUkbv76Qhr7|?Ai8{!7dGC(Dr9+I1Q=oX?qz5f~v zNX4aFXA1+I2#q0{?vY>sTWiWxI6EB%=x8AW6xPCk#Gg1;Ulh?QWPR2%{v7PZ^iz)Y zI`e&cOYY3iYHC0SwfgPua0(89DLH^&r=>!z6Cle0y?dku?sI>%fWTWLQ=GVg8c;!( z{k!yCLI4HDMxo;J445QNMSiEI0BJo0M$|ijI9Rb^L=jj}ii*5T8iYgo0p%wL0r<)x1h>w2%=x-a1}{ zN#bYZcd9IKX%NEZYvjTRfi)|OWxEBM!0Oz<5V?4}(T*@o$q(#^7N>$6GC7sN$>hWD zV24T&vEx26zz%_9OXOBQ*r756>`;)gqd&%`tS==B4DAVb*R|-8_#7wdqaq27ysvtg zf`es!jtdo>z(lR-iPubU}qwV5%!*qimpp zlcI5N;XqJV9W}|t;LGO136L8mDP}C16;Q#6h;~o?#BZh zQ1kt|L7`ZbNnKK`ziw8n zF~I!rWIqQKB56CsuUONCBZdMa2u@>pXo$hZ39+Pi}+CKpq0Ry z?>c?KDmCq#O)WULVFR?r5HY2=xSGf=24LQcBKLBXid22q z_EN2h+*$*X(lI-tJEqffv*O~CSG{48bsV0b&E37WlTDV}kUaL#W;*Hpt!8G9*H1ir zls)-hco`b$Y2l5>l|E4kHnX_xo5I`!sL9-S#3uX0%P zxm*$n{6daW>^3<3Qn3SmDF}YiAaFu7n`(q-ezZtmIb8G9-j`sNd$`wCUn2Eph!pQR zX(5=vnx&ut!P&g?aRL3c#t_AMsJjvtab?LOq#I;iR_;c5lS^a@_Jn$W+|=1PURachYu(p! z;=&@8Az+b$GA5S-Llz0Fc|J?!WGN79D5uKl-Rr7%)PijB^VL};ux2Svj&=#R!jLaw zZ5%gX)fz*bTByYI_{f%4RpxMu>l1DvWag7cL&@z{+r)8)R4W~rwNH_eHGiMmL#-5! zyD3|m8EUBv^TW=`{5f4Le6``H9%)*NHMrk%n=lqX9Wpk#1lK&Z_a#{6Kks$b*UHjI zwf3>|=A*U*)-1&-1$v9@;LhEyQKu4)tue~}eDU0SFklx~R_vmLTy8TDyW~dOD`SA% zEf<9XyA&C*E4@8w583j5uuI{SZp-qgG6afCK@e*=B=c~~O%=paV5qnR);yza%U|Vm zC&fXmC`)-5(WOWk0FMOLd{@H$Nj2S{b|^ekkf|`52Tb~I)q!aW44Edd<~hHw2CKaD zbYK$Zaa4|F+OR|ltXYb(d7T9&D|I2=8Uq|yP&t((^;*;y*Os$NEASD=`Jwp?<>Xe| zxX_4dv5%4Zi=F+&0r84{gMud0i=vj7DhmfslbmvbVX5dAL)Xp3t$QH?f~lltgP|>k zej5Y96c`drV9it8rphY6e6K4`*=_PL@j}${+&qkQMnRF{J zw@w2rP;ATsaMd()$<5F1tlY2}8tDB4)7OTp?hXm^+CbrL@$LQ{1SC*FmkAEOSPc|V zSh%BdxE2m1?&(c&L~c_;h%kV$(@AhZVLNC5BG9b6m2YJT2NX-y_>)=()B;pa0df7q zoF8QF$IK8wZypf~3Meqt0t#zkK;kRj z6rbVtvXGh&y@3G=Bb{=WZpc_~^e3W}Sxpf*_|f5~BtH14)MC_fB5*GDbFO`8prg|8 z;s=KvG^bm&YVQCiSIWe8}XAZS2DD!y=M=|BSoHn%;k zp&sqwn|rkM6_iutOoPPXyD6SOOar=J4!v0p7Zf&|?qj~sIQ48$1_}+70ibdodPH?k zVtX7C=#bFrpu-wkK3-wJKmmnC6i9E4Cdld`D3HQA|I9K53aAVL1r%iV0Evba^wTGT z0tyT@fx^}ZH6+WlIuYl0Y97*)nT!@+paTvlY~Nya$bLS0=8LI$Br$u7x*lM(k^z0v zeRCQX3h2#43Mee1zmn*xekYx)!C>8AM5Pyrls z_IvJ-mFZX54y6wcJ9s&L8AT7Y+21?*)NLqd1*{|h3v6}=4*~S{)N!M-_hL3b>fr5l z?n6|8qT|g0xKaqhXR<=T1cm2|FQN=oia;4C$dmz^pyw?zlz{?6WuUON*pRqDH^tAj z-J`O=h)_}GCTvhxaV(=4%tFO9s{t_O1W>XnyG@4$I^tN3Y3~9KFRe1f(i-@si3g6sF3(1H^n2hO(M`_IPAG)7b+-hnYPr_ z4%;KKBKP-ejs-LW16Hqg(9IUEg%j@nEt+gRfX06c(w3^xl|?*>p-+kivVzLCb-elObS%3JME`T_mZsH1tmt zvOvdMhXq@SCz0Q&sc2z%)QGRy3J$hUK|Qzr?~OlTuI+*a~M z+mKKdUGaBNP%@`yM+eiIpTJ?7=bdq?m){+4<=!R}ueXgpdIyUpUhduc(c7SvsI9I- zCqwf`??Cp^cgC9!F$`;#fP=>KudisW`A?jNTk31FK28L#Icb=Gh0R{Dymu(3>x&`s z^((TuNM3=eUT&A5xQzb=9_XMnUO$`S3F**G##t?oJvJf(BPIfj`?-bviIcajFpifY zAcH=X*#TXu$Jfsp-P6ZZ&;i$?LgGE#QnwUk!+RwC)K!7PsFGz(_m<^zeUThaxKE1naOHFmo0v~v_QT%!ko~y}WYGIZWJvE$o5PmCKM~fF^fp@Uk_jcGbKU!oCxSQsE$Xkiukl$hm(6NbZx7s$*!ORwIcj1=0o2;L1 zw_fao4MNJ0=6HrxiHlSEow#TdNFmp6Pxl{lqTn zrM@RRPWMOMTG1>jYo^p7Y?f;HDk;;in3JO-k@sNn;ZGeD4gf7VKwlio7Rlt`xsi|e zr)QM$q~eXQ^alx4h)6M{_b2NjoArxg5O}+hpfUsmP>>l3g!_z!&M^uB6c}p<#kEi% z@gHuf&xt@9>K1q+Vks)D43a!NBHX0L1qD<17H@*vSU>|%6%Eh@EvthLI)AiGT&ig@ zSfI!->QMz4=L2TpfyhgvwVY=IMW9jyJWvoxK!hAka9=t53?e8pG!PVadNzH8vYww- z+j%`(+)Dh1{1zLbX#MKz`9TGRv3py#0VYQ9=&)hupzs|+70Fntbfg_XReWHT$e%a5LEHJD zLc}^k#F((7&(IP^D7;lis1yMs6jbaXSS|dCAB<37s3H{Bsv>%cKat<5ir8W=LwOWu zjP20PTVTi2vy%nIjQu*{U}jyq)5%#eRLKL9w_4&)+>k|0@#E>I4I05A1C3y)^7g&f z`BylOu51ei|DKxX-w9f*5xj?Pzorr#GO!jMs(tXE`^qz;(Ra)Jd4vzi>fr}M4{6^U5N5p)0p zl`oV8?or;Y=`JaBv9D#{M?$|%}>vs%umY4*Ih#|@htK?rGoYB>eq56PzDM^ zFO_4jY85yH2LbzTXNe|Ylk&b(iIjl~!jV_jE)==VxtQN6IJpBJ zsGv(_Fr+V>zF2smz<5be+!|%JDY;mMCGuN{(8Xw<_!6BEL171k93;EbJ1!`QbBL4q z3;Txab#sdWD^8H*mYWJVp+mF%cwVH(pPcXScWCIMZx6+w_=pdnN+GP!W$px&#o<2i zg_j}Vg9_RsR=eA!zhixIP+-gl#mx_n2_v3&mRXa#M~9?cpPiH5U)k(VOC+Agp8BUY zNoOK9#%W>5p|Eh{ps=Re+Qm@ijFA1fl{3Ymg$}v<B^TihuO1x}w&_iN?&S$~rmVJ~U@fXhvUKcIyYI_A@Z&fa;kgplAy z98G7(_mYDfdP&TUR1&PXY<3mgNa5`Tle`qo+)z>B2It$BKc}x2ZYVG`BNWzROD1l| zo;s+ARH3}9ufmFIP#6FYJ8w(_`@#oVl_r6G}ac1YoSEqckHQ)YI8Iqx4yy6pfG|J zuv(8gMeKsg%r--@Asc{|6G0e?r9Zt7qId@Z!3kfe2KAz-jv^W_8Ug$${k0GuHlJ51LKJ!l>DFt`ad(t9tNcPp; zMer8wQ)+#~dk*$&is8`VgbM$(J^`%I5gWZyhN)(RbFti>4@&5ebg?Ih0fS3#jhawg zM2Gv_96AWRH7(M~5YRydW!8HmY)Gp4cQ!isfY{(U&pgb~YeHry?4Ha>9F=`_Zf#jf zPzqG*J4azC?Bs|*SPBI{JvyzKl@7YcVW)Q!&WiC$YS1dZm-|?uhTa}MN+CuJnLRS| zPv-b5>-p2}l7kOFKP9(QpKDL$utt@+O)xA$j#6yC>weDBzVKoPEYW8(rLjdU;GnKF z6c|!NVfUm);<)UqyNlz~q4m?%R|qu}Mqra|I;gQS-NTAeGrf{Y$ki@aWC!HpKuL&v)(JrZ|j zU%g+JH!~S|XBzZS*s9e=%|GE_&Fcw6RlFGUm1I0XC=I=H&|cibqUGd1_eN2q@HMPX z6*XXjf{Y2HesADC0jwbkjIB<^mF4o{HuD^-R{m^$r?zH)I35x7Ro4#+Bl3k!XnoaC zRP+3UN#>su)%^VHkm39*ESmrO+?)AN;hd)B`|%X;q{(S8|0*c+k1L;(61R_H{uLO{ zzv9-K|HMVvSBDl}mfo1!JF4+f01D&Su;Gx?ftshEfvV}BjJD9OrR%{NQhfb-+i><3 z7R~-WZq4MU=r;ER%YcdyOumAO$>-DeHDQ^21;&%FxV0ufaZ2{pbwwQRfK%g|f7-#8 z@$qEBP|VyLh1do<=H3*z4~W1z09DaobC}(@!2=!CEY{9a4D+#cHvh+e?Hnj&*nWsL?m>{{x=T@w(* zP^lnU$LSL%H%F5By@ZpYnIH~i1Q`^uF**~^{7ggyapUFH#UOE0@;fC2VX~OA-8vx@ z1|hH>k5+NhD)TN$n=&Q^d5;OIt)*NVtel32xQDxw!K2MFO;(5p>bb+cxgYgpzPDh0 z4>?8I+~oAzdrBVr3nDV4QgG@#%H>Kx27%)f%R4LGs|d)T@5|N>GFxh4ijYBpp+(_v zEo?}#8!tgr&8d7N*wS&L8c>`4>a6p z;ew&#-P58-e3Jw9VqtF)XFqgD1u#Qldz^Y&EpU_u!4djppfVJ^J0)4mTcxNBP$e;X ztQt90%=)2&uIho)$*N=Ts5A6uL+A*-BGM5~j6qHe$dSTXY1^y`l_4O9f*=PCriWYp z{0=Rlz>pjYYf%%4Cvu>EtRA`hTMeE_2b<5%rzadD%*@QJaY2W~@@PEtv>_`pkcO7~ z<{*QPnvkK12MUgOkV?SknT`C02PxcY;pMj-PT+tCDyS(5j-83&)t3qn6d3YAVJ$pJ z9Fha|XA#m!Dd4V)&Os?CZ2H2KL1!1;VBu0KG+IH?2dozgK_vi5SU{KT{92(SJ~`Uo zfANE(qge-cj?-Xh0|iGcNF^Y;wr#0UI0up$fmte4hJXbMG8WJWj+$ZmwqSt*Ll!8k zg$0RQa-fc_E!?35`8qPf0)<&?wgqjpNWq!A35ElTCA5y5UVpX)4}g_CAor*x1j3Da zzQd^|`8OoJ=_`W-djHsBNCmLt$=tl63#K zL)=6^)VCB0Thd_uysjA(cXH$qCRL<$9dH>0GxoX6%)H`am5|<^`rFwG zQ>X-i6A7R5X`>RH6wN9@LCifLUY|U}no3Y$>}XKj{dB@G@k{bMbwhEUHo$A`R;(S| zl>#$kaN1d%P0w8V)viZ2RtUDyDngJRo*rY>gY4bSmwB3}^B0~TllxotPz}`lmMQvd+?NSs7M_+*gYAMI3|bc>tdf|8QhMkFhXHPmnjt; zE+__W^B)?O|K!Dna z&@gAiKm&!99Yx^7V(Ly6A%vov&a(_sae)sa7hg8_BN7eAe)ja(dfjc-PT$~y3J|Ut zA_Y+fEzN}#-s+t8QZ%j^4g?#R16oWCiJU}LaO&$UH+Z2>7pe+{-BVR0&dH(rvaIC= zRYdEmLSZFGjEqWc7^2vN=|1U$hi;Xb6|jmWR=75^eS;-Bs%ea^!l2~P#ZelLC^%Cl z&XA=P82H)f-X|(FDYu)sb2xN{$`R-c1sO|-+$F45Uo6~EV8{)H-IE)Mdvd6*EbM;D z*VW^#9n6lPck2Bo9BSF=S)UM2aK~~s_++zfUEqWYxYv1dK07@+q(h-2FpN-Ww1TAf zHxE$GUk)1_yqAl+g$*i0zy<}u2K-Rtt+87ZVS@rgHYn_vG`i}TNi#Qxi8qqp>Doam zgvANF4~?}$VZ{!ELkluEDKW3Ji(*i)rDUhVtWL8GRdRr$Bjdau$_={QYLFP9H-`Z3 z=BGHyI01Dbe0v41yuH=`$T>ryKq{?yi}DBDUW(>rLq#WhT}!>xw9>pe9> z;+q_*JBwQ5V+yS}PY7DNDR{gGL!;Do{{#F~Ml7W5SaYC%D8qK8`OHE=?Kp;}PbI_0K^iF=aYq8@P5 z(V(iX9t750ZML)}YSfU6X=~kFGs;9M*@4rzo0}Zg3_t4Lp;?;5eY?*KmEoYxO-c0r zq^ae$5s*W~9gVYOh8!wGKn?|&1%b1eJ-NP8)(iz^cO43C*>xl?%Aq>7a2DYt>(;5E zuuspeciml;$@kT><3^K7siv8gd8X8%2Rp#;paR1WZ87s#Oe*8gp(tn zL@EZsIlbHl2udiNGD~@Vp)v%NP!N;Kt_N8VT+#B&+5;A+UTBg}ebs83!NF!9zO`M(X>;_80~4TM z>xl~wQa>RIDQn`x1C=vtPdaSGg8K*n3j|JtXI>3B83GpQLlx`8#C)Lo(ZB))Mry#p zT3C=cDM#wbA{cLiRa@IqIM~ujI6dDxrxb{ayvw1esEoU^VhV!>z{+ot^J=RySGuen z4Pk)}dVa#ar!PqKcdp&X9vODIl>7Isy=z7t!Gcs=+iB*s*TPE?us|OQ77V*Ajbryr zut0$!3lz4_u40rpBl#^$!q8%weIyo3g2L`{b(<3W9d!4+cKQhq7%t%f21=F(dh;9) z6!~mHfeOdfJ$G}uB;?%9#rlN}N$FeHJ()*?aTbsVX~ zic(GV)*I9ng2EnCXJL0i1rQ3?9dVRY+d;TtL#4p5B^fAQr}N>y3$%htk**C+lcELFunTT5f&uut5Vi`oEJP7y z?fd;+Hpm4fA@CM!0|uzH0Rt3NG`@0*n%P%SIQt4ilM6w4s{x9#~2QJ z#PDy^J{Gh)CMT;BunhLXsm?v~Nxw9=)YP5vH$`fOq$te9X9K|ug&m`=>527%GYB6ex$Chr!tvdr z4G$Qvng=v>&QPEGA#1G0S8}W#E1I29 z0LB;6hXx8GA)nS39ZHusR3vuTDCo&xB@@g@$}P7rK_#g6lw0+Zvkn_+gH!;vfZ5Y1 z76gG4v7Iw(SP`7OjbV}wM22jaauI~Z)ySZu1s-ZQ+!_w3apHsIx0;K5o!Cq&3RFgWnWdp4;EU1|4?SItS0K&`U$ra)%8gTka(S zd=QE88Rr76;e$#XC z&e%v;%n?o6@B$syHo*{~j8Inq1$K5R( z3Wc|BC{&7oAqukPqdTS{yF2WMAqor`qOcZ*B<{$uI;H$gPI%nc%MvBOUWW^NZBMPD+1Wooq z&U=l9P!WRpSCGwrA5V+l)ieJJj8+UqwM>8Fd>pI0YMH)WPs~$Tvw}FCpX^aza5jCu znANp|-skyz&mD_H3LqsZ+7r7~r0vtaqeuC&lkS3u8uyU`ZlrJ$>9S0Q8~PdoZYT(D z;1eb+vaTBx80rRvtz%kF62~OJQ+tA@X%>>o$x<-?A23bYb zx@%{J040AYLpVaKM<4aviMyQ^7<0<+vBw6?G1-&*b5+(&rSR5WslJ)*X687MX%zxT z#(p30%s)|hw4nnwPim0EQ_YW_g-sIACcjf^agac*oq7!sg*8i2__fU8x$OO|>%uNo zDbhPN4`IDNE2&pGV0K|StAys6t&m}r+-7?f#$Q&V@m4t0(hI^AViCjYjpeM=C&jR( z)I`*_Y;wF5jhh??f?QieY)QY1hg|whky=t%^OW3|TZxZ!qFy!97Gaj(k)gH()-1(c zoKB5YYg|j5-##T)^-`1-mzEPmnB!K?ra)WCowhCKWRKH73OLqMg&Z_eR_XmYhaKh) zR^gMt@pa`k`HPyk&3w{lvSp5HDucQSb*Hr1a>KGdAdgcAP%>4N>&d)(6p@a}VoTB_dolVQ zJ7*V!QEZklsT62|Y$yVR5jds)bJ`2Ss2~Ah6a-;N7Nj9(&FXfe#e~rTvjIYr#FfkM z)F{F)IvNtGq!R}d6n0=P+zy$D?$8bzDDdQna=v@#^^8Tsl}sRba*{hqhY33Dbf1HN z%I#qx)t4lNMoUt9f6_m)E$iWc!s*wVAub$H83GO{$T-j?q`=p3z{F8tXyPbrt({lm z$(^X%Z)-rv%cOp`qp)VpRHn1KH3NF+O`cP{vzE+in2H)SifW;T4w+XHijBCD3b2NL zPe`vYAS(h2feO4Ux5n>47s4NwU&#-mpf5EUs2tk7@eBops>4;;-gg>N-c(*B|@*z z!aa9>5-=qth%#^6(CU!cY$bntD9Pr>SEpmwk&3_`G+QnhMkqYrkpS(W5(kV>P$pN& z4HsLHI^r6f!1Y=76tv%|G0A@uwCGy^?|9fMxcI>AM4#dAu}9Ar^O-*fEKn#?#FD=5FXyFAykI`R^hq}Wq9J@Em;R%hDJVk&@wH>f0EBUEYJ@gwiXvEZ!2Cy z<-%qkH~!c=Fgz@1FzR84Q%Y#n4ton!#RI}3a;Y5fKt-e|7smueW!74ZxyME%V8pcr zfCMQV$7$Zt4HOvCKw;U#J}S{B%0L`s+c;{eL**luPzC~P z-cMLjwOT@wyK)<)MtuZbe`W=!ni0#v$*TsD2G?hf5{iu|0jdy z^V!w)>8$~#H)mJh&`H%ki+_53_4)Tdnr?o4U}9}-f3o35+4%b1^-qeMY#%@S?yvo= z2Y3JclRtd$?H_;l!2|pEH~7PEUT?g)y1jUbD388*^ZJwD<$pR~U0vV2diR!lJz~+i zdVBfq<*T_(h)#X)fpv}?7^{dM-?3v2JUS9mdW4-+8 z+Y9b{aeaO9(~q{l*XfkcdiK-zS2vx@cVE6O=EeTb{cVR!c}qW}GtcqKN1ZpX-kyH> z{{6e_+pCw)%a_cfn{jaY?)^`T>3x53b9*&?{kr;(=NGTPyedAF&YP?2A2Fh_;Qi}Y zw~t?4-z-US{qF1Ccdt*sc=h@6zb{{3U0gq2zV8BG{K4+KH*c=q-Y&jOApf4)&XZ%L8jfr~%-{L9-fudfVduh~7Oer1own5?go8&@Nz!)$-=lkz>gkM{C^{?VULzw_XM z{k!^T?fd@h-MgRsav$y8D8I6g_PX|!HGKHX&vy3i@=K%Q^2@)zdVO(=&bj&G)%zRP z$ver8ulX)sUL6*n(b*TTZho+OaMOB)?m%Z2|9{27*~RU<8$J$GunVS}cYpoyD}G!r zUK*c2S?XS{Ds-g1L-)3y{`j~4@BUwT@WB548>qqjo9+B0@KGJojAs)Nr;l?E^&%^iSSH<8Ls2?c(^4+C`W__w9`x@VUG2+KxL5TMCzG=|A$9!I_EPVIV_pEA{ zg(}!SwQu+-rzq(ke)0sP0c+&=f|YOkldo<+{_5%y1F3WK>YqV-`2X3(&DC;(zq+`7 zb@BF=VGXwYkK*_1_cyoK+onpEDg?v$_T%Lr7C%#L`ukOX+qMd~AM-PB_zM;B z?A7h-tDB?Gk1wuo8zhE~mBfV%OL>>#6zZ%dUh%}-$PK+w&9$S~U;NoW|E*71J?!7# zO6g@E_%FAHT)zL<2B~hnvfnP>uR{t^LU%S~UF|G+_VThE^8J_BuL~>k<>kiJ>#M@1 z+1Pxvxp8Oly}Z1=x_(m`qUi<2-z3O4uWnPFnL=M)F8{Jbe{+MavLgG}Uw{4R>s}!S zHr(dM4-fWF3w!tBtG8w(UtXaV)&Bm^fBEA-{M!2|pEZ!!`8X!qS)blUCj7azdy z{c=-LjPVODE|*I=9@?8={an8AZ*Evs+8(w7-|Nk6e=@uJ{Nl^kx1G6Z_2q_x+kVtp zy%Kwx?|+2;yHf}o_O~oE4cC2U`-bqkuin0V^ycQ_)i>B%kBTq;5f@xs|MbzD3-%N9 zw-=wiz5-&qkLK~e%F1QqtDW<3sq9d1g^lxw>u1*&U!%8z8<-*4@&x%iyunI({X4}l z&5!WeoA>SpuiltxVSnCy#e1aHm%6;d{=E5$AHDj#@e2F%<}0q=G+*(}L;IWNYrYPz zvA=1)=Ev`wpXJBzucC)3{;KKuGuPY(FMvOfBrE=^={A{b-oNy3E&WXFZ=2u3H8!l9 zp!C899D7Zxc_op zU)uVcg$4Gj6T}R=V*D04ZgG8FZ503e%ZpG9({jU`+n-`-{EDA;IcV&NN-#vlLWfBpRj5A0vFN2-7R4MN6li&O91N-;y$fbYr4~k365A7!Tko_p$qgf5~ z@Big@y?@hR>^&>h#m9eCT%5i@f3bHIR2Tnu+^dP(z+dP$d)0-#fAihi*3VzR&U^_xQg*fD{-14&U*E{}1TeQH1~i literal 0 HcmV?d00001 diff --git a/package-lock.json b/package-lock.json index addb7ef..755bbac 100644 --- a/package-lock.json +++ b/package-lock.json @@ -24,7 +24,8 @@ "node-html-to-image": "^4.0.0", "puppeteer": "^22.12.1", "qrcode": "^1.5.3", - "sharp": "^0.33.4" + "sharp": "^0.33.4", + "xlsx": "^0.18.5" }, "devDependencies": { "nodemon": "^3.1.0" @@ -1071,6 +1072,14 @@ "acorn": "^2.1.0" } }, + "node_modules/adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -1496,6 +1505,18 @@ "node": ">=6" } }, + "node_modules/cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "dependencies": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -1572,6 +1593,14 @@ "node": ">=12" } }, + "node_modules/codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -1757,6 +1786,17 @@ } } }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", @@ -2315,6 +2355,14 @@ "node": ">= 0.6" } }, + "node_modules/frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -4887,6 +4935,17 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, + "node_modules/ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "dependencies": { + "frac": "~1.1.2" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -5308,6 +5367,22 @@ "node": ">=0.4.0" } }, + "node_modules/wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==", + "engines": { + "node": ">=0.8" + } + }, "node_modules/wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", @@ -5398,6 +5473,26 @@ "xtend": "^4.0.0" } }, + "node_modules/xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "dependencies": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + }, + "bin": { + "xlsx": "bin/xlsx.njs" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/xml-parse-from-string": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", @@ -6096,6 +6191,11 @@ "acorn": "^2.1.0" } }, + "adler-32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/adler-32/-/adler-32-1.3.1.tgz", + "integrity": "sha512-ynZ4w/nUUv5rrsR8UUGoe1VC9hZj6V5hU9Qw1HlMDJGEJw5S7TfTErWTjMys6M7vr0YWcPqs3qAr4ss0nDfP+A==" + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -6408,6 +6508,15 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, + "cfb": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/cfb/-/cfb-1.2.2.tgz", + "integrity": "sha512-KfdUZsSOw19/ObEWasvBP/Ac4reZvAGauZhs6S/gqNhXhI7cKwvlH7ulj+dOEYnca4bm4SGo8C1bTAQvnTjgQA==", + "requires": { + "adler-32": "~1.3.0", + "crc-32": "~1.2.0" + } + }, "chalk": { "version": "2.4.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", @@ -6464,6 +6573,11 @@ "wrap-ansi": "^7.0.0" } }, + "codepage": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/codepage/-/codepage-1.15.0.tgz", + "integrity": "sha512-3g6NUTPd/YtuuGrhMnOMRjFc+LJw/bnMp3+0r/Wcz3IXUuCosKRJvMphm5+Q+bvTVGcJJuRvVLuYba+WojaFaA==" + }, "color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -6597,6 +6711,11 @@ "parse-json": "^5.2.0" } }, + "crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==" + }, "cross-fetch": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", @@ -7014,6 +7133,11 @@ "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" }, + "frac": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/frac/-/frac-1.1.2.tgz", + "integrity": "sha512-w/XBfkibaTl3YDqASwfDUqkna4Z2p9cFSr1aHDt0WoMTECnRfBOv2WArlZILlqgWlmdIlALXGpM2AOhEk5W3IA==" + }, "fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", @@ -8942,6 +9066,14 @@ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==" }, + "ssf": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/ssf/-/ssf-0.11.2.tgz", + "integrity": "sha512-+idbmIXoYET47hH+d7dfm2epdOMUDjqcB4648sTZ+t2JwoyBFL/insLfB/racrDmsKB3diwsDA696pZMieAC5g==", + "requires": { + "frac": "~1.1.2" + } + }, "statuses": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", @@ -9269,6 +9401,16 @@ } } }, + "wmf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wmf/-/wmf-1.0.2.tgz", + "integrity": "sha512-/p9K7bEh0Dj6WbXg4JG0xvLQmIadrner1bi45VMJTfnbVHsc7yIajZyoSoK60/dtVBs12Fm6WkUI5/3WAVsNMw==" + }, + "word": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/word/-/word-0.3.0.tgz", + "integrity": "sha512-OELeY0Q61OXpdUfTp+oweA/vtLVg5VDOXh+3he3PNzLGG/y0oylSOC1xRVj0+l4vQ3tj/bB1HVHv1ocXkQceFA==" + }, "wordwrap": { "version": "0.0.2", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", @@ -9329,6 +9471,20 @@ "xtend": "^4.0.0" } }, + "xlsx": { + "version": "0.18.5", + "resolved": "https://registry.npmjs.org/xlsx/-/xlsx-0.18.5.tgz", + "integrity": "sha512-dmg3LCjBPHZnQp5/F/+nnTa+miPJxUXB6vtk42YjBBKayDNagxGEeIdWApkYPOf3Z3pm3k62Knjzp7lMeTEtFQ==", + "requires": { + "adler-32": "~1.3.0", + "cfb": "~1.2.1", + "codepage": "~1.15.0", + "crc-32": "~1.2.1", + "ssf": "~0.11.2", + "wmf": "~1.0.1", + "word": "~0.3.0" + } + }, "xml-parse-from-string": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml-parse-from-string/-/xml-parse-from-string-1.0.1.tgz", diff --git a/package.json b/package.json index 7e8aa5a..1ceacfe 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,8 @@ "node-html-to-image": "^4.0.0", "puppeteer": "^22.12.1", "qrcode": "^1.5.3", - "sharp": "^0.33.4" + "sharp": "^0.33.4", + "xlsx": "^0.18.5" }, "devDependencies": { "nodemon": "^3.1.0" diff --git a/src/index.js b/src/index.js index feaf42e..ca24947 100644 --- a/src/index.js +++ b/src/index.js @@ -11,6 +11,9 @@ const path = require('path'); const Jimp = require('jimp'); const puppeteer = require('puppeteer'); +const mongoose = require('mongoose'); +const XLSX = require('xlsx'); + dotenv.config({ path: '.env' }); const app = express(); @@ -104,6 +107,38 @@ const deleteMember = async (req, res) => { } }; +const exportarDB = async (req, res) => { + try { + // Obtén los datos de la colección, omitiendo `_id` y `avatar` + const datos = await memberRepository.findLean(); + + // Verifica que `datos` sea un array + if (!Array.isArray(datos)) { + return res.status(500).json({ message: 'Error: Los datos no son un array.' }); + } + + // Crea una nueva hoja de cálculo + const hoja = XLSX.utils.json_to_sheet(datos); + + // Crea un libro de trabajo y agrega la hoja + const libro = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(libro, hoja, 'Datos'); + + // Genera el archivo Excel en formato binario + const archivoExcel = XLSX.write(libro, { bookType: 'xlsx', type: 'buffer' }); + + // Configura la respuesta HTTP + res.setHeader('Content-Disposition', 'attachment; filename=exportacion.xlsx'); + res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + res.send(archivoExcel); + console.log('Exportación completada con éxito.'); + } catch (error) { + console.error('Error al exportar:', error); + res.status(500).json({ message: 'Error al exportar' }); + } +} + + const generateCredential = async (req, res) => { try { const { dni } = req.params; @@ -162,6 +197,7 @@ const generateCredential = async (req, res) => { // Rutas app.post('/members', createMember); app.get('/members', getMembers); +app.get('/members/export', exportarDB) app.get('/members/generate-credential/:dni', generateCredential); app.get('/members/:id', getMemberById); app.put('/members/:id', updateMember); diff --git a/src/repositories/MongoMemberRepository.js b/src/repositories/MongoMemberRepository.js index 71d4478..315f225 100644 --- a/src/repositories/MongoMemberRepository.js +++ b/src/repositories/MongoMemberRepository.js @@ -1,10 +1,42 @@ const MemberModel = require('../configurations/schemas/member/Member.schema'); class MongoMemberRepository { + + + async exportEXCEL(){ + try { + // Obtén los datos de la colección + const datos = await MiModelo.find().lean(); + + // Crea una nueva hoja de cálculo + const hoja = XLSX.utils.json_to_sheet(datos); + + // Crea un libro de trabajo y agrega la hoja + const libro = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(libro, hoja, 'Datos'); + + // Escribe el archivo Excel + XLSX.writeFile(libro, 'exportacion.xlsx'); + console.log('Exportación completada con éxito.'); + } catch (error) { + console.error('Error al exportar:', error); + } finally { + mongoose.connection.close(); + } + + } + generateCredential() { return Promise.reject(new Error('Method not implemented.')); } + + async findLean() { + const members = await MemberModel.find().select('-avatar -_id -__v').lean(); + return members; + } + + async find(page) { const pageSize = 5; // Tamaño de página, puedes ajustarlo según tus necesidades const skip = page * pageSize; // Cálculo de skip considerando la indexación base 0 @@ -48,7 +80,8 @@ class MongoMemberRepository { return { members, total: totalMembers, - totalPages + totalPages, + currentPage: pageNumber }; } From 6711d22b9c9c5a5e8b2704c836ded2f4c7e78cf6 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 26 Jul 2024 09:49:35 -0300 Subject: [PATCH 45/73] fix --- .gitignore | 1 + .vercelignore | 1 + exportacion.xlsx | Bin 236018 -> 0 bytes 3 files changed, 2 insertions(+) delete mode 100644 exportacion.xlsx diff --git a/.gitignore b/.gitignore index 829fc0e..1861bc6 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ coverage # nyc test coverage .nyc_output +*.xlsx # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) .grunt diff --git a/.vercelignore b/.vercelignore index eac549b..476f577 100644 --- a/.vercelignore +++ b/.vercelignore @@ -2,3 +2,4 @@ node_modules .git .env +*.xlsx \ No newline at end of file diff --git a/exportacion.xlsx b/exportacion.xlsx deleted file mode 100644 index 4b24cccdac7d41510ec01132e3adb5fab8a0bb85..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 236018 zcmeFa-;X58mL_yz_o<~7NbrD=kX-e!+Li9Dj&S$*)!Ut`_~8-Z6~A&KGK*U!0m`n* z>dLuUm9?2!eQ(bbJ&Vv>Ru?qf1;I#2`+zhL2zJmcVjhO4`XhMbWqzz+k>+3EGml7j z`#v`_kL-tKX&Zcv16x;zwtN!%^yAd^WXj}|IwfPPygzVeq{dl zZ{rVtasBy!aC>=u_xaCnZh!Xm&CSoA{^H&BQ}ZWZ{(bz4zP-G?ySjP*)syzq)|2S+ z{i~bTSMR_1>dE=p^e6o%(cS&U`_~uOH}5aMdh*@n-IKq6^0z+wa(j7wagT@Y-d=sU ziy-Cw-B(ZE-rs-t;`7h%UcJ41cX9Xh=ELQC{LP!2+jkfD_|MyKKL2p>>Sq_^4|;q~WIH(}vbX-V-}~AB_V4`YN9KS3 z#-8ljl|P*27he>z_Wb_h;usdbzP-#z` z%d&CSF69+~i&wAkrh8p%nd!9O9zDpkK>MF{+2dBHl``IvpVV|7j7Fo*;GoN1XaU;) zOl$altD6pE!WW=DzEi`eqv3emC42$e^>zp)?u7k~Ks|L1@6A4dPjAODko@sIxtHy);~YUnTi zhkx|v|I4r4KzuMNeG3g=~lD?EWnQ*WX=SyKtjR?!4!>Fdi=8?Bj2fuDiFl zAMdXmEic}_BjD=h=6ZB<>+FDqY0K*2vybn;aW{VZ(Z+2rF1~fOJ-&EPLz{j40IT^x zO6vRZ+e=dO^!nocJzS9Ym-mtRyPKa~UOL|H#nlz{>+0&&?akfIoBQa+RW!P|a(2nt z)z?I%>Y@47JB-VBu6M>zQ{SwfN28l-*IQ36zhxvoh>OBm*?-RECw6vuP2D)V_;`Qu z&L#5f0^W`_Fw2Ykw=N}j-`&2laoOEHM*5q}>zgQheR+51dS-Kr_qAj%E?}>m!@j!y z?j0j<@2`I5lDWLNxv`Oxo1cx}UcCF@!tSo#zqPUX-OoVLi|F(Q&PM$sUES~(V*VTB zaPi(d+|RF!Ct2BzW$6JS5v&$Re@9w+nHy4+Mm4QhoOa1QZeaLKI zU%_tgTlj0U{ne8pCNbB?GZ$m+!~MU|L{Bb0zCXRhS5asGUt8$Ew$M-hKX0LZ-|}zX zE?1@)R@yiudtbZoyx(~p?>AT1*E_Q&U)~kI_Z=pn*HiqVd9DbnT$T&54{!0)e935l zaNpcs6wgGrH~0VU)&1Mu+Y1vwX&1}LZ|)AFzqyM(+#qJtD*o6h+cXN_|9-#P?3i`P z-g4Ys+^=q4@BcV4fBdlAD8&?7eN(Jy9~w%GfMXj=dIzC+w;$42+bDH(Ywbd{!YEQ} zW2-mY#n?SisP=y5_4XWjTyK`WhE8i%qM(JJKSy@*gMf#QEe1)yrtA0i zw{`tK`uSH+2A#O`Bzkr6;j1Tau+qiPcONilcg7dIxc&w~(O37kd)797i^WG;z45@! zsy2cbo)3mT;}5rY_mhjexBD?H{^~GP*Y8bBd;Q~1YRLARc>#wpIZlhD4~qOhrUf{{ zLwot=&E>0md$6rPF@3lH&x0kr`FMYMyLNcy^5I*5J5;@n-O@0;O^~3WWJQIp4{BtzrBGK`tbJZ)$|tgeqlSn7DQD;bcOUj@e|`Dw<@K4dfn8&RpG0p#^}?DQ%s_!t{_%ewzM!waF+Pg@y^$p=r_TL1 z@PD`Cvj3RzQsPS({yy}7sbbMv?6~ZoFCKrGBkdP4e^Gf!>BCn+liy%)XzB;5aLfd3 z&9!@rReR&O^Pn6?vHr&R!_uGmfH+WO{txEAtJ_!Cmj#W@gnD+fg>8+n{jl%92(12z zv1(wDF_8OTU&HU&|KXlYM%2D*56-FSwTH?2H|zzK?Mi1G&5jxGM|O7UL~(QUE&e7u z`_RMG*ZV*7b~Q#;KT-VAn}>BsF)+nOm%SHt^Yw3IpeKm>f4tuBPThULe-+=shtu1F zU0>h4{_gPe`ffkr?pbHnFa~-3etY>Qx_bSKhxJF<6Z=nSzeDoiA{S`$m?2vEVB%Ud z@Ph}ud2~NpmJi3x50_6AEyHA&4;KM7mjLXK9SpZw+5x{evir9-AJ;=qUBCaA>9Qk~ zcXyd{<#TM8?H7u{f%*YmcK?fTmmPWvomVFwb~tY@u=Ls$_7{`Rp6LZ;Wjpxx5C8T5 z^`HLDAN|Pu?{Dq5gYSw>ZnK&E!#9Ep89TFGeSEIN-G|%Di`PX~0q+JE*%DuT3&Z)t zk{Vv$ygI$T`Ed9A44ZOy;OF~~@22nW@1j>XAKyc&8NmG?Mf-o5T#8QjNwm+z7~i}` zIN)#pgO4}&fA7!#*)qfA;q6{@;K3U;pm@$Gdm?fB(hr{m1(s zcX#`L|MNfm&kxTOU&BF-lP}FjLE4x=CSR|WW@;zdV zt%5_a`VBTNuD{#=aq--qnEOB2f1rj9`xc6SA?jf4L8*ZGip(FJe2G~IuKxQe{=-ae z=C|p>ub#X|a!c_Fdt3t=^VWB5EE|h<3&Ee8C(!QKH@B~mOk)qk{*O++yuN&6XbZ3I zt@-!;%?JG7uW#<}Z{Fd@>#K`zZr)#9NX{tO3USYdXP< zwfPB!4nOzu_Wxnz+tT*3EwQGv9xpcf#hXK87au-cf4Bbl?(0izAe+3O!`PC{c6yAi z%|eS;f$~-lQU8>0dPt{O8;!8vRcib7$E$1jZjQcz%-6rDdb{u&?k~Q+zAU`lvK937 z>-`LQR{rHzPpaRm%hy*Q-wjIC>D9M4`+4%KC)MvgDlG_ASsJly|K#-F|AYVR-}@Us zGXMLx_Lj|=y!6A3Tq*81X5-+b{4f)zsbR0N$Nt_VsYSP!Z?JdM{$iE3_U6DCW$eWL z93xiPTJt-4$aFLRQH^f-_Yc?!@{aIL-u&FSuEuP>GCzh$Is3X{dS*sSOPx>1xg+m6S(I= zOr4(g25}sB2jx=*Xhb0M<-q$Z5@j&`o2IaI8ZU?ElYA5HhO6^z8L@yd2{_qqCfj^= zp1ow$1Smx74M)E{Nd`&3`?TLnAO7hwIAf8g!_jgR<+EkB%ZIxtj@vE9PZ@u<9jZJj2&Kfv*!4SiXHon!C@`7RG;jZ=?ONQ*fn`{UEl&?!; z4L8R5y&njGzqSa_PWruGH|>?8_5@(i@;u)~Faew8RJwS~z~M5RZL?^Ut@E>*tpK#5 zLLB#6fey}C?&-7aX@o%@Z?+iisNL&|!c)et@@zHQimo$TffSLD&hQN-)T6CB#y%s%Jdx_}2aB>znBE?!)D)E2ObsMA*T=rUAC_ zzDDvECfl3ny9jeM=9HVKpN$TG_C*x8+TG9c{ht^ART&tfYNs?y*zU4enYR1*QsRU= zXG9>ky2IJ|?kr#HY(`I>oMzh^JAo+KnRJs@Kg3QJw;Qg{^5JX~O)!lXALb_Nv}I(c z{7hgrvo%TMF!SaFPSP}FUvpN$NmGU-NjFVQ0AEI8!7vX^8Pr5mB1X3)1_A^YF<`}e zgN}avBL+R&Y-d??Iy_&B1wb~mEzCs&ASxOpu#6!Zu((f z4bC9#n75MYazr4v3HbE=^7(MPQ4?^)lgr_DJN)!3wH^~ZT9KmF4Y~#ywR5s3#p!Z* z2DcTyOsCH_ZOU*rFYNZyRy)}KoWY&A9bjQLb7YsWLJ5yuHm`6DmZL<+od;~-Mvy``Q-O{*%i(CVH9-SWbVe$qE!dq90~n1pY!X1{ zqJ@(Kf&mGVR%a0RWMW(h&f{q?$~~!g$Wcu)G$pjHh${!_;?4lUwqA`Lj6zgR`+N+U zHqEl#c!OXG58=dsN^ZpcBnfqOCL*yyj;0yhmvz)l)b|wZaF-)`us)MHYeovBSbv3? zVXF(TAPuRTs|v12nqUkwdTDzwkXd*kxaax#q#j8VP|yd()?aB5IGP4S+rbwi25N){ z?D5QZ!%?>6;T#KQwprEIoCZ>jc-l{UfsZQ_fo8}lHcgSrGQpAzN zL(XUf$pZT3s)BRKxg*=1ZmZi)y0sB!n9mk4%JbQm9mQXL6(MbNye;m=1AJ1V(nwH< z3r86ogHn1izl;U7%hqC!Ck9b+0P}GY^a52LKKJc#Iz-$7mRT(5RKV`F1+@=9EDZ&^ z=8Eoy8Nfa1o(>pe))$DN$4cmhyo}o^5YXcofCyPAZfdrNEnhLl;uQarWza}avn_mY z#PGA{!}Tm%<~sai!M}vpsLKQcDH#&?2c3|i%|u|_LR2bxh9wFX3O%u7QvrLegslN~ zcY?vtIq3@*XArU}xvJo_65RFR2u|ALw7Ptg3z6kB6D+NXB*llkvP64W@-H7htsx7LRIVHA=;3xn#X^^npvFV9b+;ZyZpVm4j)$WymbTnk6C=@L6jrKF`$^n8{8Q;& zw4X`)(=9fMU?f=PR8anXLuwo`@Fc{MxuE;~(2_bACESeS9y0c>+lmp4jy{iig9LG@ zHow|Jr1~r$%T-=62dcnqo5OGTWZKx_78OQ<8Y2W-a9};Gdqpe|`zPah-KGFkG5}pL z2s=hBvcWlKaA>h?D}l|JBp4+#T~Ml=Vnr0%J;nY2@12uGptq+m!IUB#zn>go(-}2FIgTFgDHC#LFi5}d?pgH zC%Bm*E;mH*q%AA>sbD?RjNN>Sm_^8~nUk_0LU?0N6mV04d%c)uk^xprY6=+VGX;!# z92F3I3wp{Nn@f6~UJpCMtmmlBsFEKH8w>1gv)yV2%*0?yW+Z8^9kSP%NX&LC6Iq>L z#)wmySf+yYFvD&hBi+CZLbqVpgNtbCC8vAL7)%y0(VebLe+zjRuaRJBI!PRyj|$|W z!Vh+bkzDYQQ4oD*dBE^zZtkLX99?|+A8+m|UwL(L`#WZfC$0!ahAT$MHN;l)_tv_u z-R&bL+Ly0tB&gwXy3I7-Xe=NnR}H4*Dkc<@h2nQ?L}HMuf<4`AT`6WWQUKm^FEp>t z1s(S6b5X%*#{}bJtH3;FOi*sJS|AS-elS@dnEF}8$0;hcpnwyCa{Z2>?_H56^F{IB zrEOz|RuSiz1H~zpx!pl5%l46=_WKdhv*Gx+kjR;@C9XRbc(yymWcYGu0t0ZpcW0$m z#kV~%@RFfOW(>!nMffRV2w2QTE3-Mdi7-vemo$|J+$NQD!0u$wlbSOco9v;fITr=o zB;|3~d*BGOis!HpSw5Dsw5G{+Z(>EXClBjD!2N3PYQNemGOj9jjJZ~Yx?>KPwtGp^ zL&$*HFcMUe3OHOMBlS%7w#I^Vd-VoXk}FPn{m|@}iO8^5uVA13vo&Z8d6T|on>^%N zK4P(~CSoxYs)%>YG1xTiC2>oGF(X02Vf!i4LMKRms~H@Y zHySQi!*MpzHNFv8asd(cRxq$B&CkyB33As@k(3P6T1%@D^y`!Ou<5A`8+p)J&p}&xdj$;d^Apxa5PB7n;bF9J+ER@ zYypZav$Gt5u4=!vc&jl>I9XwL8*`V277eN-2_}M0Xn!ITnMNd5eaO4&${adXq-Rf* znlEy=1K#@lQRrM%aQXIv0Yyys2d5U;OfLlIvll$Hk7Gy`XEw!YESEWj57~-iNl6(A z3Wg%bRtW1oW{{gk$R323us+k2zKMCb7Yd!73KSK)&Wc=I@2b^4bm(=N^ZHcU^tQJfBoSFH2`YP@Enlp$4FSioo=+#>ZT6xT1u&3`4FhD?2R_wI1dcNJ&RcAe)iP@Y=CT zDtn1>fSG_>vBG&H29E`de3vysiuEbO4#Os`K`>`26QQf&3W-x00)-gkp9Oe!T_oKbpydT-^@X%A7me@0CLR1N6@0x ziaTPtMuM6a`L6IIcreBSJKJExy_R`tK;>X0IGhoR%x5BUJOtCQr4=D7LG1cepdRaB zw~lP0G`NdEx~2#ahF7!Pmu@OB#`u|dla3x5UC7HE368U6Luo6B3&{l7G)nUF(Xg&qHH`NBNERawJv75y{^U-4C$ zb2>tek)X2G5NGK4B*eiHCUNd>Yxe2a$RDew-r~uLX`-Zc+(H~NIOS10C#7?o=<%MZ zsP194-FVuG2cgF2q-qm77X{p`=GVc}0O^7<2n!Lkw{GPC7rnR?OcSGt6-kv#jGwkw zoFIR))r-YZ9|>wY9G|asA|DILclz4E%HdB^YzBpfUxXqv7za{XIwMa7Hr|*s*BhCN zXWaClpM*BO=Z`|?qJeYp1!LS_6hEn*gjfj9GrI}uaSW)Uw+YAjkZ*+p&zg-p64Yin z^CjOX(yV3?xMliI460;7jAamJ7ypie$UNVk&(4Q0qHgW;MQ8YZ=)S`D211$N3_fQQvCbLs%LMN8$1wq6yU-SP!ePC*g`>0WzI=ZpLCuy!gc95-dII(O9~7JIz~}}( z)=Y#3_p${Wn0#y%8h5je*oxC_?5+kB&P55gz2L6L)*})Ta2Q)j!Z6?5!zkx!VP$FM zA;sf%vmbU4zcWjqhZWM(z=n3?es)qtit&?tVv`PzTruvQk)S3+gnlqNy~viC_?=^c zdh(GCsv2j67TO`(#X5$M@k{%jNz87(@gP4d+Z`k!FFqFq+@$0;!X$>UCdz5lSjjja zD;cG%WGAKy0w)|s#1>2sUq+RrQ%pr8K|MRiq6Dd<%gv5CG8W+TY*zDw?HDYwFWSMK zB9V8P1B;vpR1g`i%(fKHh*v%_ zn5rw0s2NPK5{ZwZ0l!>ejp1q#_fU z&FM_?fX5ivIv|Ur8w>!G#wom%km<-p0XGA<^NlgUw1k3v+*b>c<@IG*+~a)NDvX+N z01qoI9Pm*8dc-KV%QGD1NHU4G=cqg;G14(Ve{%2`#HLRSs$vO>K!mLZYkoT1V)qbv z4lglpL@|7C?$@d4;30{v0_N*rfwVa(+_;A*3b;waFJ;U`#~cW)EqEB`GZTbz58LU| zuGJv}w_=^$5|I3}%Ob>3vn>+1r`dR3#9Hz-%FyjL(J;c<%R`CDN<4WiX%)c5Pj*&K z1(@1dCqX^iz*ptr9t-4jh~q7qd^9njl5yzf;H;2|NaS#0OA2T4qBi0)-27Cqf#WTY z(qaB6bS_#rDJK|Eu7};RL9OVN;5?KQ)T7K&T19d3)22ZT#|g1~U9$)(TW@n?1NK=i zJRoDin$Q~~CI(TG0qd1+FcnVZVUim9!)^k0+a78^>2|uoq;N*}VDLiAXi>mT1n%=< zg6blHTF$O6M3#>TEbVbbsKT%*#{x~cMii@&Iddc^I4frL%Hum05HbvE*^mZOQ2>XV zgJD+@=&zM3z|{~5-}ShxlEl%OiozquIfI^F#^WOh(nPfQ&z52 zyLhRIdAec}h!k2uWZc%tbO|43FBZPC>|Ra<>@g;G`&jP;YiZ6&+a`1_3b?t%gM>qq zI1LqRJai$Ve9kVz+=F>o1j#_G_|X$~R(9u=zcL!0pXIyN=Eo7Vz^Ms*e&v`l6{|Ge zl!Jv}qA8{&26H4R!@3bdEYHqOIp?yC{kDK$T{(6JQc?>`>)>8rCIbCAb^`PrU82@a z%0-CS^GBg`QNc|t>GC3`((fcPB`idiZ|3Fw#g+h@NfMwNxzzxm(4ljl7oUVje7Mhdr2J>E?`^IoTJ?-eo^UuJ1r|o~8o! zSTwtRbJ#iLp3O=<{Ak5pNSf*lKa8Fyu@8pu^-UZQF%>mm2J zed*bCC`{YSAy#LY<~Ary_^=-PafHttVLo#p9Qk#o9@*X??hNw5B1T!{TFgC-K4a>a zOTX&DpQ0-_(K@fp?1QAN_^TgBpB?_-3m9CS)jJqr{8y`5^YXWXFlg{w;V>z}-I#nd z&NfOJwcczIHE@?-5hx1B4VU!;HxmOZzYk=bgi8d8&@vCKU5i@?((`fHjiZ=jun^pw zR83nrUKm_Ea96oM4#t>|!&J0SWW~0Sm+{W`Ebd6NTs`C=i0AVtdHcXk3Rw(Kw;SBO zfUoC^2nEJ>XB$%&sP)6}be#t0Qtz zz|B(ba|^%2y5({TsKy(aqJoH z8GBoU=CNmV)7Y~D?y+Z#f9x6O8+%3_G4`D*!i}GHXfx@fpe?A#LpEZRdp?_GxMabU z_~K{B{OpN?5C%~Z0)^H?dtsT#Ya)ce-Gm?w3?V{0f^$JP5JD7i5<)O$Do9K@BlYG5 z=OKikjv+)9>+W!*6xU(Fz0l0fk)TXsp$3p$ zwg$~Z&*-M1X9e6t&lofGxaR_%0QcuY-rYC!EbW+~ucF%>j<|wP5OXF%$Mf^i`5DUpXmR$b09PoxZX(>=_>3CIzGgod zIubO>IffP~qJewhxwkR!IE~lCN{#hgh%Dd0vo!a>?*m36@DTrx<~aU=h4C_fiG*}d zMtY};d*dff9B^J+D9Xahj|64Py=A%+A{fM)v27;NhKT`{R6$l}Ke$p5kpZgkTX;+a zwH>#E3)DGl+DXG(VWO#V1Gk)5m-a*-2SWTAQ5bdTM@dlFEbUmXW(rOP#-FIr|sN`EcH!rS3roNxhUWs zcR%9IL|4ejha%WVJIARFMh(42SuZLM+U;(g3O)7NngAD>!G; zbR&&e1rLpE4Vr0WqZ3nfFJS0$(br8QR?@Jj+d&}~+0kE!EFX(l+Hox6XNW}s-c(`A z4u`qYb~->Ysv2(?b&4Ao#`Wu&MAidsu=i9qK@eDS2Nz%lqkowQZsZPY>*0>AK{Iy< zjm?ix?p7}Py1Bzj?zz*)^uyocLS%Uz5f;}#9(G2nxMha}U#$+7&ZwWtDvboS%}k8S zWIfattt<{#NaNH83!4~WB@;|~a;RrBY5I^z18WJ_Nv6!HU_CUjn=eXi2aLj;ltqqt zFnu@|1>7{?E^0me!@aZ+QSMD=0R(mX3O(+Cb8(T z;EGfOewm4ZltT{JF<4486M^T&Ess$f>7p!lDnR#mKdS9Hqp<)99lp#(0q1xN#<-kq zoICFbc^887ef9!7V*Syr0+aY@4}2PT&3$ANEg1>w87_fG-FT#gk5KBpp5P?#vDr!2 zNYTWAN(SI6s$eQ?CL&F8CCU$((2CgygA-aWC?=11xbPS)=A^T^)iJmj6$RW};QlvU zK)O{=@6=d`EH4*WT=?^^Vw7Eub0ICY-NV)3{Bey01;hIsB^R8>M+NF(fE}oWFBVS5 z7Li9WfL|++pl^hiWK2<&HRKo08Qlt}5a*(}n+B{YXn+t9icyFKUWhC&4Om>5237R2 z%Rww;pmqAVomy$Ys8e&DktsX6G!-~%0V$C=LY)NM7b{`oi9wb9A7hU^w7kni=228& zrG2#!NRMV7*jl6TUN{;dTDy6`Y8oEE$l!8m9)pF*@~kEV6{bNIj_h)P%-r3CHH|Eb zM}jh$t}?1)fq1Nd9pJ;AA>Gg}VJ0Gv8hU;mU(&0QTvD)k=xwx#8iexrbJ5y8^sFX^ z9(9)BZD=4$Wch}krG14PRn6C_;Us$#8jos*wbdi3?d# z_ED%ZF`%mVQF%9HfHM*KkXiR4n!*O5>b}Iorh@ml0;B?VLqd+;oE2_#3%SSK1YnFI zKp%A+G}U||FXNp9SllsgVHJ?81Es0t%AAaE=&SKr=5ni0W07p0b@V{Y+7TTBcI?xy5466SlTfh zsKSX|jw>ZNCT0v0kJ(62V;m(%6aZ(*QOZj`!?9pJmH^FGB zVpaw?EO%C;0L#NU^8Bo}Ep5b=6hJNdhRJ|MqO=5-q%)+uqr9=0(Q?;KMPm;S zY&{Zl8+>47=cKi{%`m(;WUbxCfHB}fx7ET%xxCCmUdG1*mUaves;FR>V^m2D&m^hG z2^h6M5rTrOYuuN^127hWTU^^+UlrJaIXGG28*)UVDP@6T1xRInfl7Vbm%95h6}*Q6 zwhAaI+zWl&b0e}OE^gWg9^1-A0XGG>M-2tK=3-DW!wZq+bqZKq&@Jp$;X(YgqeRGD z!|{Wf6%f>ZDyXL@2+ZsyZfhpMfXbe1<2-O^9?nE$hJtG*9;{L8so>m0PEBJW&<-s~ z=7h$*HAqbHmha1@edmY^1|x3HspJ3g2ec5J=c5!y? zdik*ZGjks|YdjVp_J*8gXq{;3|6G9ao>~Tm5E91D^Q$*Z+d^efm6x^yyb86ZWSWMB@H5 z!_Yd-P>v_15%sF*A%5CxhZf3EcCbrQKDWQtbCS;E%9_{m|aFdB8NgH++Jbejprn56a;0o!;WZ?up%a%T}K z$ay&fk9-v}>~Wk4k+5E8P#<|lnOeldXn*WU_XWlx5eL+_xfU*-7*NRptlB%F&o2{^ zXXmHq>)8->ERb7VTO)|7o8=IN#Y_UU@No7h9p;Qi<>HWUlZ(b~7OxNeFnaB*&hTq6@V9rRaXbYD zX#K!kNii}s{VFPnpY{}!BJaA>OLajaD06BG`vT{VyDtUlA&fy)1BR1Rp|3U*nL)w` z*6oizs`)vgQKLJYtSSmP`63wbrGxvN<64Ph!TJ1Afw>981gPSZeU5IS*0ssRkVWxG zP-VW-YWUP_5vdDYI3{Cx$eFfmFeMXWEKNg!;!GrtHrN)4l8$bwPX*^;f!#DtHg|$M zQ>-ZNhz&U>xhUXf0r$MI8c0+~68ZQRBFpV<2uKHnN52YB_BoCP53`R;FKVODsC_&F z6?ST;t3{l9#38I4ah!Guo>|I7qJP9$MbC)aO*fCYjYbARFovFsqV5rACHEtawB6c> zGtT?nGb}vjRS>ezp(|Xr(Q4Ja_K~1w$Pk8m5N%M^OOGcA)VU35Fy*M@Kz7hi%S7T3 zWk)}Kk5mVokks3)rh@g1yxlww90W->CuLDlDO}WE6mX9`_c=!1-1|1rxX(glc{~I` z9b@pT5M-aDS0+8Jz85+Y)M$$%3MNjk)Imgh7gHi4)8m9 zI6%!ea)8iHxoN7bD-t1?0|!uAtaQ?fX>%bs@7K@od<+SyC}f`_Vz@93cDQ!oji8n| ze>p@cLpXKVm(JG`Y#IyP%>g?Uh~#X#08-LpGZ7f30Kbuk0(R@oW`NK*z!maRb5+(! z0ansa0mgYLz_4Q|P=zD=9Lhq70f#YC35$&cRh)En=AsDD=lI*vKqSC~F98;rrUb}o z7Ohd!2j|p;EK>pd!%PNPO+~1^7#h~Opb>=$g_%SN_go+ykGUZ2r-`P5EJT)XE?{Y= z`KRBvlYrRqt3r!?j&+$L>NqkW$#Ek=jm#Z4&RZGJCtS|EQF!1HJsgN(1_TA&oU2Z=9p1JZ#WGzIN_v2@A zVehYsEcQ7dh15`2DQ-dGYeqgwc0NO@VQuDTfzF`^q#FA6puzcLfsI4YaL>>`MuWL| z`$}Kb%nz^iSONFgGX`UCF6gZ7r7xu4y<^YfbnN&04cw)bbC*r3a975ey?3~of zX$#7IqpyHmmr58&)$6!aC>TW)fmk6-aNYFN2)oPdPfZp1=?`|f-f%N}RO53-V^=L? z%W_e`O%Um7vp{GeUADF~WSnnO5Y#!&mu-;9i%aO%!(G`wG&u~apdfzIxFh&&>aCT} z?f0DowZaX)^^&^+a&J2rP&M+M@PUC$L>@-oG4KlXTqp9V*5`~Kq{vM2=PHT@&XE_4 znHJi(C`orv7J~DPyrPa8`6?PX;FuID*dbX=!)qf!;gEtkyXe|@6eP|wpy0CZGE5Ar z9Dfu|4%*vHWRB;bzJHDkg`OU=oC?rAGf>+pqHiIqGbgk;*%I;{b5X!O{M_SaWQc)+U|;6UP0 zt#%8}h;VKssM8^KZKLG|2?pu}3KDnRJr~HtK&nAU5%0&dzcrl5_})-cXH)iBJ>8#W(Rv~j>;Did#Np*98&?ub#oa}YS1hQ zo>|10MV#z5xVlaP)f0m$yBZb4;!rAjCK4Yq;*<9NJcMSEP8E;RO^C?VXChk(I3mFk z({obUY)OUo$#YS`%?=(B<9K!lX>FOe5LrH>!qUQiNEL=0a1aYs(y*CdUvDsKe>w{D z*9MyqGQp2UB8q!w_4NkiS>um``2i;&6N$~^&)RxygRMgI=rg)$^jQJ-=rhKQeh1Zq zS`s{2$jkdipQVLIzluc;IE=Nw;z3=Zk)W2SkYHkwj^rajuFgOG{zk*l24jsq+?e3l zvxbMUpKNxh*xHj>Y^u%Y*$Sn4*gnl3)&88(h&IHbXag(j9(Tr=aZh`w9VhRykazKo zJ4-ueN~ofX0}fK*bbc36kD5oxC?o;k|JOcx20gD|>thcbM)O_QIBHnbxVL9qyYnoVo|3MU1s4_}Ccqy;5%*dms=|sR(x!rD{&G0V&g2@8vBIBcGcg@tf*pKJT7z(b1eMsx z1b!_a6CR@jm_TrNOrbd}SCu_XU_}iRT4@*IU;c6yD$QdN6b8bCh){(hQ7nsz0Ivjh zn#lY#QrLcn@^Bnp#uzkUnXBPTT~~q!c3=?pI9y3lMdIkg*{~>=lCLK?t=k)DHt$p) z@o~Y{qp_eetBpI3lhDKlE^tqHxWFJYIdtKb>&YH)fq`BwFsxyEsG^kZ7RR>|+!>8v zvCL860>chbCuFKUGuOI^?FSne4ySH>E|dWs04gU4R5=gV&#B2gh7O{JXPwBJ96<^b&$$4TPwIknI)+q;QFN+Z-ilH9!c4Jusp089YUm z^chzkLxCwt5hH&yxNuaFxJc&HuaU1_yR;0ZK@|2Jrep<>GGtQHd`T&oCm^*{7q!QN zWx!w?LFJJrZw-zaoKIa85G@PpptWaUh3dYl#@2q`^ibwWyG&R`up1Yr;e0t3`V zXrCRA<4Jy zKd)y~erA`(H&;$QU7bI(u5uBxRmDLuanQVlJrERZOT?i90SV?&3w2^?GvcFw*WZCh@EgTItZ}>Dn42oEOX}g4JR@JXVWAhMOKw zmx2D+7~|Z;WSX?CSSfzn5i%T}z@k*^myK|o%Z7PqQsi@+f*rMra`OC%331K<iE4k#=-2pQ5jtBlfL!PQ%?I=D%~ zy?ydLPZI0rZOF3aqYaWomPBTPFBF|z-u&xlQft2GAV;Djc z3An&Y`hw^RTNkI#n1{1MSk*SpkB8DGzyVUViwbaoeIRf^RCP{b0)nBy=@uloNz4)) zU};_sFibORoaKs=RIKw)4>;{9(NEupW=m08Fsq*dqw%Xw`IZTMt&$FafnzQACG7EHHtAUM4V1t%vv* zR&2G+kvP<+Ynd{MtOkq$!wz-ohZCF-t0m(o*k=qNvf=?I@^DyHG#F>wY=_%Wq7F7G zSXFx3dey@nlm5$T^1xarW6!-zau z0~iB>oBC{FSArGsaDYLE1E@RF(=&JA00X@oVAxU9f)!D1b0p3vgKNcPaSkRh>;;Yq ztS7Rg1`;sJk)%^V$`OcR14A<{CIpsPodlCl24;Yf-jImFl?uSX2g?zG0u09h3XgB7oAa~umqgNu!jqg4_6%_f<3F>c%%S1*EbW z2u+5gQKH6Ua(z`B@9M&|QK^J)1uFTs>IIFj%a6`g2RB9JB@IPdxcj1`#|~AR&w_}& z@Y*7_0+jeo+`y4qRJE368@NF*x9vb&2}{m$%~7);EaL?JCMw*DR|>YErD|x*iYws4 zWun+gxFnIH{WXamr^a01jeBv@6&{XIpPzsuIGJo*J^pYP`c__!usp3ybO>XLYGqsO zkH%Ke62F;3#xK$p5-7wllL?qTB!HQkrF&1fY_CvftWRY)8f)qfu5%n{uI+)CCT#8m zT?24OG=d}Ut!k)XziF{`Xe?<~h%HraEN!S-c!kyeRRYP10Z7yPbfm+A1<^mO11s@e`9T3*&hjP_0zYx6XxT)&kp#m#v%mktu zCGGv=6BjBgF4?`m;wfz6h~$%`E>xiI?(GQ{8k%N(9= z@FDYi!8QO?@&M(nf@K6SU9ikX9x&X;16v1_y9rj|0}mM9aPU-B_V9oe1rHGL#|B{C z7iFM#x?ot423Bk{=I~j&hs-0#b_c`Uo+yq3ZcrF6DsSto`=Z)WPk1aD?E!xZwnfYT*om3dnE- z1>rD_^E+YM;CJ%d3dS`|8&>o)=13fB7IgX`E9(Jof?+Nb!3Y#a(vTP|1TbaKo8nvc zIW+q&dq!r(L3XC7B3&YQ_F_Iqi0VHQVXy@APrr(uhimB&rtf8G%(b zW&!0Ykgmk^hFM^s*K1(dF=R-r7$<&{UFeyNjavQWw!q-X@64I?sHmjOnvWIi%9t_o zDmD!8NYFo!=EE5?0`}O2M`)feV~f zPONAqe%mYn2XNw~TZ?oHY>XP1!)Q3lXTx0Y_eQ*pL^??TNY$q}aTPl9o2kSG5^(cA z5LG>;oT*S>&aJc^2v{3r)qc01gz~>Z0fHlM zJ!H5*0qz421sDVhbdW*Wt9yzf%{L_oticRe5yymMSBPquyq%hpD6nacLNaW!FbA-x z;c|kgM%_m=u(J0PT=Zuz6l&`P5n3M5&?^U~+Pv@cw_Ar%Z#9g)z?;Tiy1?lU$SYy& zaU(>(SI@f_p#SsdR*&)rtmtCGu_$DXbbGz}p18nf*#>vJ*Zo3)VNVh@?`D!tGl2(0 zEI`?ofL+Bzz&cvXMF$ZW8%mpFEs(w0zy@3C6wYL5_JSo~MLd>(LB=EK^-ycF7A_EJ zem1bcqu5}D7!wXj;jZycucv{|5!@EC^oO&i#U=!%hq`TGI6mVg%G-^l=nZHATxlF| zzeB_EEz!dA4?3EA3IoA9geC}E3lwQ+heBDHAQ;|oov-TQp#>{jOc183zF21X2n_U2 z5DaUWAgowp!qF!fY;1zmx1e&7JZ2j=XtFXjNtz$$nsz##wmERp873@k7lNKC9iB7WOz z1-NY86!(y`0|1-AFziPnYau_Y8w17-$2fsrD|A^%t4sl^GlUlIAOH)+IpgKi9TqAZ z#F2WnkfNZy(F21kl`x)BXqo~G7>=WbfmsbSV4XcQV32Vadbo2*7woVE3=Ew!7AQ`k zXV%q-y#JI~Aw~QqBEVN@p-x4O2n<_*1rA4nLD*HOI|+c4y^j*F!H_N}z!Ht?F)Z$P zHPsK7`D%!B=Q6Fr8t_9tYhY`FT+V(tlhOz+6;GR2jjV%*2MhuadaVv>N=XzCJYb;T z95AlI99YrBgyT;rAA+3DM1tHf2MjZ1&ae@PTqbNdjq65%(dSzn%E*~mm=pji`xVs= zg11|O5G->wT;cMb45S#Ov7`QF4ezXi%1XcsY&f<_Iv>FW*4e`a27wEvYzZ#F<_-fF z80hs57#5~NYQ+-q+cpT;_Gu5|Sf<=jTVS)z8uepPI3^nn5meO8q_N_WKf62QSDO@= ziVMi(4SkZCiu4}35mm=1m$}O~k^w&B)|(Dw&lQf^gu#hHlyH+kK!yZe=bGd0`NJZzu>!=9ZZmSifTVljYQS|#xSOkg;S$Qd$PtYnG9UW36^ zY#87|P{02LGO$$aX=CFFoQxdD@C56bAf$bKjsEsQ2U}aSkPM}?Y&nsfm*4hIuSEi4nJ z0ico$F?{z1)4(#rY+$U94YmRaiVB3;V56HWfJnzq^4&N;HRa^hhkjOc#Qj%K?(T1~ zE&Oef7wh2!zm}g9j5~@GRTc>G`^7=}wz>;8gZT$>FBV$&d)LkOe5 zt)8O#{uZ}2vg<%?Y!>3VX}~gJ2d=H62^gvU-DAV4!!F zU|55zV1*e|j!R+d$K0Y(+i(&X(w(P{#e<+$!|}XEf7k&uSrPzsyMl2X5P&rd5`dvT zGw_)9G5j_>O*=^_?1bTG9X!L&ATukNg@fKxf#GMM-vThMVf?MYV#*OHl=_p z3xEc!u!jZ=GDg8vGK$3)gHd3h*C;UTD96wWET$Zb!a1!0O6t@?N&@@zy}8HJx6dHp zm&4Pc#-c$6G+dFP)onQ7ATk@sz%S(^gRQ|4WU%2e?!O7|L5jj2GO(f`0}@hDlBRAF z80aMf!;T_@6<H)9&atP*C|CqWIoAn*R2=BRI|>A6U=Ud1 zAy4sazFD2_HtPsQyjcfK4*Z0V2(}uyoH-aHf>mI6_|9=y1=hhs1O^pEfW4`gLl$ZN zxq$^9!-S3%Uc_&TDZw9V;miy7?+Ax52zEGKTb0iDMicbGp}Cf)?mQS+Nf2E1)vy;S zQmc5vj~(G90eiT?8Z?y@C3N#iNm0Q~4FQ1~37n{|9_m`?V0ft^0*|7G6>jWsxC{0H zmv8Iz1!^$NT)$+F&n`E$^KgRn-OgD^EXmOBCBZ5gnJREdU_!WBSUjyEeV1w&MN0+D zCP-*aGiQCVR}-uYl&cmVGH|aNGW2k0R`0(985roBFa#EMAv;!(5x;E%QPi92bS1U{ z7BCEXBEx96K^7ZZlCc8)B!Iwj4BAN82_L->C(-KmvxD`UY& zHB{XYkytTA#UzAN9f(W6#MA(0VBZv@!!~U}lp0Q_85kwgDal}@7 z9fQwE@8C1+C}+TmEp|90g)Oe$0B3A?ctHV%tw90YB9DNAJ5NdA2t_*$0fd%(z}|N+ zw3vq>U>(AIV62Z1wgN}+f#A)2U>!VsU{Ht;jP&w>VMp=7iZpgOB!!GxtbY;-c!CcM zdof&NtHFK1NuX}a0C6P~P#q`^C5wRx+ z7utZz!9ebA!>x=WvnWkH$#LbHX8K{CU}XcD%%lU(J~rHwB5*8M1CbES6|9Gc5DWq# zQ0X4&ViL~*AsFa24GcSq4_2hH!?7tuSxoH&nYX|Ph9OtooOh1$9rk)_2j2vYqmud3 zQSr~fEJEPMu|V&_KClWwLI~7dF`U{zf(*90sB<4YrUf#H4(>GrgA5tE$R5;F=^z6G zy<}k6QDm?pjU5h8A;%c`lu4Zo44a#kx#?o|FW^2hZkbK8mwHYLD+i!T8lYSGo0OO< zXuv|T8}_WYiZSlHQWyp8a~W(E5*$qrEneV4+VB`9XTs@9qJzgQ@M}F}w{w?*2MqI6 zN)S|d?a;LXjQDNG4@@EdxUY2wM)*<*Rz()q*it|O8*4pQyesHzM3yW-j*_XA=sj4P zsl-wCTj$v}!WAjv)JzrWjUbQ$D9D3gKVzm&Q+D}4iV&moSqjM42_GwjZzX@;DWDEles zZMLUTy#@)(yVd5$h%6zu71=G-`hzp-yH*$zzik4h*qQF89WeqRAi>;k239UnuHkSv zTiyqpBoQY&@OE9_95twNn3Dmbs@CSH#MQt`k$Ik)^Ib0s<>>=Bc0P8!c3t*Mk*-bq1RA7gd}=$bzU?@D9K(hs{tC3|rcL`GmkA zg1JSWZcQ#BK98C`JK|xJ)QwN6_9abv;_~S2N3_G7a7|1W$?a$*@tJ?n%!dsEu zF2@AnEfxpVnV#S_!Q5|iSlq8S*$PIICBQfyA;GxyprJeqdgIxWSSa`uJVXq7Q&T59 z%Vx?)i@BV!p`*;CMcP6&fdF4YZ(HdmIOxrac<9ZbfZ=4IpWcjnq~Wwe#9a4{&(J>$619L z#8O!i=q?8=aVQeWZ0*|V7lyel6|Nuo^s9}S8JH+;!JLF~69=L|2H}9-yMYp>g5k+Vl8_;SaV9gk2@+LPZ0;~6- zf>{hS1$OibB+POEm7|Ib*oFjJk-5vaSUSO+;`S#A{DD~9eo+v>Ni16hZ1FVYQj^9A zaRePc5R0|&5Q{+|7BcX9h;Q@90%9@HODux9?Sa>Uqi0di->ke!O4*KBMX$>2iYY@- zHN48;sB4VNN>d#A<<|!12<8^KProtSZm1OEuyZ8h#B1jOtN4g&vkmbRmO5RcfYCNL zfizR-oL>WsWVCO3wN=0=uK`vRjtumB zT!eFvpO=r-v+f6d3yRV(R;!4IwL-<`-51tsqBW>i6Ife#S#8DryBsMtRrkzcSsr;1 zm|=T85a2mn?ZR-FPKKjj!72v9bOKaT73cf9p^?Xw%reb9KQrgh5RqcZ;3-3WJf-$K zI0h4N2|(1xz+pF82M&Miy&_pmNySanu<%+V@*= zy>fDwU~ZA4Yspcd(O;-eNTfn82Jsv^?^s6}vWwS-T&i4GoWv7*M;gB5o9dJObzB}khGW5*vJ zf+v+M_ptkHT@^fmBluwNKAQ}22kgVty>U+6mfOT+?pfOz_)XE|0m>%f^fPNe!udZN z=6-?g`N$C`;U`Z_#rB%HGnkT?NC`5;4D4)(NNl>B>XNuTT70UhsO_U9H=lNb8!Pid zXr*lfJXamul$2L8lr+}6X6yv#HFknKJEo^8vq6;>e99W-%04u#{z2Bv0u zDXy@`pbEjDA~8_8y@J}5)# zdnsep|Zb?{JzK^@!+g-ktuorQ|>6NaTV&5nmCiKVD}pnXPd@4z7% zQQHiw!YQ`H*6P{5T;+oag%O|*Q@Dy?o9YH>7o}PIS_20ZCYW1fv1#_{S4){?$MW!r zDN(=UQJEB&lES9yeTY7wFzM4wVTOAqVk5NF0ryQb1YI5l2ZdP&4}}@zqcEfV6lUD9 z6t13f5A<;q-q}-d#o?zmiQ6`btu1RIF+$j35_60jHJ`gU(IKlxkeFeZBawfCZD?c- z*0K*6>u%m$Uu-U(uW=delst-&MjKiyfXl2_es=zH2(RYTucNf%+Nu-0H#x!JN;R5d zH?YVA@1l@?z~um)S!)lS8H7nZ##KK!fyP}1qs%~GsE1+hQSmLUt!Ld225G%BwYm$_ z+|28C{5hhK{n9?0bGYRT3$+o74^x|C^;kf~*aneF4b*1X{_@mlGJKv-%9e{63f5Sl zSj22_YndeE!6E}!(g&wOf<7QvtYT+FB#FS%M+gwt-B3ZhkNT4exWA%{w0nPW=rL&U zmo@P4mqFk!sx@L0NLB;jF9W^&W!SL>xq8Y&7SAp-Rzt|QF{k_wo6UCM{4+e`P??$5pb;*Y_mnK=^es?wYS1n%a43_khb@3Gm3fZ<-Q6}78kwOm z!3^6|S=N^iCYYe^)+e}!R3lz6%6PJ(a@uNgEvO;5$-Ch*)L_}H$D1uO-jQS0tyT_& za$qz+6G)6FWfJTjgqEFPwXHi2p_{u0ebyYLW;HydW{~+(23;Ils{0oV^pcuk$CA2w z$~~4rQtv8O@5%&7H>Wq_vvV9;fn&Wi{2o;Nes;db#^mA8tJz76wsoYVS8X&DRqf1$ z1@QT5q-L18zX*|36a+@<=b4=6gloa*rAhEs*BTrKs^l=NTQ{_~4ab6oj)zkm3xG9- z8zde+xXW0dHMSK<8)NyTZxbBEWgR@kWe|wl!~MLyzRWLhEEwot>M^c~xk3zUkEh3* z0<8}2*ut({jTi)T)7}@hmnNJAh76`82~2Kq;~69&bxuxya)$l)+0ZgWt5RgYA?)&e*cDBV;t&Ft--wa?csU z4AFX+KhLYi58mBTB7Dp;50?X*40@f=N%Kt94Ka(g@=0%-!k)XYsL8Kmnf3a;lTq_$U#p^H0AILsugbS}(tQ_*hAUl_F&ymZ32sgFX44 z!6d=@GGq;|Q~|e?2OUIMDu&}MQZTwLT6mbms)9+qK`*X5XCll?BogNyQp-X;9K9=i zwrYfgS=K?2KF8RxzZD~aNY+qb7Qx(VtcJL8VuuR{X6GOnvjfCBLc(acM7iM%=7gVy zk;2pEz{Z0?ClpnHk)pUlau?6ZvV_28MDpGH3#C!ie4z4-!KPKLoi)i6Jf>)J>)_!GgTNWwuz(wCWEKZ!80h5;!Q7+S553GmK)9xV1*z2r{}r3 zJQh)WgcDFp183ZHUlPnBHNDKT)xjhaTo-^@1V^!lkoI5}>)>G)gTO3PP`#!070hCw zf4xUI_aHxZuCwCjeU7){2KoU!^}3tRuwA}btIaY>>q*Lj^oB#JeU!Nh`eh)At!~;v_35y~&H8#s!XPtcAuXY0?NT2? zPV!D(^TYCvseIG7Lgn~vPgzJ$z)3+(xrMo5*l;=B;;POFc^8gb+XM_ENNN&@0C^=5 zaDQ^cQ3#QEzCA}N=NAzQNHN1;ELc&W>tZ*Lw4&f72p%vT$Lzv9U>!U>V33)HP>TRJ za_}3$STNAb1BM;N11n_Rr^w}r*&s%RV43B?1BMk9wpY;%{%y9@vx4w&8GVX9Te-*! zOaP{00(v3zjlm|c$cJKBaZmUCKm~^Ss9?8`>Q?6PmN!csRA6|o6FOFld4qNEP=P^) z3cbz%Yug$X80e(}!;YcCz=|^Cw`~$|B|F%ld+ejOz%V7?A`Up5(`+PzJXY*)o#(ic zwZ5xrM3!7gTPx$)S5=G~j z!Z$VRW#9 z^f57yCgZ>lgi5TiD)3&yQwGD4I~>wHSIs^AU~Ts%!f7KI=$kU6yBg?W1!M;ljyp+V z5KVZmW+E8&46!H77L0;{U{tZvV9cbzR6IbLh){2W2P_iv6RICPL)IAX?q<=j4vh6# z2cSv?O#P^k07>WuYnaa#cz9>z{M!N zK_`~(#WcaN;>Z>c0T{p-?-T)8IR*(f!9%NekbtFzNx)bi2_B;WNI-COPdN4|`g%yf ziW(EpL)p@L>{Fz9Nx<@sB7qhA98ehS1SN)1f1oexGmwB``|Z6N3mAk;nXR&T#e@Sp z08B{%luzr16QZSEyU4b<*{}oLypIC50tjU^Yy*?Ni0B2+7Gf4)9Xu3Z(7xO{GP5WvD3d3;b7dhmjk_V9v1Fb&vm zLp@{p8bJ#NdQAhv8oUE5!Z_gIREqEhD%?t>9b_Pw+j+!>$hfwPj|qbw^&KuYsEQf= zRzr~(5jw<8qMyD;>PUo$NZnen24`?ycdLA7YRWK?XN9sys{v}*TH{K_b~x6cT02Ya z3dqbF-2o08)~Ug-fgU?o@w zkCkB1VfMf|Kk0p#2}XJ{a~1V;hO){}afHra)OKJ+Ao1JwB2ga)w@B&TIItBATMW0@ zHagTg=I;$;V63T3i^R05!tR4B0a!_e1o4`7AP(iKrKD1jul649efg>7A*9-DZI`zx=iVZ=%`7?W?Pc^24WCCMtqil;QxGSuLZ&hm7gSJYq4= z?TQrlcEKOPsY=-u2hZsF6Wj!k4Kj&@P6|{>G)y9C=vxQTSg0w?h+R-wV1r@|3wR=; zz@Q)8*#yrZxzZPfyI~=Hf%#nZ@X(Bv1D*#l^iU+OP7ZErd0yKBDVnKzx`hjJLcwp*>crY2 z{|Qb=?w+=PlI_M%lb=k^Hcw$iH6X6f`*NOHEgatu-eCm3;6=-~Ks+#b>=@sg^sx&WQSl$tiE6loOPdH{~@@8A9Ca=JrFl;}s=6{sV*DAlPwO+S@Cbkd3^ey=WV(fhi36yT0x@dn z23^&f(B<&VlsYvPOt^h8fZO-^CwBV@oU)L4f*l|@ri{=$2Rpzzco@JSFaQ%d3O>o6 z111gzdKtj51_o3SPdLW5tAMSKZVO>=Sr38%44Vx{TXUjepMK7x02VM9sWb3Yg)3kI zP$dgs2;yM)TZN7`o;zn17<3>WqXLLv!?Cmrr`xF_9wKmGfe1Jb1XCbB9f-g{FA*5l zK!hsf8Min*R@^Iy9cvz25P@NnY?YxR=;m+&fze;f=l=OTO`&7BRo3$$?eyP=P^#$$^1ho4~LJn^46y;}(a^Pzt1v zvYIkSfdC9c!uG}#!PpMZb#uH1HJ3{cw>1htU`YWSJWoSmA*?K={UvH*;8-_e%^K%c zsLw&L+lMUi%wzJF}Cp!D|D@W*oB%ELcT(3c1G*fnX+)skLmf#1=4AdZ3 zsDCL5k);M0oA8zOtZ)+?3=xIh3}KL&Fq~D$RhpL}EYFjYU($~k6>Tf-iQiWA=_E<| zT|~iaRzqMY6SB?3NgU&523wY!P{_eK+kX09xil#rE(Zx0gNAD~Nn0oD;d7j`-b9^& zI%89Xdd!GXzHA@G#v0;N0uNV5%T)*WRKoptVn~9LSv_^|7b?w15|-y4kHh>Tfuof+ z;V577P(pkdA-g4?Ewf!dEN?Ed()EOUh^>X{hQ)0Tz9H^|dup{j#zKk4?*a>8bumCpC{z+7#@$`v7>GzkDYHY4@&utel-8-=n=0?(Ic~&y zq}bRF?aj^^j)bM)783}{-R>bMgUmdK;~TX)Gax7feOtMLbC05zp;a612am5GW*2xY zi}6?`cTL%_PE|Gx`Q}>?#Z>A==&zdOh3Qtrx6P41XqsWP&vdnj@S?@5)IJH__jc? zmey0pOwP*s4&AW^O|c)43}Q=#o8TasXyJ7D1Y}Gl%3R>X=UE6OV`*NJF|3JX!V4>k z+~(jT*39^rV_AEF7Yu_b(i@v$hzR30L@3DZs3%Z7T6VcfQ4W~_7$IuuWc=yZ*z_79 zry9#f?og0~u|9VXs7irBs}oWH6nP9B6k#1ac8Ed6Y>GN{x?~4M80e)4!Q8`9n@oi$ zRh3p}_HDI&w1;O2dtuoW;V zq@k@2aDw0_A3mTjIKeu2IKdz@Hw{p6Dwb_jaDsteP7v&eal(o_w>g{%F93msv=(<3 z*k*@|_xLjfBUse#e6_N!lqn`j_}&1Ol)#!KT=Z0BZcK^xO@w3A(tR)z+`5ktcJpZ` zO+zCLLfG(lfOOz6Ay@|wAsA$GjA1R?nxzIpFfbHpW~iGK`w7PE=%3+gg>i9TArB$e zh}@*Zg?T7(SzZHaMg7I{SfT7Thd`04)9?2kQxw76uW?ucn#9feol>}D!VXxRAXRVp zQke=80#%VP9R%-V$6UoiajM}3F1(l&yP!#Zwqmr8h_(t%#dJZ$$G~BkSO*Ug8DwTF zWJ}ia>_J2Z`qzGpd!$EW1-{!HEj4Qsoa3zf+PskEk&v1H6mQK+HXjIAikh* z^b7|Y__F|CfGYWdJb~b0J@AEv#x1k1+*hV<)$UzXw2v>Of|)`BmI!=#3>iF25Mb_AM4U;U1t;-r$w{mQgGJ}TNoopbStr7C833j*?xu|QQPWf2Ds4JOkHhY1o$c3t)q4TMk zifkg6sO#P3F}P9-L$0v*uJC?%A5gS#+dKjJ$t6G^xde73x#TIsqxGjhfOlPlk0#y} z)!52i#&4TSG43mF)h>ttl?dkMF>-&l(L)Xra}o3+0Vg};vNL2-K+18A`?!cEFqeT{ zA`ywp+u?MG{3kdDl{qhr@>J1&azSdT1XcpUwD&pdY|h$*&IRVGg@;`HVuoBeQC=IA zg-Y|1i{%|lE`G{+sq72Ky-5#O%vxJSRVYkMniV*YIkt*&6iDRK1IOSY!8|-HPH?S1 z{Zb3_f`#<>38E8|4R(!cOa!bX0Z!rfL!$~NveebnB`&B#Kpw#+mJAv))L&nEj4a7SA^@Na z!Q8DPYtdBd-JjyBF9(hifz0a7%eq5mp0&miH@}9h8fkm7DYnpY_(nGB!6XKH)(6x& z(nuRJA|3??i&zH_ix>nJA$<z; zg2c1c@CE$t47Z8boe3;pB_rZK{yWSFmbx(~bex1>oR1Jdm5m!hgy;yf z@)$S>!8&*d!5|O<#r9B@tmc`EG(RC&;3ElPMZ#kWqMo2kbqBjsq8BU*!Q2+**#;ZB z5q8!-{Zdn4Kok;iQrt$sWP&#YOgT_V2ba8rS;8WV%LrUo5op_iVnm_>F4RI))Sq+7 z3Ww2P3hV1(3WLl9gmj&O-oXvi!9YJ#2r8^weWC}L50?Jo#0p+GMPQc(iFSPk-)V+llqdg;yp_h5?lxx z-Wno}o8X`xcY=p{3^LS1l?EKFtx=DGeltio_t@3UpfJXY%f}ph#pWG03|jKBgE0&< z772dT?hLtj{35VR1a&Jo{`CDA)thvYhnW)(mm`LoO~Mttq^**3)IgOGiJRCT0c$y>o>G0Hw zLI!Bv+hW+t++kc#QDI?j-2%CC=JAp<*zaocwpb^Bt{ki7%ax({nNsC1ecrn4W5 zt&8*?xPqf62-%63x=?98>mu?VNfj%kop9vR>_;M-LINnGm|<>2U;a(sz}dbpPENnXz*Sfu*BB32@aO9wjP!+ z$XFDUfm=T@CDObWMR1R#i4}29C>n`sf+oSeo=qSyFaovW*g}j^rBV1!_C)N_|_v`$P=XY0fP)gOgohFg zDkd3Z$!iTJ7!C${4F|#8A990Rl2~D7{HB=(cNHV#P_3K}yZiz}u`rWNJ3Q7b|S3xa3M@xskkSOLL1!J*&cALbzlLoJ=`u%sHF<9@I<{Bg#DFpTx? z<&y?5^8HXC3XHK8#{Cx!+pVgFb1z>&hB1gA4>X|6@9eweK zz%_tMuAxv-uuL4t#xlzToX8dB=D{_FdgDB#0crsSYdL^xw!%$tSSQxPW1ScTu9<5f zdwmIjfNKo&a*bh+oUg3lbV9Mq6P$o=nKRhj)!+rg^4WSg2LF66FrnRFf+w@zG*q$$ z&OjQD&8S{y=P$8K3fWQGiAK3hsh|vLcH*aut%eD>gmzOvna99E8P>u>83q~3V402U zvw3Vl83uYOLooNC)XbACovdJT!ZAb88CRjz_elkINaR3-W|E)H`AuL?SmyI=CbJ%_ z2_O|e`uJV~o(8N5OEguqm!{+)&O%}TUAhwVV7Pzwvb8|%wIncqf*p@QgB+rRd+uV8 znY&V4mZ}CF4J6^ngbVx)Bd5|vtgI~R!+J;rZ)_KFdx?7}iLe_*8u z=B9YbKzhf%eR3dI1#ABGBcy{ZkMiah{vJhJ;+XM&o zL<=|d7=%S|jC*%6nejV;dJGIwkD;?{U7U7a4rjV5TB+E_Q4f5p^c3S}#hw$2NuG3C zNMP$EwICwH+zNK2~38K;A^)7RZ;7(0Tw$+zBQD;!)IWkXcW_>~^!hRq`xC#zwO`z`8oE>I=; z;$FYoFz2#Rf6{=o?l*dN`#1+1G`V2kW8h#PtLtGOgNjWL94OP{qu?I{z0MfH+=Ewh z#vVvW&z>Aj!h(a7d|Z^u%=YC6EN_wtnOaeD{I+Lb6ff*_kpfMR#{_cY18iUf9M5?nw9>T!o~sUS z5=tk*=|jX0M`9|YQZQtp(tIQoc}+G@2x7&?Qx3 zD<3)?0V1g$J8UDEG7Gv<^-Q6LPCXoc)9o+N>Hli&Tz(|Uvb3H}4+u3H&5QsE4IsHn zVl`xjNBFx`9V3r$&q&XVm*SD#S!fudBBQ#pJ6}XZJ(>Y&N+8W3)EdpOKx#HDkYER! zkyx=H|A(0sY+3OKAhF}4|cI}wm&(1yf-1G2bhP`+^w2e|L zjplApXtYil@@<-G6$IrXpRBM-b?of;nK)Gg6G3MLg6kZ@PlZ`1f%9fTLB;G$ z_YbDKw7l1`W(BU|+ZKW68FhiK(qSK4SQUFZ9Tk=-EOV4+$nyT}=`8nx!!ng4P*)0q zUn7nth~vCvA%zMYkU~L_Vrz^t_9r2b zLV+PE1hytA?$nN4yELS7YKKs_N@qA?C9d|q`erxjv^Jjjb0~QLSPq=l3kR2+ssWC?9vgBr>E1W^G=5vW=9>Y6&)SLqwvT^N@bvuX3I8FL~ct< zhhHi~z%K>aqP8{R7|qvLgWKy`L)BHylb)?irwZ)u)UZ>UP>-rYbXM4X|9f|kkMU0= zUDcd^OFaL5_5BjKOOz7E%Z_TdqLAR`Xa`85;HWz30)F(q#^dPc47fZm> zr-QDRK5EtM9#Kk~u!fPZp#?wOH77?e=9U3bzNbQG?-jVUMS&rynY-3tK(cn?NUuo24ho2DU@2}5kr-HpyFD#JnY;LTD2n?4&Czm*kj>N z!)hV-=TtANtDY2Nmf~8W(HwmjUW8^6xEBQphBV9T`Wgw({Advg+<0q|An_y*)YXV# zX>CzztA&Fxxj1DAliXc21WJ0ag_JcUP#dg#yTr0&PnjTtN}4BwV#6(vh+urkO)z{& zC8qNJBKxBM{HX=U`rc|N1(hK5(}@_? zwl1gb;Xx`j*;rY(3p`LM0==LhGa#sRwOO|!-Dn{XbiB2AkT`1x>ZS%Lq4@N$Is&>=2MT+7bUJVBP~?WA{pubi z?^SQW1x72U0l#53d>Ah1&G)C)Z+kK8klL;zqYo4s>w{DRtGAs~OXvd!&nAhY4^)bP z2nw=wVZ_GL2Yj+FC@>fG<)C@j!ypM-=67l;_K1DtNVm3|a4;Jm8W0LqtFhvc&EW?I zDtSN|!)%fZJWwIe&X3Oz_on387!#c4f(nX`G(su@m6NkMgAhUB2%O(pIvD~YsGtym zVyRZ(CuyZh5~bNyMooU;YsgJKWP zsR~|SBmh-(AjM=Wmr>=0EE^f}h3XrF2=4C9o@qm^dwcXkibj)Xn^mzus0aZC6a)pZ zp7D`8WGtFE!+OB3Vaf^N zU?tmS6!jp|Y-b6f&}gMd?@zc>w)8!WP&oaHvi>C}Zomi?G{Xo5K3|;Ajy9aa-S@Ak zg%FAFaiD&wK6Pg(!0C)J2%)h3b244Yy|fNoC;CyM5)`{PJ@>l|76>pU1A60L)(V3G zIwTde=6efb#!oxAZJi!PD=0c5K`MgP5zVdtkU-!)j>+;QP#FReD9Ba@{8s%2b3uXe z%AmMB4Tgz-k>6@GcB%F-b|-;5)I1Pac{D}QwRz2@;J~!2FH*FXF0*3HiV8G~V#zHl zT{(?E_Y&+cXmNTrol$qKMgw>M;5@=m>)!r}6L!?53Y-YdEN~!Wf%QoAZ~vKp_Goc% z*f4ihgUzl91kw;DGzLU*voMdlbi)pUAyX^<+zolZ~q9veE;7_OQJTJYrzHF%)I zX7ltN_F#(II;knqy<*I@MSu$;@t8=htVVEB1YFR^f(v91VYb#hjBd1$3p!qlLP&gz zLv=|NTL+@@baqh)3L}yhLlN~v(C19CFhQ}+`$z*-b1)cpb6#F(pkuCf4(B^Z`}94= zE9W%WV}C)gHmDT%{L|`tPA5TxRAvsUvp$f87a<^mJ{Uykjr-)dx|JEFpums_3R_Dl zBre9Gx~9mbBnGh_#O`2h9L}bcMxXAT)9R+aK2xm`A5#Ro#LbKV{JphMmz$WQ#4 zIz&)pM1=JA^yq3S<}1?jl3KQpPKJO9DyT7GG~66EEDs6{nV_(>n2>lGhw8#w9y)kW z7m7h)httIgy=>2Y_!3${fhXjGIig@9fT>6@WZBJVT1cQn=18E(hy-$b%B*r69a$)7 zgA{EiM0rEe3)^_`k04~d^~sE#X~TNASX968~G!mN7A{(^KSx}?;4Q=k|Wy-Qm|YhJ31 zM>haVI5BDoe{`dIPWZ~xtP?6m#EDc24&bt83!G3m%UYfjDnq~t1;L3CE6~`N*MbuY z3^$Vww-zZ9XX8+PR7+C$B3h6_VPu2v(H7w8{Pf&SHH=UwO~t)U0Uf|3beI?&B3+G! z&=J>QgI*A^Ar)c`HYmK64Jt#x1_i+eY6}rA;tXQgpum_7id%~fiQ{poZY)YH4JPBR z^MAqyg*C@TJJ2fmr=}Pfs$xQ)tdGn$1{L(qs3aT~K_O#@jaZNhU>%}!iXWXIa0)Ty zdZoN1+YbB8$7q>{#uQExrA`GoKTaMcm&SI1~16+79n(6AE54y6b zY|_ux)71eZx;j{MjVDKk#Bn-OUz-^`#0J(}W)8Nhm&{?tQxfQX`q?glBtkNhfR4`2 z>dXLDDlhVgjTy1o2*Gk^s8R%so~-ZVNik>zCtf!f zLe_ z!loB*2YDZcN?tbcIayoC4ce0T;m{F1?jr*95O_-+W$2-=I-rMwpa*Ad79&^F7YYn* zVt3cI_>nkON9u_qXq_ewK6-Fx%fVPbD0yq~InNh0AG^bz&7app_6$>!fxdOamQ_Th zJU=<#JD; zC&fItyn|oM%LB_Cw ztLf;Ho1HfnRERc8C^|A0M1=k%8$Svo6wcvfMq(JDG6alJP=*l-3>l%YwHT3jQ%CB4 z<0zg~m9blbQ4R{TE?`9~x&>8H{D;ThLeWRh=T937U>K_81Mybf+<_JRM}y$ zx#*4^hcOx)oG$3d;3M2n5~&nDk}PtOxllsk`(`BW(JH{iXs#N+@hC zN+d4TkvijW)sU1`Z|3A+yOa_*BOy?gFkH~l&?SwDfCj6`Fk#=Hd9RScjaq~UcLqLF z3K}?IU^Jw6@A39?n?^_=@DbfDGQy%4REB^A3NjK*2GqZG#Kve)U`PUm#qL$J{F>oO@v9+|#Lbl(WH@dpBx4_YN4${eAAv+zT9EOipVt z_bNj$_X=X}**$G`>(N`}Ya6$}a!{@6o^(aU+k|!b{sc{Z7(&`W-O( z^c}2a_7hLzSp8D8%R%q^5GQ6|VRt^H+Waf*fQ(Oa{hXCPD@Lp4f7y|CM6~$wALm11 z{&m#HB%dEMZs$ekc)El8;&lGQGk1^2{-WKWqmqqXih|o@lwSrEPN+m~&4LRmdB6n) z!3E9`1~sS1Ge26$1s!i4TVR~H8u_jIpijFA@5zM`3Y&fS*E>}H?cA09uQ5a6)FwW} zN8O+rz?JiXNstYBf*Lw(oBP?pgDr!hN*UNIWsiHG6f#tB&d+k%1Wu^P0Vfn>oUm^1 z_40adw2%`z-ddbU+>2v%OIfo|qK{kv0Gv?R({n2padQ5t6Tzyn&$>>WrT_xF(Q>=jRiyDt&C6^0!Apv7(sImDyiz1hL%uZXfQb3T9im! zjbrst_0ZpRrm3A+I@r>$Fh8gBgrDhM4)R3v94|--J@Wy65CT|52%;hKClGGbDT99a zmSXwDbo;iFtQsmpM2A!Yyq(!dVibhHxoa+Z0|lWn1awf484z8Z{(j|#4hoFvpt!Z@ zka!%&>ZR)Uh+Bi9N=`I{!j_%PIyjMj=zB;(2gMTFM}Dwd=V1e=iVXzx=2m1D3?1}z z+T16`!6F`{_qIBPxm^rAP&oNX**&C_A>e^N4?Gz0LG*pL0z6P)xKJo;?_|19uyxuV zMo+EBiK~&{spU|_bJtwpa6n`0^Z^G{&}F9}s@c?n7u;we2Xs8+z@sb&66fMr9Z~35yx%^r5)LTr z;KRSQ?PO>F1yLfZGtdKyeKtRNUJuqZP)Px7rK}N#8qhJ17xUQ(B}-{rOAV8{Z6wQMO9XX04h zP=p8$h$(Z&A5cJHW*G!0(KY1mlUkbv76Qhr7|?Ai8{!7dGC(Dr9+I1Q=oX?qz5f~v zNX4aFXA1+I2#q0{?vY>sTWiWxI6EB%=x8AW6xPCk#Gg1;Ulh?QWPR2%{v7PZ^iz)Y zI`e&cOYY3iYHC0SwfgPua0(89DLH^&r=>!z6Cle0y?dku?sI>%fWTWLQ=GVg8c;!( z{k!yCLI4HDMxo;J445QNMSiEI0BJo0M$|ijI9Rb^L=jj}ii*5T8iYgo0p%wL0r<)x1h>w2%=x-a1}{ zN#bYZcd9IKX%NEZYvjTRfi)|OWxEBM!0Oz<5V?4}(T*@o$q(#^7N>$6GC7sN$>hWD zV24T&vEx26zz%_9OXOBQ*r756>`;)gqd&%`tS==B4DAVb*R|-8_#7wdqaq27ysvtg zf`es!jtdo>z(lR-iPubU}qwV5%!*qimpp zlcI5N;XqJV9W}|t;LGO136L8mDP}C16;Q#6h;~o?#BZh zQ1kt|L7`ZbNnKK`ziw8n zF~I!rWIqQKB56CsuUONCBZdMa2u@>pXo$hZ39+Pi}+CKpq0Ry z?>c?KDmCq#O)WULVFR?r5HY2=xSGf=24LQcBKLBXid22q z_EN2h+*$*X(lI-tJEqffv*O~CSG{48bsV0b&E37WlTDV}kUaL#W;*Hpt!8G9*H1ir zls)-hco`b$Y2l5>l|E4kHnX_xo5I`!sL9-S#3uX0%P zxm*$n{6daW>^3<3Qn3SmDF}YiAaFu7n`(q-ezZtmIb8G9-j`sNd$`wCUn2Eph!pQR zX(5=vnx&ut!P&g?aRL3c#t_AMsJjvtab?LOq#I;iR_;c5lS^a@_Jn$W+|=1PURachYu(p! z;=&@8Az+b$GA5S-Llz0Fc|J?!WGN79D5uKl-Rr7%)PijB^VL};ux2Svj&=#R!jLaw zZ5%gX)fz*bTByYI_{f%4RpxMu>l1DvWag7cL&@z{+r)8)R4W~rwNH_eHGiMmL#-5! zyD3|m8EUBv^TW=`{5f4Le6``H9%)*NHMrk%n=lqX9Wpk#1lK&Z_a#{6Kks$b*UHjI zwf3>|=A*U*)-1&-1$v9@;LhEyQKu4)tue~}eDU0SFklx~R_vmLTy8TDyW~dOD`SA% zEf<9XyA&C*E4@8w583j5uuI{SZp-qgG6afCK@e*=B=c~~O%=paV5qnR);yza%U|Vm zC&fXmC`)-5(WOWk0FMOLd{@H$Nj2S{b|^ekkf|`52Tb~I)q!aW44Edd<~hHw2CKaD zbYK$Zaa4|F+OR|ltXYb(d7T9&D|I2=8Uq|yP&t((^;*;y*Os$NEASD=`Jwp?<>Xe| zxX_4dv5%4Zi=F+&0r84{gMud0i=vj7DhmfslbmvbVX5dAL)Xp3t$QH?f~lltgP|>k zej5Y96c`drV9it8rphY6e6K4`*=_PL@j}${+&qkQMnRF{J zw@w2rP;ATsaMd()$<5F1tlY2}8tDB4)7OTp?hXm^+CbrL@$LQ{1SC*FmkAEOSPc|V zSh%BdxE2m1?&(c&L~c_;h%kV$(@AhZVLNC5BG9b6m2YJT2NX-y_>)=()B;pa0df7q zoF8QF$IK8wZypf~3Meqt0t#zkK;kRj z6rbVtvXGh&y@3G=Bb{=WZpc_~^e3W}Sxpf*_|f5~BtH14)MC_fB5*GDbFO`8prg|8 z;s=KvG^bm&YVQCiSIWe8}XAZS2DD!y=M=|BSoHn%;k zp&sqwn|rkM6_iutOoPPXyD6SOOar=J4!v0p7Zf&|?qj~sIQ48$1_}+70ibdodPH?k zVtX7C=#bFrpu-wkK3-wJKmmnC6i9E4Cdld`D3HQA|I9K53aAVL1r%iV0Evba^wTGT z0tyT@fx^}ZH6+WlIuYl0Y97*)nT!@+paTvlY~Nya$bLS0=8LI$Br$u7x*lM(k^z0v zeRCQX3h2#43Mee1zmn*xekYx)!C>8AM5Pyrls z_IvJ-mFZX54y6wcJ9s&L8AT7Y+21?*)NLqd1*{|h3v6}=4*~S{)N!M-_hL3b>fr5l z?n6|8qT|g0xKaqhXR<=T1cm2|FQN=oia;4C$dmz^pyw?zlz{?6WuUON*pRqDH^tAj z-J`O=h)_}GCTvhxaV(=4%tFO9s{t_O1W>XnyG@4$I^tN3Y3~9KFRe1f(i-@si3g6sF3(1H^n2hO(M`_IPAG)7b+-hnYPr_ z4%;KKBKP-ejs-LW16Hqg(9IUEg%j@nEt+gRfX06c(w3^xl|?*>p-+kivVzLCb-elObS%3JME`T_mZsH1tmt zvOvdMhXq@SCz0Q&sc2z%)QGRy3J$hUK|Qzr?~OlTuI+*a~M z+mKKdUGaBNP%@`yM+eiIpTJ?7=bdq?m){+4<=!R}ueXgpdIyUpUhduc(c7SvsI9I- zCqwf`??Cp^cgC9!F$`;#fP=>KudisW`A?jNTk31FK28L#Icb=Gh0R{Dymu(3>x&`s z^((TuNM3=eUT&A5xQzb=9_XMnUO$`S3F**G##t?oJvJf(BPIfj`?-bviIcajFpifY zAcH=X*#TXu$Jfsp-P6ZZ&;i$?LgGE#QnwUk!+RwC)K!7PsFGz(_m<^zeUThaxKE1naOHFmo0v~v_QT%!ko~y}WYGIZWJvE$o5PmCKM~fF^fp@Uk_jcGbKU!oCxSQsE$Xkiukl$hm(6NbZx7s$*!ORwIcj1=0o2;L1 zw_fao4MNJ0=6HrxiHlSEow#TdNFmp6Pxl{lqTn zrM@RRPWMOMTG1>jYo^p7Y?f;HDk;;in3JO-k@sNn;ZGeD4gf7VKwlio7Rlt`xsi|e zr)QM$q~eXQ^alx4h)6M{_b2NjoArxg5O}+hpfUsmP>>l3g!_z!&M^uB6c}p<#kEi% z@gHuf&xt@9>K1q+Vks)D43a!NBHX0L1qD<17H@*vSU>|%6%Eh@EvthLI)AiGT&ig@ zSfI!->QMz4=L2TpfyhgvwVY=IMW9jyJWvoxK!hAka9=t53?e8pG!PVadNzH8vYww- z+j%`(+)Dh1{1zLbX#MKz`9TGRv3py#0VYQ9=&)hupzs|+70Fntbfg_XReWHT$e%a5LEHJD zLc}^k#F((7&(IP^D7;lis1yMs6jbaXSS|dCAB<37s3H{Bsv>%cKat<5ir8W=LwOWu zjP20PTVTi2vy%nIjQu*{U}jyq)5%#eRLKL9w_4&)+>k|0@#E>I4I05A1C3y)^7g&f z`BylOu51ei|DKxX-w9f*5xj?Pzorr#GO!jMs(tXE`^qz;(Ra)Jd4vzi>fr}M4{6^U5N5p)0p zl`oV8?or;Y=`JaBv9D#{M?$|%}>vs%umY4*Ih#|@htK?rGoYB>eq56PzDM^ zFO_4jY85yH2LbzTXNe|Ylk&b(iIjl~!jV_jE)==VxtQN6IJpBJ zsGv(_Fr+V>zF2smz<5be+!|%JDY;mMCGuN{(8Xw<_!6BEL171k93;EbJ1!`QbBL4q z3;Txab#sdWD^8H*mYWJVp+mF%cwVH(pPcXScWCIMZx6+w_=pdnN+GP!W$px&#o<2i zg_j}Vg9_RsR=eA!zhixIP+-gl#mx_n2_v3&mRXa#M~9?cpPiH5U)k(VOC+Agp8BUY zNoOK9#%W>5p|Eh{ps=Re+Qm@ijFA1fl{3Ymg$}v<B^TihuO1x}w&_iN?&S$~rmVJ~U@fXhvUKcIyYI_A@Z&fa;kgplAy z98G7(_mYDfdP&TUR1&PXY<3mgNa5`Tle`qo+)z>B2It$BKc}x2ZYVG`BNWzROD1l| zo;s+ARH3}9ufmFIP#6FYJ8w(_`@#oVl_r6G}ac1YoSEqckHQ)YI8Iqx4yy6pfG|J zuv(8gMeKsg%r--@Asc{|6G0e?r9Zt7qId@Z!3kfe2KAz-jv^W_8Ug$${k0GuHlJ51LKJ!l>DFt`ad(t9tNcPp; zMer8wQ)+#~dk*$&is8`VgbM$(J^`%I5gWZyhN)(RbFti>4@&5ebg?Ih0fS3#jhawg zM2Gv_96AWRH7(M~5YRydW!8HmY)Gp4cQ!isfY{(U&pgb~YeHry?4Ha>9F=`_Zf#jf zPzqG*J4azC?Bs|*SPBI{JvyzKl@7YcVW)Q!&WiC$YS1dZm-|?uhTa}MN+CuJnLRS| zPv-b5>-p2}l7kOFKP9(QpKDL$utt@+O)xA$j#6yC>weDBzVKoPEYW8(rLjdU;GnKF z6c|!NVfUm);<)UqyNlz~q4m?%R|qu}Mqra|I;gQS-NTAeGrf{Y$ki@aWC!HpKuL&v)(JrZ|j zU%g+JH!~S|XBzZS*s9e=%|GE_&Fcw6RlFGUm1I0XC=I=H&|cibqUGd1_eN2q@HMPX z6*XXjf{Y2HesADC0jwbkjIB<^mF4o{HuD^-R{m^$r?zH)I35x7Ro4#+Bl3k!XnoaC zRP+3UN#>su)%^VHkm39*ESmrO+?)AN;hd)B`|%X;q{(S8|0*c+k1L;(61R_H{uLO{ zzv9-K|HMVvSBDl}mfo1!JF4+f01D&Su;Gx?ftshEfvV}BjJD9OrR%{NQhfb-+i><3 z7R~-WZq4MU=r;ER%YcdyOumAO$>-DeHDQ^21;&%FxV0ufaZ2{pbwwQRfK%g|f7-#8 z@$qEBP|VyLh1do<=H3*z4~W1z09DaobC}(@!2=!CEY{9a4D+#cHvh+e?Hnj&*nWsL?m>{{x=T@w(* zP^lnU$LSL%H%F5By@ZpYnIH~i1Q`^uF**~^{7ggyapUFH#UOE0@;fC2VX~OA-8vx@ z1|hH>k5+NhD)TN$n=&Q^d5;OIt)*NVtel32xQDxw!K2MFO;(5p>bb+cxgYgpzPDh0 z4>?8I+~oAzdrBVr3nDV4QgG@#%H>Kx27%)f%R4LGs|d)T@5|N>GFxh4ijYBpp+(_v zEo?}#8!tgr&8d7N*wS&L8c>`4>a6p z;ew&#-P58-e3Jw9VqtF)XFqgD1u#Qldz^Y&EpU_u!4djppfVJ^J0)4mTcxNBP$e;X ztQt90%=)2&uIho)$*N=Ts5A6uL+A*-BGM5~j6qHe$dSTXY1^y`l_4O9f*=PCriWYp z{0=Rlz>pjYYf%%4Cvu>EtRA`hTMeE_2b<5%rzadD%*@QJaY2W~@@PEtv>_`pkcO7~ z<{*QPnvkK12MUgOkV?SknT`C02PxcY;pMj-PT+tCDyS(5j-83&)t3qn6d3YAVJ$pJ z9Fha|XA#m!Dd4V)&Os?CZ2H2KL1!1;VBu0KG+IH?2dozgK_vi5SU{KT{92(SJ~`Uo zfANE(qge-cj?-Xh0|iGcNF^Y;wr#0UI0up$fmte4hJXbMG8WJWj+$ZmwqSt*Ll!8k zg$0RQa-fc_E!?35`8qPf0)<&?wgqjpNWq!A35ElTCA5y5UVpX)4}g_CAor*x1j3Da zzQd^|`8OoJ=_`W-djHsBNCmLt$=tl63#K zL)=6^)VCB0Thd_uysjA(cXH$qCRL<$9dH>0GxoX6%)H`am5|<^`rFwG zQ>X-i6A7R5X`>RH6wN9@LCifLUY|U}no3Y$>}XKj{dB@G@k{bMbwhEUHo$A`R;(S| zl>#$kaN1d%P0w8V)viZ2RtUDyDngJRo*rY>gY4bSmwB3}^B0~TllxotPz}`lmMQvd+?NSs7M_+*gYAMI3|bc>tdf|8QhMkFhXHPmnjt; zE+__W^B)?O|K!Dna z&@gAiKm&!99Yx^7V(Ly6A%vov&a(_sae)sa7hg8_BN7eAe)ja(dfjc-PT$~y3J|Ut zA_Y+fEzN}#-s+t8QZ%j^4g?#R16oWCiJU}LaO&$UH+Z2>7pe+{-BVR0&dH(rvaIC= zRYdEmLSZFGjEqWc7^2vN=|1U$hi;Xb6|jmWR=75^eS;-Bs%ea^!l2~P#ZelLC^%Cl z&XA=P82H)f-X|(FDYu)sb2xN{$`R-c1sO|-+$F45Uo6~EV8{)H-IE)Mdvd6*EbM;D z*VW^#9n6lPck2Bo9BSF=S)UM2aK~~s_++zfUEqWYxYv1dK07@+q(h-2FpN-Ww1TAf zHxE$GUk)1_yqAl+g$*i0zy<}u2K-Rtt+87ZVS@rgHYn_vG`i}TNi#Qxi8qqp>Doam zgvANF4~?}$VZ{!ELkluEDKW3Ji(*i)rDUhVtWL8GRdRr$Bjdau$_={QYLFP9H-`Z3 z=BGHyI01Dbe0v41yuH=`$T>ryKq{?yi}DBDUW(>rLq#WhT}!>xw9>pe9> z;+q_*JBwQ5V+yS}PY7DNDR{gGL!;Do{{#F~Ml7W5SaYC%D8qK8`OHE=?Kp;}PbI_0K^iF=aYq8@P5 z(V(iX9t750ZML)}YSfU6X=~kFGs;9M*@4rzo0}Zg3_t4Lp;?;5eY?*KmEoYxO-c0r zq^ae$5s*W~9gVYOh8!wGKn?|&1%b1eJ-NP8)(iz^cO43C*>xl?%Aq>7a2DYt>(;5E zuuspeciml;$@kT><3^K7siv8gd8X8%2Rp#;paR1WZ87s#Oe*8gp(tn zL@EZsIlbHl2udiNGD~@Vp)v%NP!N;Kt_N8VT+#B&+5;A+UTBg}ebs83!NF!9zO`M(X>;_80~4TM z>xl~wQa>RIDQn`x1C=vtPdaSGg8K*n3j|JtXI>3B83GpQLlx`8#C)Lo(ZB))Mry#p zT3C=cDM#wbA{cLiRa@IqIM~ujI6dDxrxb{ayvw1esEoU^VhV!>z{+ot^J=RySGuen z4Pk)}dVa#ar!PqKcdp&X9vODIl>7Isy=z7t!Gcs=+iB*s*TPE?us|OQ77V*Ajbryr zut0$!3lz4_u40rpBl#^$!q8%weIyo3g2L`{b(<3W9d!4+cKQhq7%t%f21=F(dh;9) z6!~mHfeOdfJ$G}uB;?%9#rlN}N$FeHJ()*?aTbsVX~ zic(GV)*I9ng2EnCXJL0i1rQ3?9dVRY+d;TtL#4p5B^fAQr}N>y3$%htk**C+lcELFunTT5f&uut5Vi`oEJP7y z?fd;+Hpm4fA@CM!0|uzH0Rt3NG`@0*n%P%SIQt4ilM6w4s{x9#~2QJ z#PDy^J{Gh)CMT;BunhLXsm?v~Nxw9=)YP5vH$`fOq$te9X9K|ug&m`=>527%GYB6ex$Chr!tvdr z4G$Qvng=v>&QPEGA#1G0S8}W#E1I29 z0LB;6hXx8GA)nS39ZHusR3vuTDCo&xB@@g@$}P7rK_#g6lw0+Zvkn_+gH!;vfZ5Y1 z76gG4v7Iw(SP`7OjbV}wM22jaauI~Z)ySZu1s-ZQ+!_w3apHsIx0;K5o!Cq&3RFgWnWdp4;EU1|4?SItS0K&`U$ra)%8gTka(S zd=QE88Rr76;e$#XC z&e%v;%n?o6@B$syHo*{~j8Inq1$K5R( z3Wc|BC{&7oAqukPqdTS{yF2WMAqor`qOcZ*B<{$uI;H$gPI%nc%MvBOUWW^NZBMPD+1Wooq z&U=l9P!WRpSCGwrA5V+l)ieJJj8+UqwM>8Fd>pI0YMH)WPs~$Tvw}FCpX^aza5jCu znANp|-skyz&mD_H3LqsZ+7r7~r0vtaqeuC&lkS3u8uyU`ZlrJ$>9S0Q8~PdoZYT(D z;1eb+vaTBx80rRvtz%kF62~OJQ+tA@X%>>o$x<-?A23bYb zx@%{J040AYLpVaKM<4aviMyQ^7<0<+vBw6?G1-&*b5+(&rSR5WslJ)*X687MX%zxT z#(p30%s)|hw4nnwPim0EQ_YW_g-sIACcjf^agac*oq7!sg*8i2__fU8x$OO|>%uNo zDbhPN4`IDNE2&pGV0K|StAys6t&m}r+-7?f#$Q&V@m4t0(hI^AViCjYjpeM=C&jR( z)I`*_Y;wF5jhh??f?QieY)QY1hg|whky=t%^OW3|TZxZ!qFy!97Gaj(k)gH()-1(c zoKB5YYg|j5-##T)^-`1-mzEPmnB!K?ra)WCowhCKWRKH73OLqMg&Z_eR_XmYhaKh) zR^gMt@pa`k`HPyk&3w{lvSp5HDucQSb*Hr1a>KGdAdgcAP%>4N>&d)(6p@a}VoTB_dolVQ zJ7*V!QEZklsT62|Y$yVR5jds)bJ`2Ss2~Ah6a-;N7Nj9(&FXfe#e~rTvjIYr#FfkM z)F{F)IvNtGq!R}d6n0=P+zy$D?$8bzDDdQna=v@#^^8Tsl}sRba*{hqhY33Dbf1HN z%I#qx)t4lNMoUt9f6_m)E$iWc!s*wVAub$H83GO{$T-j?q`=p3z{F8tXyPbrt({lm z$(^X%Z)-rv%cOp`qp)VpRHn1KH3NF+O`cP{vzE+in2H)SifW;T4w+XHijBCD3b2NL zPe`vYAS(h2feO4Ux5n>47s4NwU&#-mpf5EUs2tk7@eBops>4;;-gg>N-c(*B|@*z z!aa9>5-=qth%#^6(CU!cY$bntD9Pr>SEpmwk&3_`G+QnhMkqYrkpS(W5(kV>P$pN& z4HsLHI^r6f!1Y=76tv%|G0A@uwCGy^?|9fMxcI>AM4#dAu}9Ar^O-*fEKn#?#FD=5FXyFAykI`R^hq}Wq9J@Em;R%hDJVk&@wH>f0EBUEYJ@gwiXvEZ!2Cy z<-%qkH~!c=Fgz@1FzR84Q%Y#n4ton!#RI}3a;Y5fKt-e|7smueW!74ZxyME%V8pcr zfCMQV$7$Zt4HOvCKw;U#J}S{B%0L`s+c;{eL**luPzC~P z-cMLjwOT@wyK)<)MtuZbe`W=!ni0#v$*TsD2G?hf5{iu|0jdy z^V!w)>8$~#H)mJh&`H%ki+_53_4)Tdnr?o4U}9}-f3o35+4%b1^-qeMY#%@S?yvo= z2Y3JclRtd$?H_;l!2|pEH~7PEUT?g)y1jUbD388*^ZJwD<$pR~U0vV2diR!lJz~+i zdVBfq<*T_(h)#X)fpv}?7^{dM-?3v2JUS9mdW4-+8 z+Y9b{aeaO9(~q{l*XfkcdiK-zS2vx@cVE6O=EeTb{cVR!c}qW}GtcqKN1ZpX-kyH> z{{6e_+pCw)%a_cfn{jaY?)^`T>3x53b9*&?{kr;(=NGTPyedAF&YP?2A2Fh_;Qi}Y zw~t?4-z-US{qF1Ccdt*sc=h@6zb{{3U0gq2zV8BG{K4+KH*c=q-Y&jOApf4)&XZ%L8jfr~%-{L9-fudfVduh~7Oer1own5?go8&@Nz!)$-=lkz>gkM{C^{?VULzw_XM z{k!^T?fd@h-MgRsav$y8D8I6g_PX|!HGKHX&vy3i@=K%Q^2@)zdVO(=&bj&G)%zRP z$ver8ulX)sUL6*n(b*TTZho+OaMOB)?m%Z2|9{27*~RU<8$J$GunVS}cYpoyD}G!r zUK*c2S?XS{Ds-g1L-)3y{`j~4@BUwT@WB548>qqjo9+B0@KGJojAs)Nr;l?E^&%^iSSH<8Ls2?c(^4+C`W__w9`x@VUG2+KxL5TMCzG=|A$9!I_EPVIV_pEA{ zg(}!SwQu+-rzq(ke)0sP0c+&=f|YOkldo<+{_5%y1F3WK>YqV-`2X3(&DC;(zq+`7 zb@BF=VGXwYkK*_1_cyoK+onpEDg?v$_T%Lr7C%#L`ukOX+qMd~AM-PB_zM;B z?A7h-tDB?Gk1wuo8zhE~mBfV%OL>>#6zZ%dUh%}-$PK+w&9$S~U;NoW|E*71J?!7# zO6g@E_%FAHT)zL<2B~hnvfnP>uR{t^LU%S~UF|G+_VThE^8J_BuL~>k<>kiJ>#M@1 z+1Pxvxp8Oly}Z1=x_(m`qUi<2-z3O4uWnPFnL=M)F8{Jbe{+MavLgG}Uw{4R>s}!S zHr(dM4-fWF3w!tBtG8w(UtXaV)&Bm^fBEA-{M!2|pEZ!!`8X!qS)blUCj7azdy z{c=-LjPVODE|*I=9@?8={an8AZ*Evs+8(w7-|Nk6e=@uJ{Nl^kx1G6Z_2q_x+kVtp zy%Kwx?|+2;yHf}o_O~oE4cC2U`-bqkuin0V^ycQ_)i>B%kBTq;5f@xs|MbzD3-%N9 zw-=wiz5-&qkLK~e%F1QqtDW<3sq9d1g^lxw>u1*&U!%8z8<-*4@&x%iyunI({X4}l z&5!WeoA>SpuiltxVSnCy#e1aHm%6;d{=E5$AHDj#@e2F%<}0q=G+*(}L;IWNYrYPz zvA=1)=Ev`wpXJBzucC)3{;KKuGuPY(FMvOfBrE=^={A{b-oNy3E&WXFZ=2u3H8!l9 zp!C899D7Zxc_op zU)uVcg$4Gj6T}R=V*D04ZgG8FZ503e%ZpG9({jU`+n-`-{EDA;IcV&NN-#vlLWfBpRj5A0vFN2-7R4MN6li&O91N-;y$fbYr4~k365A7!Tko_p$qgf5~ z@Big@y?@hR>^&>h#m9eCT%5i@f3bHIR2Tnu+^dP(z+dP$d)0-#fAihi*3VzR&U^_xQg*fD{-14&U*E{}1TeQH1~i From 84cf8058dd74af8b06852a45b1f8c601e5616b47 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Sun, 28 Jul 2024 23:44:05 -0300 Subject: [PATCH 46/73] refactor: se hacen ajustes y se elimina codigo innecesario --- package.json | 4 +- src/index.js | 4 +- ...mberRepository.js => member.repository.js} | 2 - src/routes/member.js | 27 -------- src/services/member.service.js | 66 ------------------- vercel.json | 8 +-- 6 files changed, 4 insertions(+), 107 deletions(-) rename src/repositories/{MongoMemberRepository.js => member.repository.js} (99%) delete mode 100644 src/routes/member.js delete mode 100644 src/services/member.service.js diff --git a/package.json b/package.json index 1ceacfe..bd81924 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { - "name": "express-vercel", + "name": "iepe-memebers", "version": "1.0.0", - "description": "Deploy express js to vercel.", + "description": "Api para iepe", "main": "index.js", "scripts": { "start": "node --max-old-space-size=1024 src/index.js" diff --git a/src/index.js b/src/index.js index ca24947..467b177 100644 --- a/src/index.js +++ b/src/index.js @@ -2,16 +2,14 @@ const express = require('express'); const dotenv = require('dotenv'); const cors = require('cors'); const db = require('./configurations/db.config'); -const MongoMemberRepository = require('./repositories/MongoMemberRepository'); +const MongoMemberRepository = require('./repositories/member.repository'); const memberRepository = new MongoMemberRepository(); -const nodeHtmlToImage = require('node-html-to-image'); const QRCode = require('qrcode'); const fs = require('fs'); const path = require('path'); const Jimp = require('jimp'); const puppeteer = require('puppeteer'); -const mongoose = require('mongoose'); const XLSX = require('xlsx'); dotenv.config({ path: '.env' }); diff --git a/src/repositories/MongoMemberRepository.js b/src/repositories/member.repository.js similarity index 99% rename from src/repositories/MongoMemberRepository.js rename to src/repositories/member.repository.js index 315f225..378576c 100644 --- a/src/repositories/MongoMemberRepository.js +++ b/src/repositories/member.repository.js @@ -30,13 +30,11 @@ class MongoMemberRepository { return Promise.reject(new Error('Method not implemented.')); } - async findLean() { const members = await MemberModel.find().select('-avatar -_id -__v').lean(); return members; } - async find(page) { const pageSize = 5; // Tamaño de página, puedes ajustarlo según tus necesidades const skip = page * pageSize; // Cálculo de skip considerando la indexación base 0 diff --git a/src/routes/member.js b/src/routes/member.js deleted file mode 100644 index 73d0211..0000000 --- a/src/routes/member.js +++ /dev/null @@ -1,27 +0,0 @@ -const express = require('express'); -const { - createMember, - getMembers, - getMemberById, - updateMember, - deleteMember -} = require('../services/member.service'); - -const router = express.Router(); - -// POST create a member -router.post('/members', createMember); - -// GET list of members -router.get('/members', getMembers); - -// GET member by ID -router.get('/members/:id', getMemberById); - -// PUT update member by ID -router.put('/members/:id', updateMember); - -// DELETE member by ID -router.delete('/members/:id', deleteMember); - -module.exports = router; diff --git a/src/services/member.service.js b/src/services/member.service.js deleted file mode 100644 index 0551072..0000000 --- a/src/services/member.service.js +++ /dev/null @@ -1,66 +0,0 @@ -const MongoMemberRepository = require('../repositories/MongoMemberRepository'); -const memberRepository = new MongoMemberRepository(); - -const createMember = async (req, res) => { - try { - const member = req.body; - const savedMember = await memberRepository.save(member); - res.status(201).json(savedMember); - } catch (error) { - res.status(500).json({ message: error.message }); - } -}; - -const getMembers = async (req, res) => { - try { - console.log(req) - const members = await memberRepository.find(req); - res.status(200).json(members); - } catch (error) { - res.status(500).json({ message: error.message }); - } -}; - -const getMemberById = async (req, res) => { - try { - const { id } = req.params; - const member = await memberRepository.findById(id); - if (member) { - res.status(200).json(member); - } else { - res.status(404).json({ message: 'Member not found' }); - } - } catch (error) { - res.status(500).json({ message: error.message }); - } -}; - -const updateMember = async (req, res) => { - try { - const { id } = req.params; - const member = req.body; - member.dni = id; - const updatedMember = await memberRepository.update(member); - res.status(200).json(updatedMember); - } catch (error) { - res.status(500).json({ message: error.message }); - } -}; - -const deleteMember = async (req, res) => { - try { - const { id } = req.params; - const result = await memberRepository.delete(id); - res.status(200).json({ message: result }); - } catch (error) { - res.status(500).json({ message: error.message }); - } -}; - -module.exports = { - createMember, - getMembers, - getMemberById, - updateMember, - deleteMember -}; diff --git a/vercel.json b/vercel.json index 159a2ac..3f0e090 100644 --- a/vercel.json +++ b/vercel.json @@ -11,11 +11,5 @@ "src": "/(.*)", "dest": "src/index.js" } - ], - "functions": { - "src/index.js": { - "memory": 3009, - "maxDuration": 30 - } - } + ] } From 4bcc1d98bb3b4a3eed485f18c51d7af6a9a83d7a Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Mon, 29 Jul 2024 09:56:34 -0300 Subject: [PATCH 47/73] FEAT: SE AGREGA CARGA DE SERVICIOS --- .../schemas/services/Services.schema.js | 15 ++ src/index.js | 150 +++++++++++++----- src/repositories/member.repository.js | 65 +++++--- src/repositories/services.repository.js | 69 ++++++++ 4 files changed, 234 insertions(+), 65 deletions(-) create mode 100644 src/configurations/schemas/services/Services.schema.js create mode 100644 src/repositories/services.repository.js diff --git a/src/configurations/schemas/services/Services.schema.js b/src/configurations/schemas/services/Services.schema.js new file mode 100644 index 0000000..58228b2 --- /dev/null +++ b/src/configurations/schemas/services/Services.schema.js @@ -0,0 +1,15 @@ +const mongoose = require('mongoose'); +const { Schema } = mongoose; + +const servicesSchema = new Schema({ + dni: { index:true, type: String, required: true}, + firstName: { type: String, required: true }, + lastName: { type: String, required: true }, + avatar: { type: String, required: false }, + date: { type: Date, required: true }, + observations: { type: String, required: false }, +}); + +const ServicesModel = mongoose.model('Services', servicesSchema); + +module.exports = ServicesModel; diff --git a/src/index.js b/src/index.js index 467b177..44b2c24 100644 --- a/src/index.js +++ b/src/index.js @@ -1,18 +1,21 @@ const express = require('express'); +const fs = require('fs'); const dotenv = require('dotenv'); +dotenv.config({ path: '.env' }); const cors = require('cors'); -const db = require('./configurations/db.config'); -const MongoMemberRepository = require('./repositories/member.repository'); -const memberRepository = new MongoMemberRepository(); const QRCode = require('qrcode'); -const fs = require('fs'); const path = require('path'); const Jimp = require('jimp'); const puppeteer = require('puppeteer'); - const XLSX = require('xlsx'); -dotenv.config({ path: '.env' }); +const db = require('./configurations/db.config'); + +const MongoMemberRepository = require('./repositories/member.repository'); +const MongoServicesRepository = require('./repositories/services.repository'); + +const memberRepository = new MongoMemberRepository(); +const servicesRepository = new MongoServicesRepository(); const app = express(); @@ -25,9 +28,8 @@ const app = express(); } })(); -// Set the limits once -app.use(express.json({ limit: '10mb' })); // Reduce limit if possible -app.use(express.urlencoded({ limit: '10mb', extended: true })); // Reduce limit if possible +app.use(express.json({ limit: '10mb' })); +app.use(express.urlencoded({ limit: '10mb', extended: true })); app.use(cors({ origin: '*', @@ -36,7 +38,8 @@ app.use(cors({ optionsSuccessStatus: 204 })); -// Servicios + +/* MEMBERS */ const createMember = async (req, res) => { try { const member = req.body; @@ -69,6 +72,15 @@ const getMembers = async (req, res) => { } }; +const getMembersSummary = async (req, res) => { + try { + const members = await memberRepository.findSummary(); + res.status(200).json(members); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + const getMemberById = async (req, res) => { try { const { id } = req.params; @@ -105,38 +117,6 @@ const deleteMember = async (req, res) => { } }; -const exportarDB = async (req, res) => { - try { - // Obtén los datos de la colección, omitiendo `_id` y `avatar` - const datos = await memberRepository.findLean(); - - // Verifica que `datos` sea un array - if (!Array.isArray(datos)) { - return res.status(500).json({ message: 'Error: Los datos no son un array.' }); - } - - // Crea una nueva hoja de cálculo - const hoja = XLSX.utils.json_to_sheet(datos); - - // Crea un libro de trabajo y agrega la hoja - const libro = XLSX.utils.book_new(); - XLSX.utils.book_append_sheet(libro, hoja, 'Datos'); - - // Genera el archivo Excel en formato binario - const archivoExcel = XLSX.write(libro, { bookType: 'xlsx', type: 'buffer' }); - - // Configura la respuesta HTTP - res.setHeader('Content-Disposition', 'attachment; filename=exportacion.xlsx'); - res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); - res.send(archivoExcel); - console.log('Exportación completada con éxito.'); - } catch (error) { - console.error('Error al exportar:', error); - res.status(500).json({ message: 'Error al exportar' }); - } -} - - const generateCredential = async (req, res) => { try { const { dni } = req.params; @@ -191,16 +171,98 @@ const generateCredential = async (req, res) => { } }; +/* SERVICES */ +const createServices= async (req, res) => { + try { + const service = req.body; + const avatar = await getAvatarById(service.dni) + const date = new Date(); + const savedService= await servicesRepository.save({...service, avatar, date}); + res.status(201).json(savedService); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const getServices = async (req, res) => { + const { page, filter } = req.query; + try { + let services; + if (filter) { + services = await servicesRepository.findByFilter(filter, page); + } else { + services = await servicesRepository.find(page); + } + res.status(200).json(services); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +/* SHARED SERVICES */ + +const exportDocuments = async (req, res) => { + try { + const datos = await selectedRepository(req.path); + + if (!Array.isArray(datos)) { + return res.status(500).json({ message: 'Error: Los datos no son un array.' }); + } -// Rutas + const hoja = XLSX.utils.json_to_sheet(datos); + + const libro = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(libro, hoja, 'Datos'); + + // Genera el archivo Excel en formato binario + const archivoExcel = XLSX.write(libro, { bookType: 'xlsx', type: 'buffer' }); + + // Configura la respuesta HTTP + res.setHeader('Content-Disposition', 'attachment; filename=exportacion.xlsx'); + res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + res.send(archivoExcel); + console.log('Exportación completada con éxito.'); + } catch (error) { + console.error('Error al exportar:', error); + res.status(500).json({ message: 'Error al exportar' }); + } +} + +/* UTILS */ +const selectedRepository = async (repositoryName) => { + let datos; + + switch (repositoryName) { + case '/services/export': + datos = await servicesRepository.findLean(); + break; + + case '/members/export': + datos = await memberRepository.findLean(); + break; + + default: + datos = []; + break; + } + return datos; +} + +// Rutas members app.post('/members', createMember); app.get('/members', getMembers); -app.get('/members/export', exportarDB) +app.get('/members/summary', getMembersSummary); +app.get('/members/export', exportDocuments) app.get('/members/generate-credential/:dni', generateCredential); app.get('/members/:id', getMemberById); app.put('/members/:id', updateMember); app.delete('/members/:id', deleteMember); +// Rutas services +app.post('/services', createServices); +app.get('/services', getServices); +app.get('/services/export', exportDocuments) + const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Server is running on port ${PORT}`)); diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index 378576c..db5fbcc 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -3,27 +3,27 @@ const MemberModel = require('../configurations/schemas/member/Member.schema'); class MongoMemberRepository { - async exportEXCEL(){ - try { - // Obtén los datos de la colección - const datos = await MiModelo.find().lean(); - - // Crea una nueva hoja de cálculo - const hoja = XLSX.utils.json_to_sheet(datos); - - // Crea un libro de trabajo y agrega la hoja - const libro = XLSX.utils.book_new(); - XLSX.utils.book_append_sheet(libro, hoja, 'Datos'); - - // Escribe el archivo Excel - XLSX.writeFile(libro, 'exportacion.xlsx'); - console.log('Exportación completada con éxito.'); - } catch (error) { - console.error('Error al exportar:', error); - } finally { - mongoose.connection.close(); - } - + async exportEXCEL() { + try { + // Obtén los datos de la colección + const datos = await MiModelo.find().lean(); + + // Crea una nueva hoja de cálculo + const hoja = XLSX.utils.json_to_sheet(datos); + + // Crea un libro de trabajo y agrega la hoja + const libro = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(libro, hoja, 'Datos'); + + // Escribe el archivo Excel + XLSX.writeFile(libro, 'exportacion.xlsx'); + console.log('Exportación completada con éxito.'); + } catch (error) { + console.error('Error al exportar:', error); + } finally { + mongoose.connection.close(); + } + } generateCredential() { @@ -83,11 +83,34 @@ class MongoMemberRepository { }; } + async findSummary() { + const members = await MemberModel.find() + .select('dni firstName lastName -_id') + .sort({ lastName: 1, firstName: 1 }); + return { + members, + }; + } + async findById(dni) { const member = await MemberModel.findOne({ dni }); return member; } + async getAvatarById(dni) { + try { + const member = await MemberModel.findOne({ dni }).select('avatar'); + if (!member) { + throw new Error(`No se encontró un avatar para el DNI: ${dni}`); + } + return member.avatar; + } catch (error) { + console.error(`Error al obtener el avatar para el DNI: ${dni}`, error); + throw error; + } + + } + async save(member) { const newMember = new MemberModel(member); return await newMember.save(); diff --git a/src/repositories/services.repository.js b/src/repositories/services.repository.js new file mode 100644 index 0000000..c4c6017 --- /dev/null +++ b/src/repositories/services.repository.js @@ -0,0 +1,69 @@ +const ServicesModel = require('../configurations/schemas/services/Services.schema'); + +class MongoServicesRepository { + + + async findLean() { + const members = await ServicesModel.find().select('-avatar -_id -__v').lean(); + return members; + } + + async find(page) { + const pageSize = 5; + const skip = page * pageSize; + + const members = await ServicesModel.find() + .skip(skip) + .limit(pageSize); + + const total = await ServicesModel.countDocuments(); + + return { + members, + total, + page, + totalPages: Math.ceil(total / pageSize) + }; + } + + async findByFilter(filter, page) { + const perPage = 10; + const pageNumber = parseInt(page) || 1; + const skip = (pageNumber - 1) * perPage; + + const query = { + $or: [ + { firstName: { $regex: filter, $options: 'i' } }, + { dni: { $regex: filter, $options: 'i' } } + ] + }; + + const services = await ServicesModel.find(query) + .skip(skip) + .limit(perPage) + .exec(); + + const totalServices = await ServicesModel.countDocuments(query); + const totalPages = Math.ceil(totalMembers / perPage); + + return { + services, + total: totalServices, + totalPages, + currentPage: pageNumber + }; + } + + async findById(dni) { + const member = await ServicesModel.findOne({ dni }); + return member; + } + + async save(member) { + const newMember = new ServicesModel(member); + return await newMember.save(); + } + +} + +module.exports = MongoServicesRepository; From fb218ba3b1e5d7d6c17bf5b533d4dc5fd446ca34 Mon Sep 17 00:00:00 2001 From: eliassolari Date: Sat, 3 Aug 2024 12:21:35 -0300 Subject: [PATCH 48/73] IEPE- (ESOLARI) - feat : indexado de nombres y apellido --- src/configurations/schemas/member/Member.schema.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/configurations/schemas/member/Member.schema.js b/src/configurations/schemas/member/Member.schema.js index 82ea99f..c2cf41b 100644 --- a/src/configurations/schemas/member/Member.schema.js +++ b/src/configurations/schemas/member/Member.schema.js @@ -3,8 +3,8 @@ const { Schema } = mongoose; const memberSchema = new Schema({ dni: { index:true, type: String, required: true}, - firstName: { type: String, required: true }, - lastName: { type: String, required: true }, + firstName: {index:true, type: String, required: true }, + lastName: {index:true, type: String, required: true }, avatar: { type: String, required: false }, dateOfBirth: { type: Date, required: true }, address: { type: String, required: true }, From 4d8462de9a8fbef0e0029bb54a9dc9c3225de790 Mon Sep 17 00:00:00 2001 From: eliassolari Date: Sat, 3 Aug 2024 23:16:14 -0300 Subject: [PATCH 49/73] IEPE- (ESOLARI) - feat : intalacion de dependencias --- package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/package.json b/package.json index bd81924..1337415 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "debug": "~2.6.9", "dotenv": "^16.4.5", "express": "^4.19.2", + "express-compression": "^1.0.2", "fs": "^0.0.1-security", "http-errors": "~1.6.3", "jade": "^1.9.2", From 9797c7ec6d86d42e3b7c168d47492ad2c03e241f Mon Sep 17 00:00:00 2001 From: eliassolari Date: Sat, 3 Aug 2024 23:18:07 -0300 Subject: [PATCH 50/73] IEPE- (ESOLARI) - feat : configuracion de middlewares --- src/index.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/index.js b/src/index.js index 44b2c24..393a96c 100644 --- a/src/index.js +++ b/src/index.js @@ -8,6 +8,7 @@ const path = require('path'); const Jimp = require('jimp'); const puppeteer = require('puppeteer'); const XLSX = require('xlsx'); +const compression =require('express-compression') const db = require('./configurations/db.config'); @@ -37,6 +38,11 @@ app.use(cors({ credentials: true, optionsSuccessStatus: 204 })); +app.use( + compression({ + brotli: { enabled: true, zlib: {} }, + }) +); /* MEMBERS */ From bb32850980d6f5bad6ed6a23ace28c5b592c73f3 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Mon, 5 Aug 2024 16:07:30 -0300 Subject: [PATCH 51/73] feat: lista jovenes --- .../schemas/member/Member.schema.js | 2 +- .../schemas/services/Services.schema.js | 14 +++---- src/index.js | 39 +++++++++++++++++-- src/repositories/member.repository.js | 2 +- src/repositories/services.repository.js | 38 +++++++++++++++--- 5 files changed, 77 insertions(+), 18 deletions(-) diff --git a/src/configurations/schemas/member/Member.schema.js b/src/configurations/schemas/member/Member.schema.js index 82ea99f..da660ac 100644 --- a/src/configurations/schemas/member/Member.schema.js +++ b/src/configurations/schemas/member/Member.schema.js @@ -2,7 +2,7 @@ const mongoose = require('mongoose'); const { Schema } = mongoose; const memberSchema = new Schema({ - dni: { index:true, type: String, required: true}, + dni: { index: true, type: String, required: true }, firstName: { type: String, required: true }, lastName: { type: String, required: true }, avatar: { type: String, required: false }, diff --git a/src/configurations/schemas/services/Services.schema.js b/src/configurations/schemas/services/Services.schema.js index 58228b2..3acea2b 100644 --- a/src/configurations/schemas/services/Services.schema.js +++ b/src/configurations/schemas/services/Services.schema.js @@ -1,15 +1,15 @@ const mongoose = require('mongoose'); const { Schema } = mongoose; -const servicesSchema = new Schema({ - dni: { index:true, type: String, required: true}, - firstName: { type: String, required: true }, - lastName: { type: String, required: true }, - avatar: { type: String, required: false }, +const serviceSchema = new Schema({ + dni: { type: String, index: true, unique: true, required: true }, date: { type: Date, required: true }, observations: { type: String, required: false }, + member: { type: Schema.Types.ObjectId, ref: 'Member', required: true }, + service:{ type: String, required: false }, + aproved: { type: Boolean, required: false} }); -const ServicesModel = mongoose.model('Services', servicesSchema); +const ServiceModel = mongoose.model('Service', serviceSchema); -module.exports = ServicesModel; +module.exports = ServiceModel; diff --git a/src/index.js b/src/index.js index 44b2c24..4fd99de 100644 --- a/src/index.js +++ b/src/index.js @@ -13,6 +13,8 @@ const db = require('./configurations/db.config'); const MongoMemberRepository = require('./repositories/member.repository'); const MongoServicesRepository = require('./repositories/services.repository'); +const MemberModel = require('./configurations/schemas/member/Member.schema'); +const ServiceModel = require('./configurations/schemas/services/Services.schema'); const memberRepository = new MongoMemberRepository(); const servicesRepository = new MongoServicesRepository(); @@ -74,7 +76,7 @@ const getMembers = async (req, res) => { const getMembersSummary = async (req, res) => { try { - const members = await memberRepository.findSummary(); + const members = await memberRepository.findSummary(req.query); res.status(200).json(members); } catch (error) { res.status(500).json({ message: error.message }); @@ -175,9 +177,24 @@ const generateCredential = async (req, res) => { const createServices= async (req, res) => { try { const service = req.body; - const avatar = await getAvatarById(service.dni) + const avatar = await memberRepository.getAvatarById(service.dni); const date = new Date(); - const savedService= await servicesRepository.save({...service, avatar, date}); + + // Encontrar al miembro por dni + const member = await MemberModel.findOne({ dni: service.dni }); + if (!member) { + return res.status(404).json({ message: 'Member not found' }); + } + + // Crear y guardar el servicio + const newService = new ServiceModel({ + ...service, + avatar, + date, + member: member._id // Referencia al miembro + }); + const savedService = await newService.save(); + res.status(201).json(savedService); } catch (error) { res.status(500).json({ message: error.message }); @@ -199,6 +216,21 @@ const getServices = async (req, res) => { } }; + +const aprovedService = async (req, res) => { + try { + const { id } = req.params; + const member = await servicesRepository.aprodev(id); + if (member) { + res.status(200).json(member); + } else { + res.status(404).json({ message: 'Member not found' }); + } + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + /* SHARED SERVICES */ const exportDocuments = async (req, res) => { @@ -262,6 +294,7 @@ app.delete('/members/:id', deleteMember); app.post('/services', createServices); app.get('/services', getServices); app.get('/services/export', exportDocuments) +app.put('/services/aproved/:id', aprovedService) const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Server is running on port ${PORT}`)); diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index db5fbcc..d69e8ac 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -83,7 +83,7 @@ class MongoMemberRepository { }; } - async findSummary() { + async findSummary(filter) { const members = await MemberModel.find() .select('dni firstName lastName -_id') .sort({ lastName: 1, firstName: 1 }); diff --git a/src/repositories/services.repository.js b/src/repositories/services.repository.js index c4c6017..1e7ae98 100644 --- a/src/repositories/services.repository.js +++ b/src/repositories/services.repository.js @@ -12,14 +12,17 @@ class MongoServicesRepository { const pageSize = 5; const skip = page * pageSize; - const members = await ServicesModel.find() + const services = await ServicesModel.find() + .select('-dni -_id -__v') .skip(skip) - .limit(pageSize); + .limit(pageSize) + .populate('member', 'dni avatar firstName lastName dateOfBirth -_id') + .exec(); const total = await ServicesModel.countDocuments(); return { - members, + services, total, page, totalPages: Math.ceil(total / pageSize) @@ -39,12 +42,14 @@ class MongoServicesRepository { }; const services = await ServicesModel.find(query) + .select('-dni -_id -__v') .skip(skip) .limit(perPage) + .populate('member', 'dni avatar firstName lastName dateOfBirth -_id') .exec(); const totalServices = await ServicesModel.countDocuments(query); - const totalPages = Math.ceil(totalMembers / perPage); + const totalPages = Math.ceil(totalServices / perPage); return { services, @@ -55,8 +60,15 @@ class MongoServicesRepository { } async findById(dni) { - const member = await ServicesModel.findOne({ dni }); - return member; + try { + const service = await ServicesModel.findOne({ dni }); + return service; + + } catch (error) { + console.log(error) + return error; + } + } async save(member) { @@ -64,6 +76,20 @@ class MongoServicesRepository { return await newMember.save(); } + async aprodev(id) { + try { + const service = await this.findById(id); + if (!service) throw new Error('Service not found'); + + service.aproved = !service.aproved; + return await service.save(); + + } catch (error) { + console.log(error) + return error; + } + } + } module.exports = MongoServicesRepository; From efb57ae9855f985f98d003ff8d05653f5b41a9ff Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Mon, 5 Aug 2024 23:27:44 -0300 Subject: [PATCH 52/73] feat: se agregan filtro --- package-lock.json | 67 ++++++++++++- package.json | 1 + .../schemas/member/Member.schema.js | 1 + src/index.js | 2 +- src/repositories/member.repository.js | 98 +++++++++++++++++-- 5 files changed, 159 insertions(+), 10 deletions(-) diff --git a/package-lock.json b/package-lock.json index 755bbac..c2b89a9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,11 +1,11 @@ { - "name": "express-vercel", + "name": "iepe-memebers", "version": "1.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { - "name": "express-vercel", + "name": "iepe-memebers", "version": "1.0.0", "dependencies": { "bcrypt": "^5.1.1", @@ -14,11 +14,13 @@ "debug": "~2.6.9", "dotenv": "^16.4.5", "express": "^4.19.2", + "express-compression": "^1.0.2", "fs": "^0.0.1-security", "http-errors": "~1.6.3", "jade": "^1.9.2", "jimp": "^0.22.12", "jsonwebtoken": "^9.0.2", + "moment": "^2.30.1", "mongoose": "^8.4.3", "morgan": "~1.9.1", "node-html-to-image": "^4.0.0", @@ -1667,6 +1669,17 @@ "node": ">= 0.6.x" } }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2139,6 +2152,22 @@ "node": ">= 0.10.0" } }, + "node_modules/express-compression": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/express-compression/-/express-compression-1.0.2.tgz", + "integrity": "sha512-kZ2xaL99J4bpnfLLcFIyhkkMMXPxYwFPNzbJ1tYxip1J49IrBWSdP9oSyFq7AHSW1wfaqFhd7N+C92bU8XA9fw==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "^3.1.2", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 10.6.0" + } + }, "node_modules/express/node_modules/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", @@ -3315,6 +3344,14 @@ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, + "node_modules/moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==", + "engines": { + "node": "*" + } + }, "node_modules/mongodb": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", @@ -6634,6 +6671,14 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", "integrity": "sha512-PhbTMT+ilDXZKqH8xbvuUY2ZEQNef0Q7DKxgoEKb4ccytsdvVVJmYqR0sGbi96nxU6oGrwEIQnclpK2NBZuQlg==" }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -7032,6 +7077,19 @@ } } }, + "express-compression": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/express-compression/-/express-compression-1.0.2.tgz", + "integrity": "sha512-kZ2xaL99J4bpnfLLcFIyhkkMMXPxYwFPNzbJ1tYxip1J49IrBWSdP9oSyFq7AHSW1wfaqFhd7N+C92bU8XA9fw==", + "requires": { + "accepts": "~1.3.5", + "bytes": "^3.1.2", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "vary": "~1.1.2" + } + }, "extract-zip": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", @@ -7865,6 +7923,11 @@ "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==" }, + "moment": { + "version": "2.30.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", + "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" + }, "mongodb": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", diff --git a/package.json b/package.json index 1337415..28cd0d8 100644 --- a/package.json +++ b/package.json @@ -19,6 +19,7 @@ "jade": "^1.9.2", "jimp": "^0.22.12", "jsonwebtoken": "^9.0.2", + "moment": "^2.30.1", "mongoose": "^8.4.3", "morgan": "~1.9.1", "node-html-to-image": "^4.0.0", diff --git a/src/configurations/schemas/member/Member.schema.js b/src/configurations/schemas/member/Member.schema.js index d9026d7..116fa91 100644 --- a/src/configurations/schemas/member/Member.schema.js +++ b/src/configurations/schemas/member/Member.schema.js @@ -16,6 +16,7 @@ const memberSchema = new Schema({ maritalStatus: { type: String, required: true }, locality: { type: String, required: true }, observations: { type: String, required: false }, + services: [{ type: Schema.Types.ObjectId, ref: 'Service' }] }); const MemberModel = mongoose.model('Member', memberSchema); diff --git a/src/index.js b/src/index.js index a6f4060..4b313a0 100644 --- a/src/index.js +++ b/src/index.js @@ -184,7 +184,7 @@ const createServices= async (req, res) => { try { const service = req.body; const avatar = await memberRepository.getAvatarById(service.dni); - const date = new Date(); + const date = service.datenew ? service.datenew : Date(); // Encontrar al miembro por dni const member = await MemberModel.findOne({ dni: service.dni }); diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index d69e8ac..da8faf6 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -1,8 +1,8 @@ const MemberModel = require('../configurations/schemas/member/Member.schema'); - +const ServicesModel = require('../configurations/schemas/services/Services.schema'); +const moment = require('moment'); class MongoMemberRepository { - async exportEXCEL() { try { // Obtén los datos de la colección @@ -59,11 +59,10 @@ class MongoMemberRepository { const pageNumber = parseInt(page) || 1; const skip = (pageNumber - 1) * perPage; - // Utiliza tu lógica para buscar por nombre o DNI según el filtro const query = { $or: [ - { firstName: { $regex: filter, $options: 'i' } }, // Búsqueda por nombre (case-insensitive) - { dni: { $regex: filter, $options: 'i' } } // Búsqueda por DNI (case-insensitive) + { firstName: { $regex: filter, $options: 'i' } }, + { dni: { $regex: filter, $options: 'i' } } ] }; @@ -84,9 +83,94 @@ class MongoMemberRepository { } async findSummary(filter) { - const members = await MemberModel.find() + const dnis = []; + const query = {}; + + if (filter.status) { + query.status = filter.status; + } + + if (filter.choirs === 'true') { + const services = await ServicesModel.find({ service: 'COROS' }) + .select('dni -_id') + dnis.push(...services.map(x => x.dni)) + } + + if (filter.reflection === 'true') { + const services = await ServicesModel.find({ service: 'REFLEXION' }) + .select('dni -_id') + dnis.push(...services.map(x => x.dni)) + + } + + if (filter.preaching === 'true') { + const services = await ServicesModel.find({ service: 'PREDICACION' }) + .select('dni -_id') + dnis.push(...services.map(x => x.dni)) + + } + + if (filter.leadsleads === 'true') { + const services = await ServicesModel.find({ service: 'DIRIGE' }) + .select('dni -_id') + dnis.push(...services.map(x => x.dni)) + + } + + if (filter.work === 'true') { + const services = await ServicesModel.find({ service: 'OBRA' }) + .select('dni -_id') + dnis.push(...services.map(x => x.dni)) + + } + + if (filter.games === 'true') { + const services = await ServicesModel.find({ service: 'JUEGOS' }) + .select('dni -_id') + dnis.push(...services.map(x => x.dni)) + + } + + if (filter.greaterThanYear > 0) { + const yearsAgo = moment().subtract(filter.greaterThanYear, 'years').toDate(); + query.dateOfBirth = { $lt: yearsAgo }; + } + + if (filter.lessThanYear > 0) { + const recentYears = moment().subtract(filter.lessThanYear, 'years').toDate(); + if (!query.dateOfBirth) { + query.dateOfBirth = {}; + } + query.dateOfBirth.$gt = recentYears; + } + + + if (filter.noServiceSince > 0) { + const monthsAgo = moment().subtract(filter.noServiceSince, 'months').toDate(); + const recentServices = await ServicesModel.find({ date: { $gte: monthsAgo } }).select('dni -_id'); + const recentDnis = recentServices.map(x => x.dni); + + // Obtener todos los DNIs + const allDnis = (await ServicesModel.find().select('dni -_id')).map(x => x.dni); + + // Filtrar los DNIs que no tienen servicios recientes + const noRecentServiceDnis = allDnis.filter(dni => !recentDnis.includes(dni)); + + dnis.push(...noRecentServiceDnis); + } + + if (dnis.length > 0) { + query.dni = { $in: dnis }; + } + + + const members = await MemberModel.find(query) .select('dni firstName lastName -_id') - .sort({ lastName: 1, firstName: 1 }); + .sort({ lastName: 1, firstName: 1 }) + .populate('services') + .exec(); + + return { members, }; From 70814f82a116c0b921f4cf6de38421f42d9afc6e Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Wed, 7 Aug 2024 09:07:37 -0300 Subject: [PATCH 53/73] compression v2 --- package-lock.json | 47 +++++++++++++++++++++ package.json | 1 + src/index.js | 59 +++++++++++++++++++++++++-- src/repositories/member.repository.js | 7 +++- 4 files changed, 109 insertions(+), 5 deletions(-) diff --git a/package-lock.json b/package-lock.json index c2b89a9..5ea8916 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "dependencies": { "bcrypt": "^5.1.1", + "compression": "^1.7.4", "cookie-parser": "~1.4.4", "cors": "^2.8.5", "debug": "~2.6.9", @@ -1680,6 +1681,31 @@ "node": ">= 0.6" } }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -6679,6 +6705,27 @@ "mime-db": ">= 1.43.0 < 2" } }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==" + } + } + }, "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", diff --git a/package.json b/package.json index 28cd0d8..c63d0cc 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ }, "dependencies": { "bcrypt": "^5.1.1", + "compression": "^1.7.4", "cookie-parser": "~1.4.4", "cors": "^2.8.5", "debug": "~2.6.9", diff --git a/src/index.js b/src/index.js index 4b313a0..2a9b51c 100644 --- a/src/index.js +++ b/src/index.js @@ -8,7 +8,7 @@ const path = require('path'); const Jimp = require('jimp'); const puppeteer = require('puppeteer'); const XLSX = require('xlsx'); -const compression =require('express-compression') +const compression = require('compression'); const db = require('./configurations/db.config'); @@ -40,12 +40,24 @@ app.use(cors({ credentials: true, optionsSuccessStatus: 204 })); -app.use( + +/* app.use( compression({ brotli: { enabled: true, zlib: {} }, }) -); +); */ + +/* PERFORMANCE COMPRESION*/ +app.use(compression({ + level: 9, // Puedes ajustar el nivel de compresión entre 0 y 9. + threshold: 1000, // Solo comprimir respuestas mayores a 1 KB. + filter: (req, res) => { + // Puedes agregar una función de filtro personalizada si lo necesitas. + return compression.filter(req, res); + } +})); +/* PERFORMANCE */ /* MEMBERS */ const createMember = async (req, res) => { @@ -65,6 +77,43 @@ const createMember = async (req, res) => { } }; +const createMemberServicesMasive = async (req, res) => { + try { + const services = req.body; + + if (!Array.isArray(services)) { + return res.status(400).json({ message: 'La entrada debe ser un array de servicios.' }); + } + + const promises = services.map(async (service) => { + const existingMember = await memberRepository.findByFirstNameAndLastName(service.firstName, service.lastName); + const avatar = await memberRepository.getAvatarById(existingMember.dni); + const date = service.date ? new Date(service.date) : new Date(); + + // Encontrar al miembro por dni + const member = await MemberModel.findOne({ dni: existingMember.dni }); + + if (!member) { + throw new Error(`Member with DNI ${existingMember.dni} not found`); + } + + const newService = new ServiceModel({ + ...service, + avatar, + date, + member: member._id + }); + + return await newService.save(); + }); + + const savedServices = await Promise.all(promises); + res.status(201).json(savedServices); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + const getMembers = async (req, res) => { const { page, filter } = req.query; try { @@ -76,6 +125,7 @@ const getMembers = async (req, res) => { } res.status(200).json(members); } catch (error) { + console.error(error) res.status(500).json({ message: error.message }); } }; @@ -184,7 +234,7 @@ const createServices= async (req, res) => { try { const service = req.body; const avatar = await memberRepository.getAvatarById(service.dni); - const date = service.datenew ? service.datenew : Date(); + const date = service.date ? new Date(service.date) : new Date(); // Encontrar al miembro por dni const member = await MemberModel.findOne({ dni: service.dni }); @@ -298,6 +348,7 @@ app.delete('/members/:id', deleteMember); // Rutas services app.post('/services', createServices); +app.post('/services/masive', createMemberServicesMasive); app.get('/services', getServices); app.get('/services/export', exportDocuments) app.put('/services/aproved/:id', aprovedService) diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index da8faf6..36ddd90 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -55,7 +55,7 @@ class MongoMemberRepository { // Ejemplo en MongoMemberRepository.js async findByFilter(filter, page) { - const perPage = 10; // Número de resultados por página + const perPage = 5; // Número de resultados por página const pageNumber = parseInt(page) || 1; const skip = (pageNumber - 1) * perPage; @@ -180,6 +180,11 @@ class MongoMemberRepository { const member = await MemberModel.findOne({ dni }); return member; } + + async findByFirstNameAndLastName(firstName,lastName){ + const member = await MemberModel.findOne({ firstName,lastName }); + return member; + } async getAvatarById(dni) { try { From aad00e5865b5f352b02d330b83c3b3a344b8623d Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Thu, 8 Aug 2024 16:29:27 -0300 Subject: [PATCH 54/73] add filter --- src/index.js | 39 +++++++++++ src/repositories/member.repository.js | 1 + src/repositories/services.repository.js | 92 ++++++++++++++++++------- 3 files changed, 106 insertions(+), 26 deletions(-) diff --git a/src/index.js b/src/index.js index 2a9b51c..f09a16a 100644 --- a/src/index.js +++ b/src/index.js @@ -257,6 +257,42 @@ const createServices= async (req, res) => { } }; +const deleteService = async (req, res) => { + try { + const { id } = req.params; + const result = await servicesRepository.delete(id); + res.status(200).json({ message: result }); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const getServiceById = async (req, res) => { + try { + const { id } = req.params; + const service = await servicesRepository.findById(id); + if (service) { + res.status(200).json(service); + } else { + res.status(404).json({ message: 'Member not found' }); + } + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const updateService = async (req, res) => { + try { + const service = req.body; + const { id } = req.params; + + const updatedMember = await servicesRepository.update(service,id); + res.status(200).json(updatedMember); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + const getServices = async (req, res) => { const { page, filter } = req.query; try { @@ -351,7 +387,10 @@ app.post('/services', createServices); app.post('/services/masive', createMemberServicesMasive); app.get('/services', getServices); app.get('/services/export', exportDocuments) +app.get('/services/:id', getServiceById); app.put('/services/aproved/:id', aprovedService) +app.put('/services/:id', updateService); +app.delete('/services/:id', deleteService); const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Server is running on port ${PORT}`)); diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index 36ddd90..d32cca8 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -65,6 +65,7 @@ class MongoMemberRepository { { dni: { $regex: filter, $options: 'i' } } ] }; + console.log(query) const members = await MemberModel.find(query) .skip(skip) diff --git a/src/repositories/services.repository.js b/src/repositories/services.repository.js index 1e7ae98..0b269fe 100644 --- a/src/repositories/services.repository.js +++ b/src/repositories/services.repository.js @@ -1,3 +1,4 @@ +const MemberModel = require('../configurations/schemas/member/Member.schema'); const ServicesModel = require('../configurations/schemas/services/Services.schema'); class MongoServicesRepository { @@ -28,35 +29,59 @@ class MongoServicesRepository { totalPages: Math.ceil(total / pageSize) }; } - async findByFilter(filter, page) { - const perPage = 10; + const perPage = 5; // Número de resultados por página const pageNumber = parseInt(page) || 1; const skip = (pageNumber - 1) * perPage; - - const query = { - $or: [ - { firstName: { $regex: filter, $options: 'i' } }, - { dni: { $regex: filter, $options: 'i' } } - ] - }; - - const services = await ServicesModel.find(query) - .select('-dni -_id -__v') - .skip(skip) - .limit(perPage) - .populate('member', 'dni avatar firstName lastName dateOfBirth -_id') - .exec(); - - const totalServices = await ServicesModel.countDocuments(query); - const totalPages = Math.ceil(totalServices / perPage); - - return { - services, - total: totalServices, - totalPages, - currentPage: pageNumber - }; + + try { + + // Asegúrate de que el filtro sea una cadena válida + const safeFilter = filter ? filter.trim() : ''; + + // Buscar documentos en MemberModel utilizando una búsqueda general + const members = await MemberModel.find({ + $or: [ + { firstName: { $regex: safeFilter, $options: 'i' } }, + { lastName: { $regex: safeFilter, $options: 'i' } }, + { dni: { $regex: safeFilter, $options: 'i' } } + ] + }).select('dni'); // Solo necesitamos el campo `dni` para la consulta siguiente + + // Extraer los `dni` encontrados + const dniList = members.map(member => member.dni); + + // Construir la consulta para ServicesModel basada en los `dni` encontrados + const query = dniList.length > 0 ? + { + dni: { $in: dniList } + } : + {}; // Consulta vacía si no se encuentran miembros + + + // Ejecutar la consulta para obtener los servicios + const services = await ServicesModel.find(query) + .select('-dni -_id -__v') // Excluir campos innecesarios + .skip(skip) + .limit(perPage) + .populate('member', 'dni avatar firstName lastName dateOfBirth -_id') // Incluir solo los campos necesarios + .exec(); + + // Contar el total de documentos que coinciden con la consulta + const totalServices = await ServicesModel.countDocuments(query); + const totalPages = Math.ceil(totalServices / perPage); // Calcular el total de páginas + + return { + services, + total: totalServices, + totalPages, + currentPage: pageNumber + }; + } catch (error) { + // Manejo de errores + console.error('Error al obtener los servicios:', error); + throw new Error('Error al obtener los servicios'); // Propagar el error para manejo en niveles superiores + } } async findById(dni) { @@ -90,6 +115,21 @@ class MongoServicesRepository { } } + + async update(service,_id) { + return await ServicesModel.findOneAndUpdate({ _id }, service, { new: true }); + } + + async delete(_id) { + await ServicesModel.deleteOne({ _id }); + return `Service with ID ${_id} deleted successfully.`; + } + + async findById(dni) { + const service = await ServicesModel.findOne({ dni }); + return service; + } + } module.exports = MongoServicesRepository; From 87a34443feceee1e0a38826079adcb7657912ba2 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 9 Aug 2024 09:20:39 -0300 Subject: [PATCH 55/73] feat: add filter --- package-lock.json | 239 ++++++++++-------------- package.json | 4 +- src/index.js | 8 +- src/repositories/member.repository.js | 1 - src/repositories/services.repository.js | 99 ++++++---- 5 files changed, 163 insertions(+), 188 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5ea8916..5b8ba4f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -25,7 +25,7 @@ "mongoose": "^8.4.3", "morgan": "~1.9.1", "node-html-to-image": "^4.0.0", - "puppeteer": "^22.12.1", + "puppeteer": "^22.15.0", "qrcode": "^1.5.3", "sharp": "^0.33.4", "xlsx": "^0.18.5" @@ -932,18 +932,18 @@ } }, "node_modules/@puppeteer/browsers": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", - "integrity": "sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.0.tgz", + "integrity": "sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==", "dependencies": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.4.0", - "semver": "7.6.0", - "tar-fs": "3.0.5", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.2" + "debug": "^4.3.5", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "bin": { "browsers": "lib/cjs/main-cli.js" @@ -953,9 +953,9 @@ } }, "node_modules/@puppeteer/browsers/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -968,36 +968,11 @@ } } }, - "node_modules/@puppeteer/browsers/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/@puppeteer/browsers/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/@puppeteer/browsers/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/@tokenizer/token": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", @@ -1571,9 +1546,9 @@ } }, "node_modules/chromium-bidi": { - "version": "0.5.24", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.24.tgz", - "integrity": "sha512-5xQNN2SVBdZv4TxeMLaI+PelrnZsHDhn8h2JtyriLr+0qHcZS8BMuo93qN6J1VmtmrgYP+rmcLHcbpnA8QJh+w==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz", + "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==", "dependencies": { "mitt": "3.0.1", "urlpattern-polyfill": "10.0.0", @@ -1947,9 +1922,9 @@ } }, "node_modules/devtools-protocol": { - "version": "0.0.1299070", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1299070.tgz", - "integrity": "sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg==" + "version": "0.0.1312386", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz", + "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==" }, "node_modules/dijkstrajs": { "version": "1.0.3", @@ -4253,9 +4228,9 @@ } }, "node_modules/proxy-agent/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -4314,15 +4289,15 @@ } }, "node_modules/puppeteer": { - "version": "22.12.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.12.1.tgz", - "integrity": "sha512-1GxY8dnEnHr1SLzdSDr0FCjM6JQfAh2E2I/EqzeF8a58DbGVk9oVjj4lFdqNoVbpgFSpAbz7VER9St7S1wDpNg==", + "version": "22.15.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.15.0.tgz", + "integrity": "sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==", "hasInstallScript": true, "dependencies": { - "@puppeteer/browsers": "2.2.3", + "@puppeteer/browsers": "2.3.0", "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1299070", - "puppeteer-core": "22.12.1" + "devtools-protocol": "0.0.1312386", + "puppeteer-core": "22.15.0" }, "bin": { "puppeteer": "lib/esm/puppeteer/node/cli.js" @@ -4364,24 +4339,24 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/puppeteer-core": { - "version": "22.12.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.12.1.tgz", - "integrity": "sha512-XmqeDPVdC5/3nGJys1jbgeoZ02wP0WV1GBlPtr/ULRbGXJFuqgXMcKQ3eeNtFpBzGRbpeoCGWHge1ZWKWl0Exw==", + "version": "22.15.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.15.0.tgz", + "integrity": "sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==", "dependencies": { - "@puppeteer/browsers": "2.2.3", - "chromium-bidi": "0.5.24", - "debug": "^4.3.5", - "devtools-protocol": "0.0.1299070", - "ws": "^8.17.1" + "@puppeteer/browsers": "2.3.0", + "chromium-bidi": "0.6.3", + "debug": "^4.3.6", + "devtools-protocol": "0.0.1312386", + "ws": "^8.18.0" }, "engines": { "node": ">=18" } }, "node_modules/puppeteer-core/node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "dependencies": { "ms": "2.1.2" }, @@ -4686,9 +4661,9 @@ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "bin": { "semver": "bin/semver.js" }, @@ -5125,9 +5100,9 @@ } }, "node_modules/tar-fs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", - "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "dependencies": { "pump": "^3.0.0", "tar-stream": "^3.1.5" @@ -5506,9 +5481,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "engines": { "node": ">=10.0.0" }, @@ -6141,48 +6116,32 @@ } }, "@puppeteer/browsers": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.2.3.tgz", - "integrity": "sha512-bJ0UBsk0ESOs6RFcLXOt99a3yTDcOKlzfjad+rhFwdaG1Lu/Wzq58GHYCDTlZ9z6mldf4g+NTb+TXEfe0PpnsQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@puppeteer/browsers/-/browsers-2.3.0.tgz", + "integrity": "sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==", "requires": { - "debug": "4.3.4", - "extract-zip": "2.0.1", - "progress": "2.0.3", - "proxy-agent": "6.4.0", - "semver": "7.6.0", - "tar-fs": "3.0.5", - "unbzip2-stream": "1.4.3", - "yargs": "17.7.2" + "debug": "^4.3.5", + "extract-zip": "^2.0.1", + "progress": "^2.0.3", + "proxy-agent": "^6.4.0", + "semver": "^7.6.3", + "tar-fs": "^3.0.6", + "unbzip2-stream": "^1.4.3", + "yargs": "^17.7.2" }, "dependencies": { "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "requires": { "ms": "2.1.2" } }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "requires": { - "lru-cache": "^6.0.0" - } } } }, @@ -6617,9 +6576,9 @@ "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" }, "chromium-bidi": { - "version": "0.5.24", - "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.5.24.tgz", - "integrity": "sha512-5xQNN2SVBdZv4TxeMLaI+PelrnZsHDhn8h2JtyriLr+0qHcZS8BMuo93qN6J1VmtmrgYP+rmcLHcbpnA8QJh+w==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/chromium-bidi/-/chromium-bidi-0.6.3.tgz", + "integrity": "sha512-qXlsCmpCZJAnoTYI83Iu6EdYQpMYdVkCfq08KDh2pmlVqK5t5IA9mGs4/LwCwp4fqisSOMXZxP3HIh8w8aRn0A==", "requires": { "mitt": "3.0.1", "urlpattern-polyfill": "10.0.0", @@ -6894,9 +6853,9 @@ "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==" }, "devtools-protocol": { - "version": "0.0.1299070", - "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1299070.tgz", - "integrity": "sha512-+qtL3eX50qsJ7c+qVyagqi7AWMoQCBGNfoyJZMwm/NSXVqLYbuitrWEEIzxfUmTNy7//Xe8yhMmQ+elj3uAqSg==" + "version": "0.0.1312386", + "resolved": "https://registry.npmjs.org/devtools-protocol/-/devtools-protocol-0.0.1312386.tgz", + "integrity": "sha512-DPnhUXvmvKT2dFA/j7B+riVLUt9Q6RKJlcppojL5CoRywJJKLDYnRlw0gTFKfgDPHP5E04UoB71SxoJlVZy8FA==" }, "dijkstrajs": { "version": "1.0.3", @@ -8600,9 +8559,9 @@ } }, "debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "requires": { "ms": "2.1.2" } @@ -8649,14 +8608,14 @@ "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==" }, "puppeteer": { - "version": "22.12.1", - "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.12.1.tgz", - "integrity": "sha512-1GxY8dnEnHr1SLzdSDr0FCjM6JQfAh2E2I/EqzeF8a58DbGVk9oVjj4lFdqNoVbpgFSpAbz7VER9St7S1wDpNg==", + "version": "22.15.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-22.15.0.tgz", + "integrity": "sha512-XjCY1SiSEi1T7iSYuxS82ft85kwDJUS7wj1Z0eGVXKdtr5g4xnVcbjwxhq5xBnpK/E7x1VZZoJDxpjAOasHT4Q==", "requires": { - "@puppeteer/browsers": "2.2.3", + "@puppeteer/browsers": "2.3.0", "cosmiconfig": "^9.0.0", - "devtools-protocol": "0.0.1299070", - "puppeteer-core": "22.12.1" + "devtools-protocol": "0.0.1312386", + "puppeteer-core": "22.15.0" } }, "puppeteer-cluster": { @@ -8683,21 +8642,21 @@ } }, "puppeteer-core": { - "version": "22.12.1", - "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.12.1.tgz", - "integrity": "sha512-XmqeDPVdC5/3nGJys1jbgeoZ02wP0WV1GBlPtr/ULRbGXJFuqgXMcKQ3eeNtFpBzGRbpeoCGWHge1ZWKWl0Exw==", + "version": "22.15.0", + "resolved": "https://registry.npmjs.org/puppeteer-core/-/puppeteer-core-22.15.0.tgz", + "integrity": "sha512-cHArnywCiAAVXa3t4GGL2vttNxh7GqXtIYGym99egkNJ3oG//wL9LkvO4WE8W1TJe95t1F1ocu9X4xWaGsOKOA==", "requires": { - "@puppeteer/browsers": "2.2.3", - "chromium-bidi": "0.5.24", - "debug": "^4.3.5", - "devtools-protocol": "0.0.1299070", - "ws": "^8.17.1" + "@puppeteer/browsers": "2.3.0", + "chromium-bidi": "0.6.3", + "debug": "^4.3.6", + "devtools-protocol": "0.0.1312386", + "ws": "^8.18.0" }, "dependencies": { "debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", "requires": { "ms": "2.1.2" } @@ -8929,9 +8888,9 @@ "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==" }, "semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==" + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" }, "send": { "version": "0.18.0", @@ -9271,9 +9230,9 @@ } }, "tar-fs": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.5.tgz", - "integrity": "sha512-JOgGAmZyMgbqpLwct7ZV8VzkEB6pxXFBVErLtb+XCOqzc6w1xiWKI9GVd6bwk68EX7eJ4DWmfXVmq8K2ziZTGg==", + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", "requires": { "bare-fs": "^2.1.1", "bare-path": "^2.1.0", @@ -9565,9 +9524,9 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "ws": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", - "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", "requires": {} }, "xhr": { diff --git a/package.json b/package.json index c63d0cc..0728d3f 100644 --- a/package.json +++ b/package.json @@ -4,7 +4,7 @@ "description": "Api para iepe", "main": "index.js", "scripts": { - "start": "node --max-old-space-size=1024 src/index.js" + "start": "node src/index.js" }, "dependencies": { "bcrypt": "^5.1.1", @@ -24,7 +24,7 @@ "mongoose": "^8.4.3", "morgan": "~1.9.1", "node-html-to-image": "^4.0.0", - "puppeteer": "^22.12.1", + "puppeteer": "^22.15.0", "qrcode": "^1.5.3", "sharp": "^0.33.4", "xlsx": "^0.18.5" diff --git a/src/index.js b/src/index.js index f09a16a..5e7a45b 100644 --- a/src/index.js +++ b/src/index.js @@ -270,9 +270,9 @@ const deleteService = async (req, res) => { const getServiceById = async (req, res) => { try { const { id } = req.params; - const service = await servicesRepository.findById(id); - if (service) { - res.status(200).json(service); + const member = await servicesRepository.findById(id); + if (member) { + res.status(200).json(member); } else { res.status(404).json({ message: 'Member not found' }); } @@ -358,7 +358,7 @@ const selectedRepository = async (repositoryName) => { switch (repositoryName) { case '/services/export': - datos = await servicesRepository.findLean(); + datos = await servicesRepository.transformServices(); break; case '/members/export': diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index d32cca8..36ddd90 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -65,7 +65,6 @@ class MongoMemberRepository { { dni: { $regex: filter, $options: 'i' } } ] }; - console.log(query) const members = await MemberModel.find(query) .skip(skip) diff --git a/src/repositories/services.repository.js b/src/repositories/services.repository.js index 0b269fe..176f599 100644 --- a/src/repositories/services.repository.js +++ b/src/repositories/services.repository.js @@ -3,24 +3,49 @@ const ServicesModel = require('../configurations/schemas/services/Services.schem class MongoServicesRepository { + async transformServices() { + try { + // Obtener los servicios y realizar el 'populate' + const services = await ServicesModel.find() + .select('-avatar -__v') + .populate('member', 'firstName lastName -_id') + .lean(); // Utiliza `lean()` para obtener un objeto JavaScript plano + + // Transformar los datos a la estructura deseada + const transformedServices = services.map(service => ({ + Nombre: service.member.firstName, // Renombrar `member.firstName` a `nombre` + Apellido: service.member.lastName, // Renombrar `member.lastName` a `apellido` + Fecha: service.date, // Renombrar `date` a `fecha` + Servicio: service.service, // Renombrar `service` a `servicio` + Observaciones: service.observations, // Mantener `observations` igual + })); + + return transformedServices; + } catch (error) { + console.error('Error al transformar los servicios:', error); + throw new Error('Error al transformar los servicios'); + } + } + async findLean() { - const members = await ServicesModel.find().select('-avatar -_id -__v').lean(); - return members; + const service = await ServicesModel.find().select('-avatar -_id -__v').lean(); + return service; } async find(page) { - const pageSize = 5; - const skip = page * pageSize; + const pageSize = 5; + const skip = page * pageSize; const services = await ServicesModel.find() - .select('-dni -_id -__v') + .select('-dni -__v') + .sort({ date: -1 }) // Ordenar del más nuevo al más viejo .skip(skip) .limit(pageSize) .populate('member', 'dni avatar firstName lastName dateOfBirth -_id') .exec(); - const total = await ServicesModel.countDocuments(); + const total = await ServicesModel.countDocuments(); return { services, @@ -33,12 +58,12 @@ class MongoServicesRepository { const perPage = 5; // Número de resultados por página const pageNumber = parseInt(page) || 1; const skip = (pageNumber - 1) * perPage; - + try { - + // Asegúrate de que el filtro sea una cadena válida const safeFilter = filter ? filter.trim() : ''; - + // Buscar documentos en MemberModel utilizando una búsqueda general const members = await MemberModel.find({ $or: [ @@ -47,30 +72,31 @@ class MongoServicesRepository { { dni: { $regex: safeFilter, $options: 'i' } } ] }).select('dni'); // Solo necesitamos el campo `dni` para la consulta siguiente - + // Extraer los `dni` encontrados const dniList = members.map(member => member.dni); - + // Construir la consulta para ServicesModel basada en los `dni` encontrados - const query = dniList.length > 0 ? - { - dni: { $in: dniList } - } : + const query = dniList.length > 0 ? + { + dni: { $in: dniList } + } : {}; // Consulta vacía si no se encuentran miembros - - + + // Ejecutar la consulta para obtener los servicios const services = await ServicesModel.find(query) .select('-dni -_id -__v') // Excluir campos innecesarios + .sort({ date: -1 }) // Ordenar del más nuevo al más viejo .skip(skip) .limit(perPage) .populate('member', 'dni avatar firstName lastName dateOfBirth -_id') // Incluir solo los campos necesarios .exec(); - + // Contar el total de documentos que coinciden con la consulta const totalServices = await ServicesModel.countDocuments(query); const totalPages = Math.ceil(totalServices / perPage); // Calcular el total de páginas - + return { services, total: totalServices, @@ -84,31 +110,24 @@ class MongoServicesRepository { } } - async findById(dni) { - try { - const service = await ServicesModel.findOne({ dni }); - return service; - - } catch (error) { - console.log(error) - return error; - } - + async findById(_id) { + const service = await ServicesModel.findById(_id) + return service; } - async save(member) { - const newMember = new ServicesModel(member); - return await newMember.save(); + async save(service) { + const newService = new ServicesModel(service); + return await newService.save(); } async aprodev(id) { try { const service = await this.findById(id); if (!service) throw new Error('Service not found'); - - service.aproved = !service.aproved; + + service.aproved = !service.aproved; return await service.save(); - + } catch (error) { console.log(error) return error; @@ -116,7 +135,10 @@ class MongoServicesRepository { } - async update(service,_id) { + async update(service, _id) { + console.log(_id) + console.log(service) + return await ServicesModel.findOneAndUpdate({ _id }, service, { new: true }); } @@ -125,11 +147,6 @@ class MongoServicesRepository { return `Service with ID ${_id} deleted successfully.`; } - async findById(dni) { - const service = await ServicesModel.findOne({ dni }); - return service; - } - } module.exports = MongoServicesRepository; From 75e3ddbadf296f5c8f4c25293f0b52db295d999c Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Sun, 18 Aug 2024 19:49:12 -0300 Subject: [PATCH 56/73] feat: add feature --- src/index.js | 15 +++++++++++++++ src/repositories/member.repository.js | 19 ++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/index.js b/src/index.js index 5e7a45b..052834c 100644 --- a/src/index.js +++ b/src/index.js @@ -130,6 +130,19 @@ const getMembers = async (req, res) => { } }; + + +const getMembersBirthday = async (req, res) => { + try { + let members; + members = await memberRepository.findMembersBirthday(); + res.status(200).json(members); + } catch (error) { + console.error(error) + res.status(500).json({ message: error.message }); + } +}; + const getMembersSummary = async (req, res) => { try { const members = await memberRepository.findSummary(req.query); @@ -375,6 +388,7 @@ const selectedRepository = async (repositoryName) => { // Rutas members app.post('/members', createMember); app.get('/members', getMembers); +app.get('/members/birthday', getMembersBirthday); app.get('/members/summary', getMembersSummary); app.get('/members/export', exportDocuments) app.get('/members/generate-credential/:dni', generateCredential); @@ -382,6 +396,7 @@ app.get('/members/:id', getMemberById); app.put('/members/:id', updateMember); app.delete('/members/:id', deleteMember); + // Rutas services app.post('/services', createServices); app.post('/services/masive', createMemberServicesMasive); diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index 36ddd90..68050ef 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -53,6 +53,23 @@ class MongoMemberRepository { }; } + async findMembersBirthday() { + const today = moment().format('MM-DD'); + + const members = await MemberModel.find({ + $expr: { + $and: [ + { $eq: [{ $dayOfMonth: "$dateOfBirth" }, moment().date()] }, + { $eq: [{ $month: "$dateOfBirth" }, moment().month() + 1] } + ] + } + }); + + return { + members + }; + } + // Ejemplo en MongoMemberRepository.js async findByFilter(filter, page) { const perPage = 5; // Número de resultados por página @@ -165,7 +182,7 @@ class MongoMemberRepository { const members = await MemberModel.find(query) - .select('dni firstName lastName -_id') + .select('dni firstName lastName -_id dateOfBirth') .sort({ lastName: 1, firstName: 1 }) .populate('services') .exec(); From 60e7f9eacc7596938aba028bf4b8de783d078c37 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Sun, 18 Aug 2024 21:29:42 -0300 Subject: [PATCH 57/73] feat: add zone --- src/repositories/member.repository.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index 68050ef..d8beb28 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -54,13 +54,14 @@ class MongoMemberRepository { } async findMembersBirthday() { - const today = moment().format('MM-DD'); + // Establecer la zona horaria de Argentina + const today = moment().tz('America/Argentina/Buenos_Aires'); const members = await MemberModel.find({ $expr: { $and: [ - { $eq: [{ $dayOfMonth: "$dateOfBirth" }, moment().date()] }, - { $eq: [{ $month: "$dateOfBirth" }, moment().month() + 1] } + { $eq: [{ $dayOfMonth: "$dateOfBirth" }, today.date()] }, + { $eq: [{ $month: "$dateOfBirth" }, today.month() + 1] } ] } }); From 25ed19b2233e24e1d9e23c9865c14bc8d686e991 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Sun, 18 Aug 2024 23:53:11 -0300 Subject: [PATCH 58/73] add timezone --- package-lock.json | 20 ++++++++++++++++++++ package.json | 1 + src/repositories/member.repository.js | 2 +- 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/package-lock.json b/package-lock.json index 5b8ba4f..04b4819 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,6 +22,7 @@ "jimp": "^0.22.12", "jsonwebtoken": "^9.0.2", "moment": "^2.30.1", + "moment-timezone": "^0.5.45", "mongoose": "^8.4.3", "morgan": "~1.9.1", "node-html-to-image": "^4.0.0", @@ -3353,6 +3354,17 @@ "node": "*" } }, + "node_modules/moment-timezone": { + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "dependencies": { + "moment": "^2.29.4" + }, + "engines": { + "node": "*" + } + }, "node_modules/mongodb": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", @@ -7934,6 +7946,14 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz", "integrity": "sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==" }, + "moment-timezone": { + "version": "0.5.45", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz", + "integrity": "sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==", + "requires": { + "moment": "^2.29.4" + } + }, "mongodb": { "version": "6.6.2", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.6.2.tgz", diff --git a/package.json b/package.json index 0728d3f..48f6898 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "jimp": "^0.22.12", "jsonwebtoken": "^9.0.2", "moment": "^2.30.1", + "moment-timezone": "^0.5.45", "mongoose": "^8.4.3", "morgan": "~1.9.1", "node-html-to-image": "^4.0.0", diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index d8beb28..559454c 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -1,6 +1,6 @@ const MemberModel = require('../configurations/schemas/member/Member.schema'); const ServicesModel = require('../configurations/schemas/services/Services.schema'); -const moment = require('moment'); +const moment = require('moment-timezone'); class MongoMemberRepository { async exportEXCEL() { From 6c9412c82b93e9594db56abffccb2ff3e6d5ca61 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Tue, 20 Aug 2024 13:02:25 -0300 Subject: [PATCH 59/73] check --- src/configurations/schemas/member/Member.schema.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/configurations/schemas/member/Member.schema.js b/src/configurations/schemas/member/Member.schema.js index 116fa91..c1ce430 100644 --- a/src/configurations/schemas/member/Member.schema.js +++ b/src/configurations/schemas/member/Member.schema.js @@ -16,6 +16,7 @@ const memberSchema = new Schema({ maritalStatus: { type: String, required: true }, locality: { type: String, required: true }, observations: { type: String, required: false }, + dataConfirmed: { type: Boolean, required: false, default: false }, services: [{ type: Schema.Types.ObjectId, ref: 'Service' }] }); From b79760c6a140376688eee1995970c22e4b7f285f Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Thu, 22 Aug 2024 16:14:54 -0300 Subject: [PATCH 60/73] ajsutes --- src/repositories/member.repository.js | 2 +- src/repositories/services.repository.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index 559454c..17f8e47 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -183,7 +183,7 @@ class MongoMemberRepository { const members = await MemberModel.find(query) - .select('dni firstName lastName -_id dateOfBirth') + .select('dni firstName lastName _id dateOfBirth') .sort({ lastName: 1, firstName: 1 }) .populate('services') .exec(); diff --git a/src/repositories/services.repository.js b/src/repositories/services.repository.js index 176f599..48fe27c 100644 --- a/src/repositories/services.repository.js +++ b/src/repositories/services.repository.js @@ -86,7 +86,7 @@ class MongoServicesRepository { // Ejecutar la consulta para obtener los servicios const services = await ServicesModel.find(query) - .select('-dni -_id -__v') // Excluir campos innecesarios + .select('-dni -__v') // Excluir campos innecesarios .sort({ date: -1 }) // Ordenar del más nuevo al más viejo .skip(skip) .limit(perPage) From 626935c5cf469ff301251ea58d543bfa6bfd0819 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Mon, 26 Aug 2024 13:16:46 -0300 Subject: [PATCH 61/73] add login --- package-lock.json | 11 +++ package.json | 1 + .../schemas/user/User.schema.js | 21 ++++++ src/index.js | 33 +++++++++ src/repositories/services.repository.js | 5 -- src/repositories/user.repository.js | 67 +++++++++++++++++++ 6 files changed, 133 insertions(+), 5 deletions(-) create mode 100644 src/configurations/schemas/user/User.schema.js create mode 100644 src/repositories/user.repository.js diff --git a/package-lock.json b/package-lock.json index 04b4819..943750f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "1.0.0", "dependencies": { "bcrypt": "^5.1.1", + "bcryptjs": "^2.4.3", "compression": "^1.7.4", "cookie-parser": "~1.4.4", "cors": "^2.8.5", @@ -1277,6 +1278,11 @@ "node": ">= 10.0.0" } }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" + }, "node_modules/binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", @@ -6396,6 +6402,11 @@ "node-addon-api": "^5.0.0" } }, + "bcryptjs": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", + "integrity": "sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==" + }, "binary-extensions": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", diff --git a/package.json b/package.json index 48f6898..e48a790 100644 --- a/package.json +++ b/package.json @@ -8,6 +8,7 @@ }, "dependencies": { "bcrypt": "^5.1.1", + "bcryptjs": "^2.4.3", "compression": "^1.7.4", "cookie-parser": "~1.4.4", "cors": "^2.8.5", diff --git a/src/configurations/schemas/user/User.schema.js b/src/configurations/schemas/user/User.schema.js new file mode 100644 index 0000000..8153d33 --- /dev/null +++ b/src/configurations/schemas/user/User.schema.js @@ -0,0 +1,21 @@ +const mongoose = require('mongoose'); +const { Schema } = mongoose; + +const UserSchema = new Schema({ + email: { + index: true, + type: String, + required: true, + unique: true + }, + password: { + type: String, + required: true + }, + role: { type: String, enum: ['miembro','secretaria','comision', 'admin', 'pastor'] } + +}); + +const UserModel = mongoose.model('User', UserSchema); +module.exports = UserModel; + diff --git a/src/index.js b/src/index.js index 052834c..c5a166a 100644 --- a/src/index.js +++ b/src/index.js @@ -14,11 +14,15 @@ const db = require('./configurations/db.config'); const MongoMemberRepository = require('./repositories/member.repository'); const MongoServicesRepository = require('./repositories/services.repository'); +const UserRepository = require('./repositories/user.repository'); + const MemberModel = require('./configurations/schemas/member/Member.schema'); const ServiceModel = require('./configurations/schemas/services/Services.schema'); const memberRepository = new MongoMemberRepository(); const servicesRepository = new MongoServicesRepository(); +const userRepository = new UserRepository(); + const app = express(); @@ -384,6 +388,35 @@ const selectedRepository = async (repositoryName) => { } return datos; } +// USER + +const registerUser = async (req, res) => { + try { + const { email, password } = req.body; + const savedUser = await userRepository.create({email, password }); + res.status(201).json({ message: 'User registered successfully', user: savedUser }); + } catch (error) { + res.status(500).json({ message: error.message }); + } +}; + +const loginUser = async (req, res) => { + try { + const { email,password } = req.body; + const {token , user} = await userRepository.login({email, password}); + + res.status(200).json({ message: 'Login successful', token, user }); + } catch (error) { + console.error(error) + res.status(500).json({ message: error.message }); + } +}; + + +// Rutas de usuario +app.post('/register', registerUser); +app.post('/login', loginUser); + // Rutas members app.post('/members', createMember); diff --git a/src/repositories/services.repository.js b/src/repositories/services.repository.js index 48fe27c..6305790 100644 --- a/src/repositories/services.repository.js +++ b/src/repositories/services.repository.js @@ -27,7 +27,6 @@ class MongoServicesRepository { } } - async findLean() { const service = await ServicesModel.find().select('-avatar -_id -__v').lean(); return service; @@ -134,11 +133,7 @@ class MongoServicesRepository { } } - async update(service, _id) { - console.log(_id) - console.log(service) - return await ServicesModel.findOneAndUpdate({ _id }, service, { new: true }); } diff --git a/src/repositories/user.repository.js b/src/repositories/user.repository.js new file mode 100644 index 0000000..65583c8 --- /dev/null +++ b/src/repositories/user.repository.js @@ -0,0 +1,67 @@ +const UserModel = require("../configurations/schemas/user/User.schema"); +const bcrypt = require('bcryptjs'); +const jwt = require('jsonwebtoken'); + +class UserRepository { + async create({ email, password, role }) { + try { + // Verificar si el usuario ya existe + const existingUser = await UserModel.findOne({ email }); + if (existingUser) { + throw new Error("Username already exists"); + } + + // Cifrar la contraseña + const hashedPassword = await bcrypt.hash(password, 12); + + // Crear y guardar el nuevo usuario + const newUser = new UserModel({ + email, + password: hashedPassword, + role + }); + const savedUser = await newUser.save(); + + return savedUser; + } catch (error) { + throw new Error(error.message); + } + } + + + async login({ email, password }) { + try { + // Encontrar al usuario + const user = await UserModel.findOne({ email }); + if (!user) { + throw new Error('User not found'); + } + + // Verificar la contraseña + const isMatch = await bcrypt.compare(password, user.password); + if (!isMatch) { + throw new Error('Invalid credentials'); + } + + // Generar token JWT incluyendo el rol del usuario en el payload + const token = jwt.sign( + { userId: user._id, role: user.role }, + process.env.JWT_SECRET, + { expiresIn: '1h' } + ); + + // Eliminar el campo password antes de devolver el usuario + const { password: _, ...userWithoutPassword } = user._doc; + + return { + token, + user: userWithoutPassword + }; + } catch (error) { + throw new Error(error.message); + } + } + +} + +module.exports = UserRepository; From 08d095b1a50645e63fbeab89bd77daaa547ce516 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Tue, 27 Aug 2024 15:34:01 -0300 Subject: [PATCH 62/73] ajustes --- .../schemas/user/User.schema.js | 2 +- src/index.js | 17 ++++++++-- src/repositories/member.repository.js | 34 +++++++++++++++++++ src/utils/hashPassword.js | 12 ------- src/utils/jwt.js | 17 ---------- 5 files changed, 50 insertions(+), 32 deletions(-) delete mode 100644 src/utils/hashPassword.js delete mode 100644 src/utils/jwt.js diff --git a/src/configurations/schemas/user/User.schema.js b/src/configurations/schemas/user/User.schema.js index 8153d33..0eedc3a 100644 --- a/src/configurations/schemas/user/User.schema.js +++ b/src/configurations/schemas/user/User.schema.js @@ -12,7 +12,7 @@ const UserSchema = new Schema({ type: String, required: true }, - role: { type: String, enum: ['miembro','secretaria','comision', 'admin', 'pastor'] } + role: { type: String, enum: ['miembro','secretaria','comision', 'admin', 'pastor'], default: 'miembro' } }); diff --git a/src/index.js b/src/index.js index c5a166a..4a79488 100644 --- a/src/index.js +++ b/src/index.js @@ -147,6 +147,18 @@ const getMembersBirthday = async (req, res) => { } }; +const findMembersBirthdayThisWeek = async (req, res) => { + try { + let members; + members = await memberRepository.findMembersBirthdayThisWeek(); + res.status(200).json(members); + } catch (error) { + console.error(error) + res.status(500).json({ message: error.message }); + } +}; + + const getMembersSummary = async (req, res) => { try { const members = await memberRepository.findSummary(req.query); @@ -392,8 +404,8 @@ const selectedRepository = async (repositoryName) => { const registerUser = async (req, res) => { try { - const { email, password } = req.body; - const savedUser = await userRepository.create({email, password }); + const { email, password, role } = req.body; + const savedUser = await userRepository.create({email, password, role }); res.status(201).json({ message: 'User registered successfully', user: savedUser }); } catch (error) { res.status(500).json({ message: error.message }); @@ -422,6 +434,7 @@ app.post('/login', loginUser); app.post('/members', createMember); app.get('/members', getMembers); app.get('/members/birthday', getMembersBirthday); +app.get('/members/findMembersBirthdayThisWeek', findMembersBirthdayThisWeek); app.get('/members/summary', getMembersSummary); app.get('/members/export', exportDocuments) app.get('/members/generate-credential/:dni', generateCredential); diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index 17f8e47..bcf9d32 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -70,6 +70,40 @@ class MongoMemberRepository { members }; } + + async findMembersBirthdayThisWeek() { + // Establecer la zona horaria de Argentina + const timezone = 'America/Argentina/Buenos_Aires'; + const today = moment().tz(timezone); + + // Definir el rango de fechas: desde hoy hasta el próximo lunes + const startOfWeek = today.clone().startOf('day'); // Desde hoy + const endOfWeek = startOfWeek.clone().add(6 - today.day() + 1, 'days'); // Próximo lunes + + const members = await MemberModel.aggregate([ + { + $addFields: { + dayOfYearBirth: { $dayOfYear: "$dateOfBirth" }, + yearBirth: { $year: "$dateOfBirth" }, + currentYear: today.year() + } + }, + { + $match: { + $and: [ + { dayOfYearBirth: { $gte: startOfWeek.dayOfYear() } }, + { dayOfYearBirth: { $lte: endOfWeek.dayOfYear() } }, + { yearBirth: { $eq: today.year() } } + ] + } + } + ]); + + return { + members + }; + } + // Ejemplo en MongoMemberRepository.js async findByFilter(filter, page) { diff --git a/src/utils/hashPassword.js b/src/utils/hashPassword.js deleted file mode 100644 index df654c7..0000000 --- a/src/utils/hashPassword.js +++ /dev/null @@ -1,12 +0,0 @@ -const bcrypt = require('bcrypt'); -// Hasheo de contraseñan - -export const createHash = (password) => { - return bcrypt.hashSync(password, bcrypt.genSaltSync(10)); - }; - - // Validar la contraseña - - export const isValidPassword = (user, password) => { - return bcrypt.compareSync(password, user.password); - }; \ No newline at end of file diff --git a/src/utils/jwt.js b/src/utils/jwt.js deleted file mode 100644 index 51b5e8c..0000000 --- a/src/utils/jwt.js +++ /dev/null @@ -1,17 +0,0 @@ -const jwt = require('jsonwebtoken') -// Crear el token -export const createToken = (user) => { - const { _id,firstName,position } = user; - const token = jwt.sign({ _id,firstName,position }, "codigoSecreto", { expiresIn: "30m" }); - return token; - }; - - // Verificar el token - export const verifyToken = (token) => { - try { - const decode = jwt.verify(token, "codigoSecreto"); - return decode; - } catch (error) { - return null; - } - }; \ No newline at end of file From a5ea8c1dbda9a4f380ef1a5a1e5261fa6087b8f0 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Tue, 27 Aug 2024 16:24:10 -0300 Subject: [PATCH 63/73] ajsutes --- src/index.js | 66 +++++++++++++++++++++++++++ src/repositories/member.repository.js | 38 ++++++++++++--- 2 files changed, 97 insertions(+), 7 deletions(-) diff --git a/src/index.js b/src/index.js index 4a79488..be1c3ec 100644 --- a/src/index.js +++ b/src/index.js @@ -381,6 +381,59 @@ const exportDocuments = async (req, res) => { } } +const exportUncheckedMembers = async (req, res) => { + try { + const datos = await selectedRepository(req.path); + + if (!Array.isArray(datos)) { + return res.status(500).json({ message: 'Error: Los datos no son un array.' }); + } + + const hoja = XLSX.utils.json_to_sheet(datos); + + const libro = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(libro, hoja, 'Datos'); + + // Genera el archivo Excel en formato binario + const archivoExcel = XLSX.write(libro, { bookType: 'xlsx', type: 'buffer' }); + + // Configura la respuesta HTTP + res.setHeader('Content-Disposition', 'attachment; filename=exportacion.xlsx'); + res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + res.send(archivoExcel); + console.log('Exportación completada con éxito.'); + } catch (error) { + console.error('Error al exportar:', error); + res.status(500).json({ message: 'Error al exportar' }); + } +} + +const exportCheckedMembersWithComments = async (req, res) => { + try { + const datos = await selectedRepository(req.path); + + if (!Array.isArray(datos)) { + return res.status(500).json({ message: 'Error: Los datos no son un array.' }); + } + + const hoja = XLSX.utils.json_to_sheet(datos); + + const libro = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(libro, hoja, 'Datos'); + + // Genera el archivo Excel en formato binario + const archivoExcel = XLSX.write(libro, { bookType: 'xlsx', type: 'buffer' }); + + // Configura la respuesta HTTP + res.setHeader('Content-Disposition', 'attachment; filename=exportacion.xlsx'); + res.setHeader('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'); + res.send(archivoExcel); + console.log('Exportación completada con éxito.'); + } catch (error) { + console.error('Error al exportar:', error); + res.status(500).json({ message: 'Error al exportar' }); + } +} /* UTILS */ const selectedRepository = async (repositoryName) => { let datos; @@ -394,6 +447,16 @@ const selectedRepository = async (repositoryName) => { datos = await memberRepository.findLean(); break; + + case '/members/exportUncheckedMembers': + datos = await memberRepository.findLeanUncheckedMembers(); + break; + + + case '/members/exportCheckedMembersWithComments': + datos = await memberRepository.findLeanCheckedMembersWithComments(); + break; + default: datos = []; break; @@ -437,6 +500,9 @@ app.get('/members/birthday', getMembersBirthday); app.get('/members/findMembersBirthdayThisWeek', findMembersBirthdayThisWeek); app.get('/members/summary', getMembersSummary); app.get('/members/export', exportDocuments) +app.get('/members/exportUncheckedMembers', exportUncheckedMembers) +app.get('/members/exportCheckedMembersWithComments', exportCheckedMembersWithComments) + app.get('/members/generate-credential/:dni', generateCredential); app.get('/members/:id', getMemberById); app.put('/members/:id', updateMember); diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index bcf9d32..2f30d40 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -35,6 +35,25 @@ class MongoMemberRepository { return members; } + + async findLeanUncheckedMembers() { + const members = await MemberModel.find({ dataConfirmed: false }) + .select('-avatar -_id -__v') + .lean(); + return members; + } + + async findLeanCheckedMembersWithComments() { + const members = await MemberModel.find({ + dataConfirmed: true, + observations: { $regex: /.+/ } // Filtro para obtener miembros con observaciones no vacías + }) + .select('-avatar -_id -__v') + .lean(); + return members; + } + + async find(page) { const pageSize = 5; // Tamaño de página, puedes ajustarlo según tus necesidades const skip = page * pageSize; // Cálculo de skip considerando la indexación base 0 @@ -72,20 +91,22 @@ class MongoMemberRepository { } async findMembersBirthdayThisWeek() { - // Establecer la zona horaria de Argentina + // Set the timezone to Argentina const timezone = 'America/Argentina/Buenos_Aires'; const today = moment().tz(timezone); - // Definir el rango de fechas: desde hoy hasta el próximo lunes - const startOfWeek = today.clone().startOf('day'); // Desde hoy - const endOfWeek = startOfWeek.clone().add(6 - today.day() + 1, 'days'); // Próximo lunes + // Define the date range: from the current Tuesday (or today if it's Tuesday) to the next Monday + const startOfWeek = today.clone().day(today.day() >= 2 ? 1 : 2 - 7).startOf('day'); // Today if it's Tuesday, or the previous Tuesday + + const endOfWeek = startOfWeek.clone().add(6 - (today.day() === 1 ? 7 : 0), 'days').endOf('day'); // Next Monday const members = await MemberModel.aggregate([ { $addFields: { dayOfYearBirth: { $dayOfYear: "$dateOfBirth" }, - yearBirth: { $year: "$dateOfBirth" }, - currentYear: today.year() + birthYear: { $year: "$dateOfBirth" }, + currentYear: today.year(), + age: { $subtract: [today.year(), { $year: "$dateOfBirth" }] } // Calculate age } }, { @@ -93,9 +114,11 @@ class MongoMemberRepository { $and: [ { dayOfYearBirth: { $gte: startOfWeek.dayOfYear() } }, { dayOfYearBirth: { $lte: endOfWeek.dayOfYear() } }, - { yearBirth: { $eq: today.year() } } ] } + }, + { + $sort: { age: 1 } // Sort by age in ascending order (youngest first) } ]); @@ -104,6 +127,7 @@ class MongoMemberRepository { }; } + // Ejemplo en MongoMemberRepository.js async findByFilter(filter, page) { From 83173d4b1975c71cc17a21f7f0e7a1e955b114ce Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Wed, 28 Aug 2024 12:57:28 -0300 Subject: [PATCH 64/73] ajuste --- .../schemas/user/User.schema.js | 2 +- .../schemas/utility/Utility.schema.js | 14 +++++ src/index.js | 53 ++++++++++++++++++- src/repositories/services.repository.js | 9 ++-- src/repositories/utility.repository.js | 31 +++++++++++ 5 files changed, 104 insertions(+), 5 deletions(-) create mode 100644 src/configurations/schemas/utility/Utility.schema.js create mode 100644 src/repositories/utility.repository.js diff --git a/src/configurations/schemas/user/User.schema.js b/src/configurations/schemas/user/User.schema.js index 0eedc3a..bb80960 100644 --- a/src/configurations/schemas/user/User.schema.js +++ b/src/configurations/schemas/user/User.schema.js @@ -12,7 +12,7 @@ const UserSchema = new Schema({ type: String, required: true }, - role: { type: String, enum: ['miembro','secretaria','comision', 'admin', 'pastor'], default: 'miembro' } + role: { type: String, enum: ['miembro','secretaria','comision', 'admin', 'pastor','utileria'], default: 'miembro' } }); diff --git a/src/configurations/schemas/utility/Utility.schema.js b/src/configurations/schemas/utility/Utility.schema.js new file mode 100644 index 0000000..e30e5fc --- /dev/null +++ b/src/configurations/schemas/utility/Utility.schema.js @@ -0,0 +1,14 @@ +const mongoose = require('mongoose'); + +const InventoryItemSchema = new mongoose.Schema({ + avatar: { type: String, required: true }, + quantity: { type: Number, required: true }, + position: { type: String, required: true }, + type: { type: String, required: true }, + updatedAt: { type: Date, default: Date.now }, + user: { type: String, required: true }, +}); + +const InventoryItemModel = mongoose.model('InventoryItem', InventoryItemSchema); + +module.exports = InventoryItemModel; diff --git a/src/index.js b/src/index.js index be1c3ec..b77a2e1 100644 --- a/src/index.js +++ b/src/index.js @@ -15,6 +15,8 @@ const db = require('./configurations/db.config'); const MongoMemberRepository = require('./repositories/member.repository'); const MongoServicesRepository = require('./repositories/services.repository'); const UserRepository = require('./repositories/user.repository'); +const UtilityRepository = require('./repositories/utility.repository'); + const MemberModel = require('./configurations/schemas/member/Member.schema'); const ServiceModel = require('./configurations/schemas/services/Services.schema'); @@ -22,7 +24,7 @@ const ServiceModel = require('./configurations/schemas/services/Services.schema' const memberRepository = new MongoMemberRepository(); const servicesRepository = new MongoServicesRepository(); const userRepository = new UserRepository(); - +const utilityRepository = new UtilityRepository() const app = express(); @@ -487,6 +489,55 @@ const loginUser = async (req, res) => { } }; +// Ruta para pedir un ítem +const getUtilities = async (req, res) => { + try { + const items = await utilityRepository.get(); + res.status(201).send(items); + } catch (error) { + res.status(400).send(error); + } +} + +// Ruta para agregar un ítem +const addUtility = async (req, res) => { + try { + const newItem = await utilityRepository.add(req.body); + res.status(201).send(newItem); + } catch (error) { + res.status(400).send(error); + } +} + +// Ruta para actualizar la cantidad (sumar o restar) +const updateUtility = async (req, res) => { + const { id } = req.params; + const { body } = req; + + try { + const updatedItem = await utilityRepository.udpate(id, body.quantity); + res.status(200).send(updatedItem); + } catch (error) { + res.status(400).send(error); + } +} + +// Ruta para eliminar un ítem +const removeUtility = async (req, res) => { + const { id } = req.params; + try { + const deletedItem = await utilityRepository.delete(id); + res.status(200).send(deletedItem); + } catch (error) { + res.status(400).send(error); + } +} + +//rutas de Inventario +app.get('/utility', getUtilities); +app.post('/utility/add', addUtility); +app.put('/utility/:id', updateUtility); +app.delete('/utility/:id', removeUtility); // Rutas de usuario app.post('/register', registerUser); diff --git a/src/repositories/services.repository.js b/src/repositories/services.repository.js index 6305790..2e22c68 100644 --- a/src/repositories/services.repository.js +++ b/src/repositories/services.repository.js @@ -7,9 +7,12 @@ class MongoServicesRepository { try { // Obtener los servicios y realizar el 'populate' const services = await ServicesModel.find() - .select('-avatar -__v') - .populate('member', 'firstName lastName -_id') - .lean(); // Utiliza `lean()` para obtener un objeto JavaScript plano + .select('-avatar -__v') // Excluye los campos 'avatar' y '__v' + .populate({ + path: 'member', + select: 'firstName lastName -_id' // Incluye solo 'firstName' y 'lastName', excluyendo '_id' + }) + .lean(); // Transformar los datos a la estructura deseada const transformedServices = services.map(service => ({ diff --git a/src/repositories/utility.repository.js b/src/repositories/utility.repository.js new file mode 100644 index 0000000..94d62f7 --- /dev/null +++ b/src/repositories/utility.repository.js @@ -0,0 +1,31 @@ +const InventoryItemModel = require("../configurations/schemas/utility/Utility.schema"); + +class UtilityRepository { + + async get(){ + const items = await InventoryItemModel.find(); + return items + } + + async add(){ + const newItem = new InventoryItemModel(req.body); + const savedItem = await newItem.save(); + return savedItem; + } + + async udpate(_id, quantity){ + const itemUpdate = await InventoryItemModel.findByIdAndUpdate( + _id, + { $inc: { quantity }, updatedAt: Date.now() }, + { new: true } + ); + return itemUpdate; + } + + async delete(_id){ + await InventoryItemModel.findByIdAndDelete(_id); + return `Member with dni ${dni} deleted successfully.`; + } +} + +module.exports = UtilityRepository; From 04f507a0b6c8118ad253edc0c51816015a31f011 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Sat, 31 Aug 2024 22:39:17 -0300 Subject: [PATCH 65/73] ajustes --- src/index.js | 5 +++++ src/repositories/member.repository.js | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/index.js b/src/index.js index b77a2e1..639f60a 100644 --- a/src/index.js +++ b/src/index.js @@ -458,6 +458,9 @@ const selectedRepository = async (repositoryName) => { case '/members/exportCheckedMembersWithComments': datos = await memberRepository.findLeanCheckedMembersWithComments(); break; + + case '/utility/export' : + datos = await utilityRepository.get(); default: datos = []; @@ -538,6 +541,8 @@ app.get('/utility', getUtilities); app.post('/utility/add', addUtility); app.put('/utility/:id', updateUtility); app.delete('/utility/:id', removeUtility); +app.get('/utility/export', exportDocuments) + // Rutas de usuario app.post('/register', registerUser); diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index 2f30d40..84a071d 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -37,9 +37,9 @@ class MongoMemberRepository { async findLeanUncheckedMembers() { - const members = await MemberModel.find({ dataConfirmed: false }) - .select('-avatar -_id -__v') - .lean(); + const members = await MemberModel.find({ $or: [{ dataConfirmed: false }, { dataConfirmed: { $exists: false } }] }) + .select('-avatar -_id -__v') + .lean(); return members; } From d86d1f2592b5a3b5c1d6971206da25cde15cc5dd Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Sat, 31 Aug 2024 22:55:24 -0300 Subject: [PATCH 66/73] ajuste --- src/repositories/user.repository.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/repositories/user.repository.js b/src/repositories/user.repository.js index 65583c8..ea473c0 100644 --- a/src/repositories/user.repository.js +++ b/src/repositories/user.repository.js @@ -47,7 +47,7 @@ class UserRepository { const token = jwt.sign( { userId: user._id, role: user.role }, process.env.JWT_SECRET, - { expiresIn: '1h' } + { expiresIn: '1d' } ); // Eliminar el campo password antes de devolver el usuario From b9dae9bf6544c6882e8ac96f769cc63b5692c256 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Sat, 31 Aug 2024 23:33:09 -0300 Subject: [PATCH 67/73] auth --- src/index.js | 101 +++++++++++++++-------------- src/middlewares/auth.middleware.js | 28 ++++++++ 2 files changed, 79 insertions(+), 50 deletions(-) create mode 100644 src/middlewares/auth.middleware.js diff --git a/src/index.js b/src/index.js index 639f60a..98d94a0 100644 --- a/src/index.js +++ b/src/index.js @@ -9,6 +9,7 @@ const Jimp = require('jimp'); const puppeteer = require('puppeteer'); const XLSX = require('xlsx'); const compression = require('compression'); +const verifyToken = require('./middlewares/auth.middleware'); const db = require('./configurations/db.config'); @@ -38,7 +39,7 @@ const app = express(); })(); app.use(express.json({ limit: '10mb' })); -app.use(express.urlencoded({ limit: '10mb', extended: true })); +app.use(express.urlencoded({ limit: '10mb', extended: true })); app.use(cors({ origin: '*', @@ -107,7 +108,7 @@ const createMemberServicesMasive = async (req, res) => { ...service, avatar, date, - member: member._id + member: member._id }); return await newService.save(); @@ -141,7 +142,7 @@ const getMembers = async (req, res) => { const getMembersBirthday = async (req, res) => { try { let members; - members = await memberRepository.findMembersBirthday(); + members = await memberRepository.findMembersBirthday(); res.status(200).json(members); } catch (error) { console.error(error) @@ -152,7 +153,7 @@ const getMembersBirthday = async (req, res) => { const findMembersBirthdayThisWeek = async (req, res) => { try { let members; - members = await memberRepository.findMembersBirthdayThisWeek(); + members = await memberRepository.findMembersBirthdayThisWeek(); res.status(200).json(members); } catch (error) { console.error(error) @@ -243,25 +244,25 @@ const generateCredential = async (req, res) => { .replace('{member.firstName}', member.firstName) .replace('{member.position}', member.position !== "MIEMBRO" ? `
  • SERVICIO: ${member.position}
  • ` : ""); - browser = await puppeteer.launch({ headless: true }); - const page = await browser.newPage(); - await page.setContent(html); - const image = await page.screenshot({ type: 'png', quality: 60 }); - - await page.close(); - res.status(200).json({ image: image.toString('base64') }); - } catch (error) { - console.error('Error generando imágenes:', error); - res.status(500).send('Error generando imágenes'); - } finally { - if (browser) { - await browser.close(); - } + browser = await puppeteer.launch({ headless: true }); + const page = await browser.newPage(); + await page.setContent(html); + const image = await page.screenshot({ type: 'png', quality: 60 }); + + await page.close(); + res.status(200).json({ image: image.toString('base64') }); + } catch (error) { + console.error('Error generando imágenes:', error); + res.status(500).send('Error generando imágenes'); + } finally { + if (browser) { + await browser.close(); } + } }; /* SERVICES */ -const createServices= async (req, res) => { +const createServices = async (req, res) => { try { const service = req.body; const avatar = await memberRepository.getAvatarById(service.dni); @@ -317,7 +318,7 @@ const updateService = async (req, res) => { const service = req.body; const { id } = req.params; - const updatedMember = await servicesRepository.update(service,id); + const updatedMember = await servicesRepository.update(service, id); res.status(200).json(updatedMember); } catch (error) { res.status(500).json({ message: error.message }); @@ -458,8 +459,8 @@ const selectedRepository = async (repositoryName) => { case '/members/exportCheckedMembersWithComments': datos = await memberRepository.findLeanCheckedMembersWithComments(); break; - - case '/utility/export' : + + case '/utility/export': datos = await utilityRepository.get(); default: @@ -473,7 +474,7 @@ const selectedRepository = async (repositoryName) => { const registerUser = async (req, res) => { try { const { email, password, role } = req.body; - const savedUser = await userRepository.create({email, password, role }); + const savedUser = await userRepository.create({ email, password, role }); res.status(201).json({ message: 'User registered successfully', user: savedUser }); } catch (error) { res.status(500).json({ message: error.message }); @@ -482,8 +483,8 @@ const registerUser = async (req, res) => { const loginUser = async (req, res) => { try { - const { email,password } = req.body; - const {token , user} = await userRepository.login({email, password}); + const { email, password } = req.body; + const { token, user } = await userRepository.login({ email, password }); res.status(200).json({ message: 'Login successful', token, user }); } catch (error) { @@ -537,11 +538,11 @@ const removeUtility = async (req, res) => { } //rutas de Inventario -app.get('/utility', getUtilities); -app.post('/utility/add', addUtility); -app.put('/utility/:id', updateUtility); -app.delete('/utility/:id', removeUtility); -app.get('/utility/export', exportDocuments) +app.get('/utility', verifyToken, getUtilities); +app.post('/utility/add', verifyToken, addUtility); +app.put('/utility/:id', verifyToken, updateUtility); +app.delete('/utility/:id', verifyToken, removeUtility); +app.get('/utility/export', verifyToken, exportDocuments) // Rutas de usuario @@ -550,30 +551,30 @@ app.post('/login', loginUser); // Rutas members -app.post('/members', createMember); -app.get('/members', getMembers); -app.get('/members/birthday', getMembersBirthday); -app.get('/members/findMembersBirthdayThisWeek', findMembersBirthdayThisWeek); -app.get('/members/summary', getMembersSummary); -app.get('/members/export', exportDocuments) -app.get('/members/exportUncheckedMembers', exportUncheckedMembers) -app.get('/members/exportCheckedMembersWithComments', exportCheckedMembersWithComments) +app.post('/members', verifyToken, createMember); +app.get('/members', verifyToken, getMembers); +app.get('/members/birthday', verifyToken, getMembersBirthday); +app.get('/members/findMembersBirthdayThisWeek', verifyToken, findMembersBirthdayThisWeek); +app.get('/members/summary', verifyToken, getMembersSummary); +app.get('/members/export', verifyToken, exportDocuments) +app.get('/members/exportUncheckedMembers', verifyToken, exportUncheckedMembers) +app.get('/members/exportCheckedMembersWithComments', verifyToken, exportCheckedMembersWithComments) -app.get('/members/generate-credential/:dni', generateCredential); -app.get('/members/:id', getMemberById); -app.put('/members/:id', updateMember); -app.delete('/members/:id', deleteMember); +app.get('/members/generate-credential/:dni', verifyToken, generateCredential); +app.get('/members/:id', verifyToken, getMemberById); +app.put('/members/:id', verifyToken, updateMember); +app.delete('/members/:id', verifyToken, deleteMember); // Rutas services -app.post('/services', createServices); -app.post('/services/masive', createMemberServicesMasive); -app.get('/services', getServices); -app.get('/services/export', exportDocuments) -app.get('/services/:id', getServiceById); -app.put('/services/aproved/:id', aprovedService) -app.put('/services/:id', updateService); -app.delete('/services/:id', deleteService); +app.post('/services', verifyToken, createServices); +app.post('/services/masive', verifyToken, createMemberServicesMasive); +app.get('/services', verifyToken, getServices); +app.get('/services/export', verifyToken, exportDocuments) +app.get('/services/:id', verifyToken, getServiceById); +app.put('/services/aproved/:id', verifyToken, aprovedService) +app.put('/services/:id', verifyToken, updateService); +app.delete('/services/:id', verifyToken, deleteService); const PORT = process.env.PORT || 3000; app.listen(PORT, () => console.log(`Server is running on port ${PORT}`)); diff --git a/src/middlewares/auth.middleware.js b/src/middlewares/auth.middleware.js new file mode 100644 index 0000000..5dbcf00 --- /dev/null +++ b/src/middlewares/auth.middleware.js @@ -0,0 +1,28 @@ +const jwt = require('jsonwebtoken'); +const UserModel = require("../configurations/schemas/user/User.schema"); + +function verifyToken(req, res, next) { + const token = req.headers['authorization']; + + if (!token) { + return res.status(403).send({ auth: false, message: 'No token provided.' }); + } + + // Elimina el prefijo "Bearer " del token si está presente + const tokenWithoutBearer = token.startsWith('Bearer ') ? token.slice(7, token.length) : token; + + jwt.verify(tokenWithoutBearer, process.env.JWT_SECRET, async function(err, decoded) { + if (err) { + return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' }); + } + const user = await UserModel.findOne({ _id: decoded.userId }); + if (!user) { + return res.status(500).send({ auth: false, message: 'Failed to authenticate user.' }); + } + // Si el token es válido, guardamos la información del usuario en req.user + req.user = decoded; + next(); + }); +} + +module.exports = verifyToken; From a1378d185c1b9d15e2b89ce8eb037207cded7aa9 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Sat, 31 Aug 2024 23:34:52 -0300 Subject: [PATCH 68/73] auth --- src/middlewares/auth.middleware.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/middlewares/auth.middleware.js b/src/middlewares/auth.middleware.js index 5dbcf00..2fa2f95 100644 --- a/src/middlewares/auth.middleware.js +++ b/src/middlewares/auth.middleware.js @@ -13,8 +13,13 @@ function verifyToken(req, res, next) { jwt.verify(tokenWithoutBearer, process.env.JWT_SECRET, async function(err, decoded) { if (err) { - return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' }); + if (err.name === 'TokenExpiredError') { + return res.status(401).send({ auth: false, message: 'Token has expired.' }); + } else { + return res.status(500).send({ auth: false, message: 'Failed to authenticate token.' }); + } } + const user = await UserModel.findOne({ _id: decoded.userId }); if (!user) { return res.status(500).send({ auth: false, message: 'Failed to authenticate user.' }); From c0c1d4e4ac16a3b027028001fbdf2e79aa8671d7 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Mon, 2 Sep 2024 00:45:35 -0300 Subject: [PATCH 69/73] add activity --- .../schemas/activity/activity.schema.js | 15 ++++++ .../schemas/user/User.schema.js | 2 +- .../schemas/utility/Utility.schema.js | 2 +- src/index.js | 53 ++++++++++++++++++- src/repositories/activity.repository.js | 31 +++++++++++ 5 files changed, 99 insertions(+), 4 deletions(-) create mode 100644 src/configurations/schemas/activity/activity.schema.js create mode 100644 src/repositories/activity.repository.js diff --git a/src/configurations/schemas/activity/activity.schema.js b/src/configurations/schemas/activity/activity.schema.js new file mode 100644 index 0000000..768dbd2 --- /dev/null +++ b/src/configurations/schemas/activity/activity.schema.js @@ -0,0 +1,15 @@ +const mongoose = require('mongoose'); +const { Schema } = mongoose; + +const ActivitySchema = new mongoose.Schema({ + name: { type: String, required: true }, + description: { type: String, required: true }, + expirationDate: { type: Date }, + date: { type: Date, default: Date.now }, + updatedAt: { type: Date, default: Date.now }, + user: [{ type: Schema.Types.ObjectId, ref: 'User' }] +}); + +const ActivityModel = mongoose.model('Activity', ActivitySchema); + +module.exports = ActivityModel; diff --git a/src/configurations/schemas/user/User.schema.js b/src/configurations/schemas/user/User.schema.js index bb80960..09b8711 100644 --- a/src/configurations/schemas/user/User.schema.js +++ b/src/configurations/schemas/user/User.schema.js @@ -12,7 +12,7 @@ const UserSchema = new Schema({ type: String, required: true }, - role: { type: String, enum: ['miembro','secretaria','comision', 'admin', 'pastor','utileria'], default: 'miembro' } + role: { type: String, enum: ['miembro','secretaria','comision','admin', 'pastor','utileria'], default: 'miembro' } }); diff --git a/src/configurations/schemas/utility/Utility.schema.js b/src/configurations/schemas/utility/Utility.schema.js index e30e5fc..1bb4679 100644 --- a/src/configurations/schemas/utility/Utility.schema.js +++ b/src/configurations/schemas/utility/Utility.schema.js @@ -6,7 +6,7 @@ const InventoryItemSchema = new mongoose.Schema({ position: { type: String, required: true }, type: { type: String, required: true }, updatedAt: { type: Date, default: Date.now }, - user: { type: String, required: true }, + user: { type: String, required: true } }); const InventoryItemModel = mongoose.model('InventoryItem', InventoryItemSchema); diff --git a/src/index.js b/src/index.js index 98d94a0..a1facfd 100644 --- a/src/index.js +++ b/src/index.js @@ -17,6 +17,7 @@ const MongoMemberRepository = require('./repositories/member.repository'); const MongoServicesRepository = require('./repositories/services.repository'); const UserRepository = require('./repositories/user.repository'); const UtilityRepository = require('./repositories/utility.repository'); +const ActivityRepository = require('./repositories/activity.repository'); const MemberModel = require('./configurations/schemas/member/Member.schema'); @@ -26,6 +27,7 @@ const memberRepository = new MongoMemberRepository(); const servicesRepository = new MongoServicesRepository(); const userRepository = new UserRepository(); const utilityRepository = new UtilityRepository() +const activityRepository = new ActivityRepository() const app = express(); @@ -537,6 +539,55 @@ const removeUtility = async (req, res) => { } } +// Ruta para pedir un ítem +const getActivities = async (req, res) => { + try { + const activities = await activityRepository.find(); + res.status(201).send(activities); + } catch (error) { + res.status(400).send(error); + } +} + +// Ruta para agregar un ítem +const addActivity = async (req, res) => { + try { + const newItem = await activityRepository.save(req.body); + res.status(201).send(newItem); + } catch (error) { + res.status(400).send(error); + } +} + +// Ruta para actualizar un ítem +const updateActivity = async (req, res) => { + const { id } = req.params; + try { + const deletedItem = await activityRepository.delete(id); + res.status(200).send(deletedItem); + } catch (error) { + res.status(400).send(error); + } +} + + +// Ruta para eliminar un ítem +const removeActivity = async (req, res) => { + const { id } = req.params; + try { + const deletedItem = await activityRepository.delete(id); + res.status(200).send(deletedItem); + } catch (error) { + res.status(400).send(error); + } +} + +//rutas de Actividades +app.get('/activity', verifyToken, getActivities); +app.post('/activity/add', verifyToken, addActivity); +app.put('/activity/:id', verifyToken, updateActivity); +app.delete('/activity/:id', verifyToken, removeActivity); + //rutas de Inventario app.get('/utility', verifyToken, getUtilities); app.post('/utility/add', verifyToken, addUtility); @@ -544,12 +595,10 @@ app.put('/utility/:id', verifyToken, updateUtility); app.delete('/utility/:id', verifyToken, removeUtility); app.get('/utility/export', verifyToken, exportDocuments) - // Rutas de usuario app.post('/register', registerUser); app.post('/login', loginUser); - // Rutas members app.post('/members', verifyToken, createMember); app.get('/members', verifyToken, getMembers); diff --git a/src/repositories/activity.repository.js b/src/repositories/activity.repository.js new file mode 100644 index 0000000..c9d6ec4 --- /dev/null +++ b/src/repositories/activity.repository.js @@ -0,0 +1,31 @@ +const ActivityModel = require('../configurations/schemas/activity/activity.schema'); +class ActivityRepository { + + async find() { + const activities = await ActivityModel.find().populate('user') + return activities; + } + + async findById(_id) { + const activity = await ActivityModel.findById(_id); + return activity; + } + + async save(activity) { + + const newActivity = new ActivityModel(activity); + return await newActivity.save(); + } + + async update(activity) { + const { _id } = activity; + return await ActivityModel.findOneAndUpdate({ _id }, activity, { new: true }); + } + + async delete(_id) { + await ActivityModel.deleteOne({ _id }); + return `Activity with id ${_id} deleted successfully.`; + } +} + +module.exports = ActivityRepository; From 7e3510c085648d098c15051d3adb76f6e2eee5b1 Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Sun, 8 Sep 2024 22:04:47 -0300 Subject: [PATCH 70/73] fix --- src/repositories/member.repository.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index 84a071d..22f6896 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -137,7 +137,7 @@ class MongoMemberRepository { const query = { $or: [ - { firstName: { $regex: filter, $options: 'i' } }, + { lastName: { $regex: filter, $options: 'i' } }, { dni: { $regex: filter, $options: 'i' } } ] }; From 53c77c693e615f0dae1ce854d1b9946207b9ef4e Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Sun, 8 Sep 2024 22:12:11 -0300 Subject: [PATCH 71/73] fix --- src/repositories/member.repository.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index 22f6896..3f53287 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -135,10 +135,14 @@ class MongoMemberRepository { const pageNumber = parseInt(page) || 1; const skip = (pageNumber - 1) * perPage; + const safeFilter = filter ? filter.trim() : ''; + + const query = { $or: [ - { lastName: { $regex: filter, $options: 'i' } }, - { dni: { $regex: filter, $options: 'i' } } + { firstName: { $regex: safeFilter, $options: 'i' } }, + { lastName: { $regex: safeFilter, $options: 'i' } }, + { dni: { $regex: safeFilter, $options: 'i' } } ] }; From 0b543bafa9e8baf0771a13519d66044dfacc3e1e Mon Sep 17 00:00:00 2001 From: agustinperez99 Date: Wed, 18 Sep 2024 06:34:26 -0300 Subject: [PATCH 72/73] ep-export-member-date&avatar (intento fallido) --- src/index.js | 26 +- src/repositories/member.repository.js | 562 +++++++++++++------------- 2 files changed, 317 insertions(+), 271 deletions(-) diff --git a/src/index.js b/src/index.js index a1facfd..53aac18 100644 --- a/src/index.js +++ b/src/index.js @@ -12,7 +12,6 @@ const compression = require('compression'); const verifyToken = require('./middlewares/auth.middleware'); const db = require('./configurations/db.config'); - const MongoMemberRepository = require('./repositories/member.repository'); const MongoServicesRepository = require('./repositories/services.repository'); const UserRepository = require('./repositories/user.repository'); @@ -615,6 +614,31 @@ app.put('/members/:id', verifyToken, updateMember); app.delete('/members/:id', verifyToken, deleteMember); +// Ruta para obtener todos los miembros junto con su avatar +app.get('/api/members', async (req, res) => { + try { + const members = await Member.find().select( + " avatar firstName lastName age telephone maritalStatus dateOfBirth address locality position dateOfJoing dateOfBaptism status" + ); // Traer los campos + res.status(200).json(members); + } catch (error) { + res.status(500).json({ message: 'Error al obtener los miembros', error }); + } +}); + + +// Ruta para obtener todos los miembros incluyendo el avatar +app.get('/members-with-avatars', verifyToken, async (req, res) => { + try { + const members = await memberRepository.getAllMembers(); // Usamos la función que cree en member.repository + res.status(200).json(members); + } catch (error) { + console.error('Error al obtener los miembros:', error); + res.status(500).json({ message: 'Error al obtener los miembros', error: error.message }); + } +}); + + // Rutas services app.post('/services', verifyToken, createServices); app.post('/services/masive', verifyToken, createMemberServicesMasive); diff --git a/src/repositories/member.repository.js b/src/repositories/member.repository.js index 3f53287..6526003 100644 --- a/src/repositories/member.repository.js +++ b/src/repositories/member.repository.js @@ -1,299 +1,321 @@ const MemberModel = require('../configurations/schemas/member/Member.schema'); const ServicesModel = require('../configurations/schemas/services/Services.schema'); const moment = require('moment-timezone'); -class MongoMemberRepository { - - async exportEXCEL() { - try { - // Obtén los datos de la colección - const datos = await MiModelo.find().lean(); - - // Crea una nueva hoja de cálculo - const hoja = XLSX.utils.json_to_sheet(datos); +const bcrypt = require('bcrypt'); +const XLSX = require('xlsx'); +const MongoMemberRepository = require("./repositories/member.repository"); - // Crea un libro de trabajo y agrega la hoja - const libro = XLSX.utils.book_new(); - XLSX.utils.book_append_sheet(libro, hoja, 'Datos'); - - // Escribe el archivo Excel - XLSX.writeFile(libro, 'exportacion.xlsx'); - console.log('Exportación completada con éxito.'); - } catch (error) { - console.error('Error al exportar:', error); - } finally { - mongoose.connection.close(); - } +class MongoMemberRepository { + async exportEXCEL() { + try { + // Obtén los datos de la colección + const datos = await MiModelo.find().lean(); + + // Crea una nueva hoja de cálculo + const hoja = XLSX.utils.json_to_sheet(datos); + + // Crea un libro de trabajo y agrega la hoja + const libro = XLSX.utils.book_new(); + XLSX.utils.book_append_sheet(libro, hoja, "Datos"); + + // Escribe el archivo Excel + XLSX.writeFile(libro, "exportacion.xlsx"); + console.log("Exportación completada con éxito."); + } catch (error) { + console.error("Error al exportar:", error); + } finally { + mongoose.connection.close(); } - - generateCredential() { - return Promise.reject(new Error('Method not implemented.')); + } + + generateCredential() { + return Promise.reject(new Error("Method not implemented.")); + } + + async findLean() { + const members = await MemberModel.find().select("-avatar -_id -__v").lean(); + return members; + } + + async getAllMembers() { + try { + const members = await Member.find(); // Trae todos los miembros + return members; + } catch (error) { + throw new Error("Error al obtener los miembros: " + error.message); } - - async findLean() { - const members = await MemberModel.find().select('-avatar -_id -__v').lean(); - return members; + } + + async findLeanUncheckedMembers() { + const members = await MemberModel.find({ + $or: [{ dataConfirmed: false }, { dataConfirmed: { $exists: false } }], + }) + .select("-avatar -_id -__v") + .lean(); + return members; + } + + async findLeanCheckedMembersWithComments() { + const members = await MemberModel.find({ + dataConfirmed: true, + observations: { $regex: /.+/ }, // Filtro para obtener miembros con observaciones no vacías + }) + .select("-avatar -_id -__v") + .lean(); + return members; + } + + async find(page) { + const pageSize = 5; // Tamaño de página, puedes ajustarlo según tus necesidades + const skip = page * pageSize; // Cálculo de skip considerando la indexación base 0 + + const members = await MemberModel.find().skip(skip).limit(pageSize); + + const total = await MemberModel.countDocuments(); // Obtiene el conteo total de documentos + + return { + members, + total, + page, + totalPages: Math.ceil(total / pageSize), + }; + } + + async findMembersBirthday() { + // Establecer la zona horaria de Argentina + const today = moment().tz("America/Argentina/Buenos_Aires"); + + const members = await MemberModel.find({ + $expr: { + $and: [ + { $eq: [{ $dayOfMonth: "$dateOfBirth" }, today.date()] }, + { $eq: [{ $month: "$dateOfBirth" }, today.month() + 1] }, + ], + }, + }); + + return { + members, + }; + } + + async findMembersBirthdayThisWeek() { + // Set the timezone to Argentina + const timezone = "America/Argentina/Buenos_Aires"; + const today = moment().tz(timezone); + + // Define the date range: from the current Tuesday (or today if it's Tuesday) to the next Monday + const startOfWeek = today + .clone() + .day(today.day() >= 2 ? 1 : 2 - 7) + .startOf("day"); // Today if it's Tuesday, or the previous Tuesday + + const endOfWeek = startOfWeek + .clone() + .add(6 - (today.day() === 1 ? 7 : 0), "days") + .endOf("day"); // Next Monday + + const members = await MemberModel.aggregate([ + { + $addFields: { + dayOfYearBirth: { $dayOfYear: "$dateOfBirth" }, + birthYear: { $year: "$dateOfBirth" }, + currentYear: today.year(), + age: { $subtract: [today.year(), { $year: "$dateOfBirth" }] }, // Calculate age + }, + }, + { + $match: { + $and: [ + { dayOfYearBirth: { $gte: startOfWeek.dayOfYear() } }, + { dayOfYearBirth: { $lte: endOfWeek.dayOfYear() } }, + ], + }, + }, + { + $sort: { age: 1 }, // Sort by age in ascending order (youngest first) + }, + ]); + + return { + members, + }; + } + + // Ejemplo en MongoMemberRepository.js + async findByFilter(filter, page) { + const perPage = 5; // Número de resultados por página + const pageNumber = parseInt(page) || 1; + const skip = (pageNumber - 1) * perPage; + + const safeFilter = filter ? filter.trim() : ""; + + const query = { + $or: [ + { firstName: { $regex: safeFilter, $options: "i" } }, + { lastName: { $regex: safeFilter, $options: "i" } }, + { dni: { $regex: safeFilter, $options: "i" } }, + ], + }; + + const members = await MemberModel.find(query) + .skip(skip) + .limit(perPage) + .exec(); + + const totalMembers = await MemberModel.countDocuments(query); + const totalPages = Math.ceil(totalMembers / perPage); + + return { + members, + total: totalMembers, + totalPages, + currentPage: pageNumber, + }; + } + + async findSummary(filter) { + const dnis = []; + const query = {}; + + if (filter.status) { + query.status = filter.status; } - - async findLeanUncheckedMembers() { - const members = await MemberModel.find({ $or: [{ dataConfirmed: false }, { dataConfirmed: { $exists: false } }] }) - .select('-avatar -_id -__v') - .lean(); - return members; - } - - async findLeanCheckedMembersWithComments() { - const members = await MemberModel.find({ - dataConfirmed: true, - observations: { $regex: /.+/ } // Filtro para obtener miembros con observaciones no vacías - }) - .select('-avatar -_id -__v') - .lean(); - return members; - } - - - async find(page) { - const pageSize = 5; // Tamaño de página, puedes ajustarlo según tus necesidades - const skip = page * pageSize; // Cálculo de skip considerando la indexación base 0 - - const members = await MemberModel.find() - .skip(skip) - .limit(pageSize); - - const total = await MemberModel.countDocuments(); // Obtiene el conteo total de documentos - - return { - members, - total, - page, - totalPages: Math.ceil(total / pageSize) - }; + if (filter.choirs === "true") { + const services = await ServicesModel.find({ service: "COROS" }).select( + "dni -_id" + ); + dnis.push(...services.map((x) => x.dni)); } - async findMembersBirthday() { - // Establecer la zona horaria de Argentina - const today = moment().tz('America/Argentina/Buenos_Aires'); - - const members = await MemberModel.find({ - $expr: { - $and: [ - { $eq: [{ $dayOfMonth: "$dateOfBirth" }, today.date()] }, - { $eq: [{ $month: "$dateOfBirth" }, today.month() + 1] } - ] - } - }); - - return { - members - }; + if (filter.reflection === "true") { + const services = await ServicesModel.find({ + service: "REFLEXION", + }).select("dni -_id"); + dnis.push(...services.map((x) => x.dni)); } - - async findMembersBirthdayThisWeek() { - // Set the timezone to Argentina - const timezone = 'America/Argentina/Buenos_Aires'; - const today = moment().tz(timezone); - - // Define the date range: from the current Tuesday (or today if it's Tuesday) to the next Monday - const startOfWeek = today.clone().day(today.day() >= 2 ? 1 : 2 - 7).startOf('day'); // Today if it's Tuesday, or the previous Tuesday - - const endOfWeek = startOfWeek.clone().add(6 - (today.day() === 1 ? 7 : 0), 'days').endOf('day'); // Next Monday - - const members = await MemberModel.aggregate([ - { - $addFields: { - dayOfYearBirth: { $dayOfYear: "$dateOfBirth" }, - birthYear: { $year: "$dateOfBirth" }, - currentYear: today.year(), - age: { $subtract: [today.year(), { $year: "$dateOfBirth" }] } // Calculate age - } - }, - { - $match: { - $and: [ - { dayOfYearBirth: { $gte: startOfWeek.dayOfYear() } }, - { dayOfYearBirth: { $lte: endOfWeek.dayOfYear() } }, - ] - } - }, - { - $sort: { age: 1 } // Sort by age in ascending order (youngest first) - } - ]); - - return { - members - }; - } - - - - // Ejemplo en MongoMemberRepository.js - async findByFilter(filter, page) { - const perPage = 5; // Número de resultados por página - const pageNumber = parseInt(page) || 1; - const skip = (pageNumber - 1) * perPage; - - const safeFilter = filter ? filter.trim() : ''; - - - const query = { - $or: [ - { firstName: { $regex: safeFilter, $options: 'i' } }, - { lastName: { $regex: safeFilter, $options: 'i' } }, - { dni: { $regex: safeFilter, $options: 'i' } } - ] - }; - - const members = await MemberModel.find(query) - .skip(skip) - .limit(perPage) - .exec(); - - const totalMembers = await MemberModel.countDocuments(query); - const totalPages = Math.ceil(totalMembers / perPage); - - return { - members, - total: totalMembers, - totalPages, - currentPage: pageNumber - }; - } - - async findSummary(filter) { - const dnis = []; - const query = {}; - - if (filter.status) { - query.status = filter.status; - } - - if (filter.choirs === 'true') { - const services = await ServicesModel.find({ service: 'COROS' }) - .select('dni -_id') - dnis.push(...services.map(x => x.dni)) - } - - if (filter.reflection === 'true') { - const services = await ServicesModel.find({ service: 'REFLEXION' }) - .select('dni -_id') - dnis.push(...services.map(x => x.dni)) - - } - - if (filter.preaching === 'true') { - const services = await ServicesModel.find({ service: 'PREDICACION' }) - .select('dni -_id') - dnis.push(...services.map(x => x.dni)) - - } - - if (filter.leadsleads === 'true') { - const services = await ServicesModel.find({ service: 'DIRIGE' }) - .select('dni -_id') - dnis.push(...services.map(x => x.dni)) - - } - - if (filter.work === 'true') { - const services = await ServicesModel.find({ service: 'OBRA' }) - .select('dni -_id') - dnis.push(...services.map(x => x.dni)) - - } - - if (filter.games === 'true') { - const services = await ServicesModel.find({ service: 'JUEGOS' }) - .select('dni -_id') - dnis.push(...services.map(x => x.dni)) - - } - - if (filter.greaterThanYear > 0) { - const yearsAgo = moment().subtract(filter.greaterThanYear, 'years').toDate(); - query.dateOfBirth = { $lt: yearsAgo }; - } - - if (filter.lessThanYear > 0) { - const recentYears = moment().subtract(filter.lessThanYear, 'years').toDate(); - if (!query.dateOfBirth) { - query.dateOfBirth = {}; - } - query.dateOfBirth.$gt = recentYears; - } - - - if (filter.noServiceSince > 0) { - const monthsAgo = moment().subtract(filter.noServiceSince, 'months').toDate(); - const recentServices = await ServicesModel.find({ date: { $gte: monthsAgo } }).select('dni -_id'); - const recentDnis = recentServices.map(x => x.dni); - - // Obtener todos los DNIs - const allDnis = (await ServicesModel.find().select('dni -_id')).map(x => x.dni); - - // Filtrar los DNIs que no tienen servicios recientes - const noRecentServiceDnis = allDnis.filter(dni => !recentDnis.includes(dni)); - - dnis.push(...noRecentServiceDnis); - } - - if (dnis.length > 0) { - query.dni = { $in: dnis }; - } - - - const members = await MemberModel.find(query) - .select('dni firstName lastName _id dateOfBirth') - .sort({ lastName: 1, firstName: 1 }) - .populate('services') - .exec(); + if (filter.preaching === "true") { + const services = await ServicesModel.find({ + service: "PREDICACION", + }).select("dni -_id"); + dnis.push(...services.map((x) => x.dni)); + } - return { - members, - }; + if (filter.leadsleads === "true") { + const services = await ServicesModel.find({ service: "DIRIGE" }).select( + "dni -_id" + ); + dnis.push(...services.map((x) => x.dni)); } - async findById(dni) { - const member = await MemberModel.findOne({ dni }); - return member; + if (filter.work === "true") { + const services = await ServicesModel.find({ service: "OBRA" }).select( + "dni -_id" + ); + dnis.push(...services.map((x) => x.dni)); } - - async findByFirstNameAndLastName(firstName,lastName){ - const member = await MemberModel.findOne({ firstName,lastName }); - return member; + + if (filter.games === "true") { + const services = await ServicesModel.find({ service: "JUEGOS" }).select( + "dni -_id" + ); + dnis.push(...services.map((x) => x.dni)); } - async getAvatarById(dni) { - try { - const member = await MemberModel.findOne({ dni }).select('avatar'); - if (!member) { - throw new Error(`No se encontró un avatar para el DNI: ${dni}`); - } - return member.avatar; - } catch (error) { - console.error(`Error al obtener el avatar para el DNI: ${dni}`, error); - throw error; - } + if (filter.greaterThanYear > 0) { + const yearsAgo = moment() + .subtract(filter.greaterThanYear, "years") + .toDate(); + query.dateOfBirth = { $lt: yearsAgo }; + } + if (filter.lessThanYear > 0) { + const recentYears = moment() + .subtract(filter.lessThanYear, "years") + .toDate(); + if (!query.dateOfBirth) { + query.dateOfBirth = {}; + } + query.dateOfBirth.$gt = recentYears; } - async save(member) { - const newMember = new MemberModel(member); - return await newMember.save(); + if (filter.noServiceSince > 0) { + const monthsAgo = moment() + .subtract(filter.noServiceSince, "months") + .toDate(); + const recentServices = await ServicesModel.find({ + date: { $gte: monthsAgo }, + }).select("dni -_id"); + const recentDnis = recentServices.map((x) => x.dni); + + // Obtener todos los DNIs + const allDnis = (await ServicesModel.find().select("dni -_id")).map( + (x) => x.dni + ); + + // Filtrar los DNIs que no tienen servicios recientes + const noRecentServiceDnis = allDnis.filter( + (dni) => !recentDnis.includes(dni) + ); + + dnis.push(...noRecentServiceDnis); } - async update(member) { - const { dni } = member; - return await MemberModel.findOneAndUpdate({ dni }, member, { new: true }); + if (dnis.length > 0) { + query.dni = { $in: dnis }; } - async delete(dni) { - await MemberModel.deleteOne({ dni }); - return `Member with dni ${dni} deleted successfully.`; + const members = await MemberModel.find(query) + .select("dni firstName lastName _id dateOfBirth") + .sort({ lastName: 1, firstName: 1 }) + .populate("services") + .exec(); + + return { + members, + }; + } + + async findById(dni) { + const member = await MemberModel.findOne({ dni }); + return member; + } + + async findByFirstNameAndLastName(firstName, lastName) { + const member = await MemberModel.findOne({ firstName, lastName }); + return member; + } + + async getAvatarById(dni) { + try { + const member = await MemberModel.findOne({ dni }).select("avatar"); + if (!member) { + throw new Error(`No se encontró un avatar para el DNI: ${dni}`); + } + return member.avatar; + } catch (error) { + console.error(`Error al obtener el avatar para el DNI: ${dni}`, error); + throw error; } + } + + async save(member) { + const newMember = new MemberModel(member); + return await newMember.save(); + } + + async update(member) { + const { dni } = member; + return await MemberModel.findOneAndUpdate({ dni }, member, { new: true }); + } + + async delete(dni) { + await MemberModel.deleteOne({ dni }); + return `Member with dni ${dni} deleted successfully.`; + } } -module.exports = MongoMemberRepository; +module.exports = new MongoMemberRepository(); // Exporta la clase completa From 3c26c118ac04e2853a2336aa79f3569d8ce47a18 Mon Sep 17 00:00:00 2001 From: agustinperez99 Date: Wed, 18 Sep 2024 06:35:56 -0300 Subject: [PATCH 73/73] ep-export-member-date&avatar (intento fallido) --- package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index e48a790..fc0af00 100644 --- a/package.json +++ b/package.json @@ -33,5 +33,7 @@ }, "devDependencies": { "nodemon": "^3.1.0" - } + }, + "author": "", + "license": "ISC" }

    =@4L+BG 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 uDC`i`-d7nN(^0|NbALc%&r& literal 0 HcmV?d00001 From 8138bb58013fbdff20f3fe410a9c43c7f487bdbc Mon Sep 17 00:00:00 2001 From: victor ortiz Date: Fri, 28 Jun 2024 21:24:41 -0300 Subject: [PATCH 31/73] mejora --- src/index.js | 220 +++----------------------- src/resources/templates/template.html | 159 +++++++++++++++++++ 2 files changed, 185 insertions(+), 194 deletions(-) create mode 100644 src/resources/templates/template.html diff --git a/src/index.js b/src/index.js index 4cf353d..d47ea3d 100644 --- a/src/index.js +++ b/src/index.js @@ -30,7 +30,6 @@ app.use(cors()); // Servicios const createMember = async (req, res) => { - try { const member = req.body; // Verificar si ya existe un miembro con el mismo DNI @@ -100,216 +99,49 @@ const deleteMember = async (req, res) => { }; const generateCredential = async (req, res) => { - try { const { dni } = req.params; const member = await memberRepository.findById(dni); - + let avatarDefault; - + const qrUrl = `${process.env.URL_BASE_FRONT}/members/status/${dni}`; const qr = await QRCode.toDataURL(qrUrl); - + // Retrieve the image from the filesystem using Jimp const imagePath = path.join(__dirname, 'public/static/logo.png'); - const image = await Jimp.read(imagePath); - const logoBuffer = await image.getBufferAsync(Jimp.MIME_PNG); + const imageLogo = await Jimp.read(imagePath); + const logoBuffer = await imageLogo.getBufferAsync(Jimp.MIME_PNG); const logoBase64 = logoBuffer.toString('base64'); const logoDataURL = `data:image/png;base64,${logoBase64}`; - - if(!member.avatar){ + + if (!member.avatar) { const imagePathDefault = path.join(__dirname, 'public/static/default.jpg'); - const imageDefault = await Jimp.read(imagePathDefault); - const logoBufferDefault = await imageDefault.getBufferAsync(Jimp.MIME_PNG); - const logoBase64Default = logoBufferDefault.toString('base64'); - avatarDefault = `data:image/png;base64,${logoBase64Default}`; + const imageDefault = await Jimp.read(imagePathDefault); + const logoBufferDefault = await imageDefault.getBufferAsync(Jimp.MIME_PNG); + const logoBase64Default = logoBufferDefault.toString('base64'); + avatarDefault = `data:image/png;base64,${logoBase64Default}`; } + // Read HTML template from file + const templatePath = path.join(__dirname, 'resources/templates/template.html'); + const htmlTemplate = fs.readFileSync(templatePath, 'utf8'); - try { - const html = ` - - - - - -