From 913093e709fb282797863321224a56ea64f26495 Mon Sep 17 00:00:00 2001 From: Angela Date: Sat, 6 Apr 2024 13:27:19 +0200 Subject: [PATCH 01/43] api usuarios funciona pero esta fea --- apis/Dockerfile | 20 + apis/package-lock.json | 5419 +++++++++++++++++++++++ apis/package.json | 32 + apis/user-model.js | 20 + apis/usersapi.js | 41 + docker-compose.yml | 16 + gatewayservice/gateway-service.js | 16 +- webapp/package-lock.json | 2 +- webapp/src/components/PantallaInicio.js | 6 +- webapp/src/components/Perfil.js | 65 + webapp/src/index.js | 2 + 11 files changed, 5636 insertions(+), 3 deletions(-) create mode 100644 apis/Dockerfile create mode 100644 apis/package-lock.json create mode 100644 apis/package.json create mode 100644 apis/user-model.js create mode 100644 apis/usersapi.js create mode 100644 webapp/src/components/Perfil.js diff --git a/apis/Dockerfile b/apis/Dockerfile new file mode 100644 index 00000000..bcff07c0 --- /dev/null +++ b/apis/Dockerfile @@ -0,0 +1,20 @@ +# Use an official Node.js runtime as a parent image +FROM node:20 + +# Set the working directory in the container +WORKDIR /usr/src/apis + +# Copy package.json and package-lock.json to the working directory +COPY package*.json ./ + +# Install app dependencies +RUN npm install + +# Copy the app source code to the working directory +COPY . . + +# Expose the port the app runs on +EXPOSE 8004 + +# Define the command to run your app +CMD ["node", "usersapi.js"] diff --git a/apis/package-lock.json b/apis/package-lock.json new file mode 100644 index 00000000..49f64b60 --- /dev/null +++ b/apis/package-lock.json @@ -0,0 +1,5419 @@ +{ + "name": "usersapi", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "usersapi", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "axios": "^0.21.1", + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "express": "^4.18.2", + "mongoose": "^8.0.4" + }, + "devDependencies": { + "jest": "^29.7.0", + "mongodb-memory-server": "^9.1.5", + "supertest": "^6.3.4" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz", + "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz", + "integrity": "sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "20.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz", + "integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/bson": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz", + "integrity": "sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.623", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz", + "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "devOptional": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mongodb": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.2.0.tgz", + "integrity": "sha512-d7OSuGjGWDZ5usZPqfvb36laQ9CPhnWkAGHT61x5P95p/8nMVeH8asloMwW6GcYFeB0Vj4CB/1wOTDG2RA9BFA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.2.0", + "mongodb-connection-string-url": "^2.6.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongodb-memory-server": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-9.1.5.tgz", + "integrity": "sha512-m7yewXoyctu2lwISq/sazwOV/LBkPmAm4ulwoP6J4zzv78ESlAIuQEHoL2+45CTlwxiRM5hfVBQe9HIYEFaBWw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "mongodb-memory-server-core": "9.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-9.1.5.tgz", + "integrity": "sha512-mevjdWrxym+MzMoNsFfCtrXwK3ndb0xHKj+fHT1xoT4l+uflEqvLHt+aRdJrTW5GTGYeVlYHQpQ8hLKMeEL6cg==", + "dev": true, + "dependencies": { + "async-mutex": "^0.4.0", + "camelcase": "^6.3.0", + "debug": "^4.3.4", + "find-cache-dir": "^3.3.2", + "follow-redirects": "^1.15.3", + "https-proxy-agent": "^7.0.2", + "mongodb": "^5.9.1", + "new-find-package-json": "^2.0.0", + "semver": "^7.5.4", + "tar-stream": "^3.0.0", + "tslib": "^2.6.2", + "yauzl": "^2.10.0" + }, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/bson": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", + "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", + "dev": true, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mongodb-memory-server-core/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/mongodb": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.2.tgz", + "integrity": "sha512-H60HecKO4Bc+7dhOv4sJlgvenK4fQNqqUIlXxZYQNbfEWSALGAwGoyJd/0Qwk4TttFXUOHJ2ZJQe/52ScaUwtQ==", + "dev": true, + "dependencies": { + "bson": "^5.5.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "@mongodb-js/saslprep": "^1.1.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-memory-server-core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mongoose": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.0.4.tgz", + "integrity": "sha512-wN9qvdevX3+922VnLT7CpaZRT3jmVCBOK2QMHMGeScQxDRnFMPpkuI9StEPpZo/3x8t+kbzH7F8RMPsyNwyM4w==", + "dependencies": { + "bson": "^6.2.0", + "kareem": "2.5.1", + "mongodb": "6.2.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/new-find-package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/new-find-package-json/-/new-find-package-json-2.0.0.tgz", + "integrity": "sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/new-find-package-json/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/new-find-package-json/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "devOptional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "devOptional": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamx": { + "version": "2.15.6", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", + "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/supertest": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", + "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.1.2" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/apis/package.json b/apis/package.json new file mode 100644 index 00000000..e0cc8b03 --- /dev/null +++ b/apis/package.json @@ -0,0 +1,32 @@ +{ + "name": "usersapi", + "version": "1.0.0", + "description": "Users API", + "main": "usersapi.js", + "scripts": { + "start": "node usersapi.js", + "test": "jest" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/arquisoft/wiq_es2c.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/arquisoft/wiq_es2c/issues" + }, + "homepage": "https://github.com/arquisoft/wiq_es2c#readme", + "dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "express": "^4.18.2", + "mongoose": "^8.0.4", + "axios": "^0.21.1" + }, + "devDependencies": { + "jest": "^29.7.0", + "mongodb-memory-server": "^9.1.5", + "supertest": "^6.3.4" + } +} diff --git a/apis/user-model.js b/apis/user-model.js new file mode 100644 index 00000000..71d81b5f --- /dev/null +++ b/apis/user-model.js @@ -0,0 +1,20 @@ +const mongoose = require('mongoose'); + +const userSchema = new mongoose.Schema({ + username: { + type: String, + required: true, + }, + password: { + type: String, + required: true, + }, + createdAt: { + type: Date, + default: Date.now, + }, +}); + +const User = mongoose.model('User', userSchema); + +module.exports = User \ No newline at end of file diff --git a/apis/usersapi.js b/apis/usersapi.js new file mode 100644 index 00000000..1b0b2b47 --- /dev/null +++ b/apis/usersapi.js @@ -0,0 +1,41 @@ +const express = require('express'); +const mongoose = require('mongoose'); +const User = require('./user-model') +//import { useUser } from '../webapp/src/components/UserContext'; + +const app = express(); +const port = 8004; + +//const { usernameGlobal } = useUser(); + +app.use(express.json()); + +const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/userdb'; +mongoose.connect(mongoUri); + + +app.get('/getUser', async (req, res) => { + console.log('ENTRA A USERSAPIiiii') + const users = await User.find({}); // Busca un usuario con el nombre de usuario especificado + console.log('ENTRA A USERSAPI') + if (!users) { + return res.status(404).json({ message: 'Usuario no encontrado' }); + } + + var solution = []; + users.forEach(row => { + solution.push([row.username,row.createdAt]); + }); + + res.status(200).json(solution); +}); + +const server = app.listen(port, () => { + console.log(`Creation Service listening at http://localhost:${port}`); +}); + +server.on('close', () => { + mongoose.connection.close(); +}); + +module.exports = server; \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 9649dd55..e98cc5f9 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -52,6 +52,20 @@ services: - mynetwork environment: MONGODB_URI: mongodb://mongodb:27017/userdb + + usersapi: + container_name: useraspi-${teamname:-defaultASW} + image: ghcr.io/arquisoft/wiq_es2c/apis/usersapi:latest + profiles: ["dev", "prod"] + build: ./apis + depends_on: + - mongodb + ports: + - "8004:8004" + networks: + - mynetwork + environment: + MONGODB_URI: mongodb://mongodb:27017/userdb gatewayservice: container_name: gatewayservice-${teamname:-defaultASW} @@ -63,6 +77,7 @@ services: - userservice - authservice - questiongenerator + - usersapi ports: - "8000:8000" networks: @@ -71,6 +86,7 @@ services: GENERATOR_SERVICE_URL: http://questiongenerator:8003 AUTH_SERVICE_URL: http://authservice:8002 USER_SERVICE_URL: http://userservice:8001 + PERFIL_SERVICE_URL: http://usersapi:8004 webapp: container_name: webapp-${teamname:-defaultASW} diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 9a0e4601..8894ef12 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -10,6 +10,9 @@ const port = 8000; const generatorUrl = process.env.GENERATOR_SERVICE_URL || 'http://localhost:8003'; const authServiceUrl = process.env.AUTH_SERVICE_URL || 'http://localhost:8002'; const userServiceUrl = process.env.USER_SERVICE_URL || 'http://localhost:8001'; +const perfilServiceUrl = process.env.PERFIL_SERVICE_URL || 'http://localhost:8004'; + + app.use(cors()); app.use(express.json()); @@ -45,7 +48,6 @@ app.post('/adduser', async (req, res) => { app.get(`/generateQuestion`, async (req, res) => { try { - // Forward the add user request to the user service const response = await axios.get(generatorUrl+'/generateQuestion', req.body); res.json(response.data); } catch (error) { @@ -53,6 +55,18 @@ app.get(`/generateQuestion`, async (req, res) => { } }); +app.get('/getUser', async (req, res) => { + try { + console.log('SRE LLAMAAAA'); + const perfilResponse = await axios.get(perfilServiceUrl+'/getUser', req.body); + console.log('dsdsdsd'+ perfilResponse); + // Return a json response with what we obtained on the petition + res.json(perfilResponse.data); + } catch (error) { + console.log(error) + } +}); + // Start the gateway service const server = app.listen(port, () => { console.log(`Gateway Service listening at http://localhost:${port}`); diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 6342758f..0c1135ae 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -27789,4 +27789,4 @@ } } } -} \ No newline at end of file +} diff --git a/webapp/src/components/PantallaInicio.js b/webapp/src/components/PantallaInicio.js index a3fe0805..171439db 100644 --- a/webapp/src/components/PantallaInicio.js +++ b/webapp/src/components/PantallaInicio.js @@ -18,6 +18,10 @@ const PantallaInicio = () => { navigate("/Partida") } + const handleShowPerfil = () => { + navigate("/Perfil"); + }; + const logoutUser = async () => { try { setLoginSuccess(false); @@ -59,7 +63,7 @@ const PantallaInicio = () => { Imagen historico - diff --git a/webapp/src/components/Perfil.js b/webapp/src/components/Perfil.js new file mode 100644 index 00000000..44f440f8 --- /dev/null +++ b/webapp/src/components/Perfil.js @@ -0,0 +1,65 @@ +import axios from 'axios'; +import React, { useState} from 'react'; +import { useNavigate} from 'react-router-dom'; +import { Container, Button} from '@mui/material'; + +const Perfil = () => { + + const navigate = useNavigate(); + const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; + + const [user, setUser] = useState([]); + + const handleShowUser = async () => { + try{ + // It makes a petition to the api and store the response + const response = await axios.get(`${apiEndpoint}/getUser`, { }); + console.log(response) + setUser(response.data); + }catch (error){ + console.error('Error:', error); + } + } + + const handlePreviousPage = async () => { + navigate('/PantallaInicio'); + } + + return ( + + + +
+ + + +
+
+ + + + + + + + + {user.map((row, rowIndex) => ( + + {row.map((cell, cellIndex) => ( + + ))} + + ))} + +
UsuarioCreado en
{cell}
+
+
+ + ); +}; + +export default Perfil; \ No newline at end of file diff --git a/webapp/src/index.js b/webapp/src/index.js index f4338638..e4eb69de 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -15,6 +15,7 @@ import PantallaInicio from './components/PantallaInicio'; import Partida from './components/Partida'; import Login from './components/Login'; import AddUser from './components/AddUser'; +import Perfil from './components/Perfil'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( @@ -28,6 +29,7 @@ root.render( } /> } /> } /> + }> From ad08a6bea1da2737e6e0eb17d0a3a54a8dbb5f84 Mon Sep 17 00:00:00 2001 From: Angela Date: Mon, 8 Apr 2024 15:48:09 +0200 Subject: [PATCH 02/43] perfil d usuario esta la bbdd sin actualizar --- apis/Dockerfile | 2 +- apis/user-model.js | 4 ++ apis/usersapi.js | 29 ++++----- docker-compose.yml | 4 +- gatewayservice/gateway-service.js | 9 ++- webapp/src/components/Perfil.js | 102 ++++++++++++++++++------------ 6 files changed, 86 insertions(+), 64 deletions(-) diff --git a/apis/Dockerfile b/apis/Dockerfile index bcff07c0..91163d7c 100644 --- a/apis/Dockerfile +++ b/apis/Dockerfile @@ -14,7 +14,7 @@ RUN npm install COPY . . # Expose the port the app runs on -EXPOSE 8004 +EXPOSE 8005 # Define the command to run your app CMD ["node", "usersapi.js"] diff --git a/apis/user-model.js b/apis/user-model.js index 71d81b5f..2577b0e2 100644 --- a/apis/user-model.js +++ b/apis/user-model.js @@ -5,6 +5,10 @@ const userSchema = new mongoose.Schema({ type: String, required: true, }, + email: { + type: String, + required: true, + }, password: { type: String, required: true, diff --git a/apis/usersapi.js b/apis/usersapi.js index 1b0b2b47..337c3ac7 100644 --- a/apis/usersapi.js +++ b/apis/usersapi.js @@ -1,12 +1,9 @@ const express = require('express'); const mongoose = require('mongoose'); const User = require('./user-model') -//import { useUser } from '../webapp/src/components/UserContext'; const app = express(); -const port = 8004; - -//const { usernameGlobal } = useUser(); +const port = 8005; app.use(express.json()); @@ -15,19 +12,21 @@ mongoose.connect(mongoUri); app.get('/getUser', async (req, res) => { - console.log('ENTRA A USERSAPIiiii') - const users = await User.find({}); // Busca un usuario con el nombre de usuario especificado - console.log('ENTRA A USERSAPI') - if (!users) { - return res.status(404).json({ message: 'Usuario no encontrado' }); - } + try{ - var solution = []; - users.forEach(row => { - solution.push([row.username,row.createdAt]); - }); + var user = await User.findOne({ username:req.query.username}); - res.status(200).json(solution); + var response = { + username: user.username, + email: user.email, + creado: user.createdAt + }; + res.json(response); + + } catch (error) { + console.error('Error al buscar el usuario:', error); + res.status(500).json({ message: 'Error interno del servidor' }); + } }); const server = app.listen(port, () => { diff --git a/docker-compose.yml b/docker-compose.yml index e98cc5f9..2ae52225 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -61,7 +61,7 @@ services: depends_on: - mongodb ports: - - "8004:8004" + - "8005:8005" networks: - mynetwork environment: @@ -86,7 +86,7 @@ services: GENERATOR_SERVICE_URL: http://questiongenerator:8003 AUTH_SERVICE_URL: http://authservice:8002 USER_SERVICE_URL: http://userservice:8001 - PERFIL_SERVICE_URL: http://usersapi:8004 + PERFIL_SERVICE_URL: http://usersapi:8005 webapp: container_name: webapp-${teamname:-defaultASW} diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 8894ef12..95b266c9 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -10,7 +10,7 @@ const port = 8000; const generatorUrl = process.env.GENERATOR_SERVICE_URL || 'http://localhost:8003'; const authServiceUrl = process.env.AUTH_SERVICE_URL || 'http://localhost:8002'; const userServiceUrl = process.env.USER_SERVICE_URL || 'http://localhost:8001'; -const perfilServiceUrl = process.env.PERFIL_SERVICE_URL || 'http://localhost:8004'; +const perfilServiceUrl = process.env.PERFIL_SERVICE_URL || 'http://localhost:8005'; @@ -57,10 +57,9 @@ app.get(`/generateQuestion`, async (req, res) => { app.get('/getUser', async (req, res) => { try { - console.log('SRE LLAMAAAA'); - const perfilResponse = await axios.get(perfilServiceUrl+'/getUser', req.body); - console.log('dsdsdsd'+ perfilResponse); - // Return a json response with what we obtained on the petition + const URL = perfilServiceUrl + '/getUser?username=' + req.query.username; + const perfilResponse = await axios.get(URL); + console.log(req.query.username) res.json(perfilResponse.data); } catch (error) { console.log(error) diff --git a/webapp/src/components/Perfil.js b/webapp/src/components/Perfil.js index 44f440f8..c4da386b 100644 --- a/webapp/src/components/Perfil.js +++ b/webapp/src/components/Perfil.js @@ -1,64 +1,84 @@ import axios from 'axios'; -import React, { useState} from 'react'; +import React, { useState, useEffect, useCallback } from 'react'; import { useNavigate} from 'react-router-dom'; -import { Container, Button} from '@mui/material'; +import { Container, Typography, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, Paper, Snackbar } from '@mui/material'; +import { useUser } from './UserContext'; const Perfil = () => { const navigate = useNavigate(); const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; + const { usernameGlobal } = useUser(); + const [user, setUser] = useState([]); + const [error, setError] = useState(''); - const handleShowUser = async () => { - try{ - // It makes a petition to the api and store the response - const response = await axios.get(`${apiEndpoint}/getUser`, { }); - console.log(response) - setUser(response.data); - }catch (error){ - console.error('Error:', error); - } - } const handlePreviousPage = async () => { navigate('/PantallaInicio'); } + const getPerfil = useCallback(async () => { + try { + const response = await axios.get(`${apiEndpoint}/getUser`,{ + params: { + username: usernameGlobal + } + }); + console.log(response); + setUser(response.data); + } catch (error) { + setError(error.response.data.error); + } + }, [usernameGlobal]) + + useEffect(() => { + getPerfil(); + }, [getPerfil]); + + return ( - - + + + PERFIL + + + + + + Usuario + Email + Creado + + + + + {user.username} + {user.email} + {user.createdAt} + + +
+
- - - -
-
- - - - - - - - - {user.map((row, rowIndex) => ( - - {row.map((cell, cellIndex) => ( - - ))} - - ))} - -
UsuarioCreado en
{cell}
+ {error && ( + setError('')} message={`Error: ${error}`} /> + )}
- ); }; From f3aa0cdcd5a01333240e9cf30904539a0d25ccde Mon Sep 17 00:00:00 2001 From: David Date: Tue, 9 Apr 2024 02:50:11 +0200 Subject: [PATCH 03/43] =?UTF-8?q?A=C3=B1adido=20por=20error=20archivo=20ob?= =?UTF-8?q?soleto?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- questiongenerator/generator.js | 105 --------------------------------- 1 file changed, 105 deletions(-) delete mode 100644 questiongenerator/generator.js diff --git a/questiongenerator/generator.js b/questiongenerator/generator.js deleted file mode 100644 index ac801d0a..00000000 --- a/questiongenerator/generator.js +++ /dev/null @@ -1,105 +0,0 @@ -const WikiDataService = () =>{ - - const [questionData, setQuestionData] = useState(null); - - useEffect(() => { - - const fecthQuestionData = async () => { - - try{ - - const query = 'SELECT ?country ?countryLabel ?capital ?capitalLabel ' + - 'WHERE {' + - '?country wdt:P31 wd:Q6256. ' + - 'wdt:P36 ?capital.' + - 'SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". }' + - '}'; - - const api='https://query.wikidata.org/sparql'; - - const response = await fetch(`${api}?query=~{encodeURIComponent(query)}&format=json`) - - if (!response.ok) { - throw new Error('Error al realizar la solicitud'); - } - - const data = await response.json(); - - }catch(error){ - console.error('Error al realizar la solicitud:', error); - } - - }; - - const processData = (data) => { - - const countries = data.result.bindings; - const randomCountries = []; - const capitals = []; - - for(var i=0; i<4; i++) { - var pos = Math.floor(Math.random() * teams.length); - var teamLabel = teams[pos].teamLabel.value; - var fieldLabel = teams[pos].fieldLabel.value; - - if((!randomTeams.includes(teamLabel) && !teamsFields.includes(fieldLabel)) - && !teamLabel.startsWith("Q") && !(fieldLabel.startsWith("Q") || fieldLabel.startsWith("http") )) { - randomTeams.push(teamLabel); - teamsFields.push(fieldLabel); - } else { - i--; - } - } - - var num = Math.floor(Math.random() * 4); - var country = randomCountries[num]; - var capital = capitals[num]; - - setQuestionData({ - - question: `¿Cuál es la capital de ${country}?`, - answers: fields, - correctAnswer: capital - - - }); - - } - - const saveData = () => { - try { - - - const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/userdb'; - mongoose.connect(mongoUri); - - var fields = questionData.answers; - var correct_answer = questionData.correctAnswer; - var false_options = []; - for (var i = 0; i < 4; i++) { - if (fields[i] != correct_answer) { - false_options[i] = fiels[i]; - } - } - - const newQuestion = new Question({ - enunciado: questionData.question, - respuesta_correcta: correct_answer, - respuesta_falsa1: false_options[0], - respuesta_falsa2: false_options[1], - respuesta_falsa3: false_options[2] - }); - - newQuestion.save(); - }catch (error) { - console.error('Error en el guardado de datos:', error); - } - } - - fecthQuestionData(); - saveData(); - - }, []); - - return questionData; -}; \ No newline at end of file From a2fd436a5113a33998ccf6dcf99f1447edd5bb73 Mon Sep 17 00:00:00 2001 From: UO288559 Date: Tue, 9 Apr 2024 17:23:01 +0200 Subject: [PATCH 04/43] =?UTF-8?q?Soluci=C3=B3n=20bug=20registro=20sin=20co?= =?UTF-8?q?ntrase=C3=B1a=20+=20a=C3=B1adidos=20requisitos=20en=20email=20y?= =?UTF-8?q?=20contrase=C3=B1a.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamehistoryservice/package-lock.json | 55 +++++----------------------- gamehistoryservice/package.json | 6 +-- users/userservice/user-service.js | 19 ++++++++++ webapp/package-lock.json | 32 ++++++++++++++-- 4 files changed, 60 insertions(+), 52 deletions(-) diff --git a/gamehistoryservice/package-lock.json b/gamehistoryservice/package-lock.json index 2d8e785d..82e8d1a4 100644 --- a/gamehistoryservice/package-lock.json +++ b/gamehistoryservice/package-lock.json @@ -12,7 +12,7 @@ "axios": "^0.21.1", "bcrypt": "^5.1.1", "body-parser": "^1.20.2", - "express": "^4.18.2", + "express": "^4.19.2", "mongoose": "^8.0.4" }, "devDependencies": { @@ -1906,9 +1906,9 @@ "dev": true }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", "engines": { "node": ">= 0.6" } @@ -2208,16 +2208,16 @@ } }, "node_modules/express": { - "version": "4.18.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", - "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.1", + "body-parser": "1.20.2", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.5.0", + "cookie": "0.6.0", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", @@ -2248,43 +2248,6 @@ "node": ">= 0.10.0" } }, - "node_modules/express/node_modules/body-parser": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", - "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/express/node_modules/raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, "node_modules/fast-fifo": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", diff --git a/gamehistoryservice/package.json b/gamehistoryservice/package.json index f6cd5280..6b8a243b 100644 --- a/gamehistoryservice/package.json +++ b/gamehistoryservice/package.json @@ -18,11 +18,11 @@ }, "homepage": "https://github.com/arquisoft/wiq_es2c#readme", "dependencies": { + "axios": "^0.21.1", "bcrypt": "^5.1.1", "body-parser": "^1.20.2", - "express": "^4.18.2", - "mongoose": "^8.0.4", - "axios": "^0.21.1" + "express": "^4.19.2", + "mongoose": "^8.0.4" }, "devDependencies": { "jest": "^29.7.0", diff --git a/users/userservice/user-service.js b/users/userservice/user-service.js index 857d3271..369f6239 100644 --- a/users/userservice/user-service.js +++ b/users/userservice/user-service.js @@ -24,10 +24,29 @@ function validateRequiredFields(req, requiredFields) { } } +function validateRequiredFieldsContent(username,email,password){ + if(username.trim().length === 0 || email.trim().length === 0 || password.trim().length === 0 ){ + throw new Error(`Los campos no pueden estar vacíos`); + }else{ + + const regex = /@gmail\.com$/; + if(!regex.test(email)){ + throw new Error(`El email debe acabar con @gmail.com`); + }else{ + + if(password.trim().length < 8){ + throw new Error(`La contraseña debe tener al menos 8 caracteres`); + } + + } + } +} + app.post('/adduser', async (req, res) => { try { // Check if required fields are present in the request body validateRequiredFields(req, ['username', 'email','password']); + validateRequiredFieldsContent(req.body.username,req.body.email,req.body.password); const { username,email, password } = req.body; const user_Username = await User.findOne({ username }); const user_Email = await User.findOne({ email }); diff --git a/webapp/package-lock.json b/webapp/package-lock.json index 0c1135ae..69590fe3 100644 --- a/webapp/package-lock.json +++ b/webapp/package-lock.json @@ -10,6 +10,7 @@ "dependencies": { "@emotion/react": "^11.11.3", "@emotion/styled": "^11.11.0", + "@mui/icons-material": "^5.15.15", "@mui/material": "^5.15.3", "@testing-library/jest-dom": "^5.17.0", "@testing-library/react": "^14.1.2", @@ -1969,9 +1970,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.23.7", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.7.tgz", - "integrity": "sha512-w06OXVOFso7LcbzMiDGt+3X7Rh7Ho8MmgPoWU3rarH+8upf+wSU/grlGbWzQyr3DkdN6ZeuMFjpdwW0Q+HxobA==", + "version": "7.24.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.4.tgz", + "integrity": "sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -4563,6 +4564,31 @@ "url": "https://opencollective.com/mui-org" } }, + "node_modules/@mui/icons-material": { + "version": "5.15.15", + "resolved": "https://registry.npmjs.org/@mui/icons-material/-/icons-material-5.15.15.tgz", + "integrity": "sha512-kkeU/pe+hABcYDH6Uqy8RmIsr2S/y5bP2rp+Gat4CcRjCcVne6KudS1NrZQhUCRysrTDCAhcbcf9gt+/+pGO2g==", + "dependencies": { + "@babel/runtime": "^7.23.9" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mui-org" + }, + "peerDependencies": { + "@mui/material": "^5.0.0", + "@types/react": "^17.0.0 || ^18.0.0", + "react": "^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, "node_modules/@mui/material": { "version": "5.15.3", "resolved": "https://registry.npmjs.org/@mui/material/-/material-5.15.3.tgz", From d9d81e5f0aa464cac9f5a8c7bc408b8c1c4044af Mon Sep 17 00:00:00 2001 From: UO288559 Date: Tue, 9 Apr 2024 18:34:33 +0200 Subject: [PATCH 05/43] =?UTF-8?q?A=C3=B1adida=20pantalla=20para=20configur?= =?UTF-8?q?ar=20los=20par=C3=A1metros.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/src/components/GameConfiguration.js | 101 +++++++++++++++++++++ webapp/src/components/PantallaInicio.js | 2 +- webapp/src/index.js | 2 + 3 files changed, 104 insertions(+), 1 deletion(-) create mode 100644 webapp/src/components/GameConfiguration.js diff --git a/webapp/src/components/GameConfiguration.js b/webapp/src/components/GameConfiguration.js new file mode 100644 index 00000000..7b6732dc --- /dev/null +++ b/webapp/src/components/GameConfiguration.js @@ -0,0 +1,101 @@ +// src/components/AddUser.js +import React, { useState } from 'react'; +import axios from 'axios'; +import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; +import '../App.css'; + +const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; + +const GameConfiguration = () => { + const [openSnackbar, setOpenSnackbar] = useState(false); + const [error, setError] = useState(''); + const [snackbarMessage, setSnackbarMessage] = useState(''); + + const maxTime = 60; + const [valueTime, setValueTime] = useState(30); + + const maxQuestions = 30; + const [valueQuestion, setValueQuestion] = useState(5); + const handleCloseSnackbar = () => { + setOpenSnackbar(false); + }; + + const handleChangeTime = (event) => { + let inputValue = parseInt(event.target.value); + + if (!isNaN(inputValue) && inputValue >= 0) { + + inputValue = Math.min(inputValue, maxTime); + setValueTime(inputValue); + } + }; + + const handleChangeQuestions = (event) => { + let inputValue = parseInt(event.target.value); + + if (!isNaN(inputValue) && inputValue >= 0) { + + inputValue = Math.min(inputValue, maxQuestions); + setValueQuestion(inputValue); + } + }; + + return ( + + + Configuración de la partida + + + + + + {error && ( + setError('')} message={`Error: ${error}`} /> + )} + + ); +}; + +export default GameConfiguration; diff --git a/webapp/src/components/PantallaInicio.js b/webapp/src/components/PantallaInicio.js index c3c2ad3f..be3bcc50 100644 --- a/webapp/src/components/PantallaInicio.js +++ b/webapp/src/components/PantallaInicio.js @@ -16,7 +16,7 @@ const PantallaInicio = () => { const navigate = useNavigate(); function nuevaPartida() { - navigate("/Game"); + navigate("/GameConfiguration"); } const handleCloseSnackbar = () => { diff --git a/webapp/src/index.js b/webapp/src/index.js index 49bb1d72..451b2cc2 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -18,6 +18,7 @@ import AddUser from './components/AddUser'; import Game from './components/Game'; import Gamehistory from './components/Gamehistory'; import Ranking from './components/Ranking'; +import GameConfiguration from './components/GameConfiguration'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( @@ -34,6 +35,7 @@ root.render( } /> } /> } /> + } /> From 610e76f1557c8abcf19ec9f8e216d6cea7ae494c Mon Sep 17 00:00:00 2001 From: UO288559 Date: Tue, 9 Apr 2024 19:20:54 +0200 Subject: [PATCH 06/43] =?UTF-8?q?A=C3=B1adido=20el=20endPoint=20para=20mod?= =?UTF-8?q?ificar=20el=20n=C3=BAmero=20de=20preguntas=20de=20la=20partida.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gatewayservice/gateway-service.js | 10 ++++++++++ questiongenerator/question.js | 18 +++++++++++++++++- 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 8c7e2ed7..9c0a2a20 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -77,6 +77,16 @@ app.post('/saveGameHistory', async (req, res) => { } }); +app.post('/configureGame', async (req, res) => { + console.log("Llega al gateway"); + try { + const response = await axios.post(generatorUrl+'/configureGame', req.body); + res.json(response.data); + } catch (error) { + res.status(error.response.status).json({ error: error.response.data.error }); + } +}); + app.get('/gamehistory', async (req, res) => { try { const URL = gamehistoryUrl + '/gamehistory?username=' + req.query.username; diff --git a/questiongenerator/question.js b/questiongenerator/question.js index ec2dfd84..8990192b 100644 --- a/questiongenerator/question.js +++ b/questiongenerator/question.js @@ -43,6 +43,8 @@ var numberOfQuestions = 0; // Número aleatorio que decide la consulta y la pregunta que se mostrarán var randomNumber; +var maxQuestions = 5; + const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/questiondb'; mongoose.connect(mongoUri); @@ -54,7 +56,7 @@ app.get('/generateQuestion', async (req, res) => { const user = req.query.user; await generarPregunta(); numberOfQuestions++; - if(numberOfQuestions>=5){ + if(numberOfQuestions>=maxQuestions){ numberOfQuestions = 0; } var id = await saveData(); @@ -76,10 +78,24 @@ app.get('/generateQuestion', async (req, res) => { } }); +app.post('/configureGame', async (req, res) => { + console.log("Llega al question"); + try { + maxQuestions = req.body.valueQuestion; + console.log("HI?"); + res.status(200).json(maxQuestions); + } catch (error) { + console.log("Error: " + error) + res.status(400).json({ error: error.message }); + } +}); + var server = app.listen(port, () => { console.log(`Questions Generation Service listening at http://localhost:${port}`); }); + + async function generarPregunta() { randomNumber = Math.floor(Math.random() * 2); try { From 6e6fd096936c1d643676f636399c3ff590efc446 Mon Sep 17 00:00:00 2001 From: UO288559 Date: Tue, 9 Apr 2024 19:30:36 +0200 Subject: [PATCH 07/43] Paso de valores a Game.js y llamada al endpoint --- webapp/src/components/Game.js | 13 ++++++++++--- webapp/src/components/GameConfiguration.js | 18 ++++++++++++++++-- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/webapp/src/components/Game.js b/webapp/src/components/Game.js index b4f76bd9..7942eb64 100644 --- a/webapp/src/components/Game.js +++ b/webapp/src/components/Game.js @@ -2,7 +2,7 @@ import React, { useState, useEffect, useCallback } from 'react'; import axios from 'axios'; import LinearProgress from '@mui/material/LinearProgress'; import { Container, Typography, Button, Snackbar } from '@mui/material'; -import { useNavigate } from 'react-router-dom'; +import { useNavigate, useLocation } from 'react-router-dom'; import { useUser } from './UserContext'; import '../App.css'; @@ -22,11 +22,18 @@ const Game = () => { const [answeredQuestions,setAnsweredQuestions] = useState(0); const [isTimeRunning, setIsTimeRunning] = useState(true); + + // Comentario de prueba para el despliegue - const MAX_TIME = 30; - const MAX_PREGUNTAS = 5; + + const location = useLocation(); + + const MAX_TIME = location.state ? location.state.time : null; + const MAX_PREGUNTAS = location.state ? location.state.question : null; const navigate = useNavigate(); + + const getQuestion = useCallback(async () => { try { const response = await axios.get(`${apiEndpoint}/generateQuestion`, { diff --git a/webapp/src/components/GameConfiguration.js b/webapp/src/components/GameConfiguration.js index 7b6732dc..49298c16 100644 --- a/webapp/src/components/GameConfiguration.js +++ b/webapp/src/components/GameConfiguration.js @@ -1,12 +1,14 @@ // src/components/AddUser.js import React, { useState } from 'react'; import axios from 'axios'; +import { useNavigate} from 'react-router-dom'; import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; import '../App.css'; const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; const GameConfiguration = () => { + const navigate = useNavigate(); const [openSnackbar, setOpenSnackbar] = useState(false); const [error, setError] = useState(''); const [snackbarMessage, setSnackbarMessage] = useState(''); @@ -40,6 +42,17 @@ const GameConfiguration = () => { } }; + const configureAndStart = async () => { + try { + await axios.post(`${apiEndpoint}/configureGame`, {valueTime, valueQuestion}); + navigate("/Game", {state: {time: valueTime, question:valueQuestion}}); + console.log("HUH"); + } catch (error) { + setError(error.response.data.error); + setOpenSnackbar(true); + } + }; + return ( { max: 60, }} /> - {error && ( From d5337bf17efed76472f9d0cc81632175c02e54c5 Mon Sep 17 00:00:00 2001 From: UO288559 Date: Tue, 9 Apr 2024 19:32:41 +0200 Subject: [PATCH 08/43] =?UTF-8?q?Eliminados=20console.logs=20de=20depuraci?= =?UTF-8?q?=C3=B3n.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gatewayservice/gateway-service.js | 1 - questiongenerator/question.js | 2 -- webapp/src/components/GameConfiguration.js | 1 - 3 files changed, 4 deletions(-) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 9c0a2a20..f0f2b0d6 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -78,7 +78,6 @@ app.post('/saveGameHistory', async (req, res) => { }); app.post('/configureGame', async (req, res) => { - console.log("Llega al gateway"); try { const response = await axios.post(generatorUrl+'/configureGame', req.body); res.json(response.data); diff --git a/questiongenerator/question.js b/questiongenerator/question.js index 8990192b..0c4c03f9 100644 --- a/questiongenerator/question.js +++ b/questiongenerator/question.js @@ -79,10 +79,8 @@ app.get('/generateQuestion', async (req, res) => { }); app.post('/configureGame', async (req, res) => { - console.log("Llega al question"); try { maxQuestions = req.body.valueQuestion; - console.log("HI?"); res.status(200).json(maxQuestions); } catch (error) { console.log("Error: " + error) diff --git a/webapp/src/components/GameConfiguration.js b/webapp/src/components/GameConfiguration.js index 49298c16..a9ab351a 100644 --- a/webapp/src/components/GameConfiguration.js +++ b/webapp/src/components/GameConfiguration.js @@ -46,7 +46,6 @@ const GameConfiguration = () => { try { await axios.post(`${apiEndpoint}/configureGame`, {valueTime, valueQuestion}); navigate("/Game", {state: {time: valueTime, question:valueQuestion}}); - console.log("HUH"); } catch (error) { setError(error.response.data.error); setOpenSnackbar(true); From 5a0f381366f9b5d15afb9d6a422583b56e1e900a Mon Sep 17 00:00:00 2001 From: UO288559 Date: Tue, 9 Apr 2024 19:33:46 +0200 Subject: [PATCH 09/43] =?UTF-8?q?Modificaci=C3=B3n=20del=20m=C3=ADnimo=20d?= =?UTF-8?q?e=20preguntas=20permitidad.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/src/components/GameConfiguration.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/webapp/src/components/GameConfiguration.js b/webapp/src/components/GameConfiguration.js index a9ab351a..b9619e6b 100644 --- a/webapp/src/components/GameConfiguration.js +++ b/webapp/src/components/GameConfiguration.js @@ -79,7 +79,7 @@ const GameConfiguration = () => { inputProps={{ inputMode: 'numeric', pattern: '[0-9]*', - min: 5, + min: 1, max: 30, }} /> From 016de103691bbdfcb1c0e2f36333357116df9997 Mon Sep 17 00:00:00 2001 From: Angela Date: Sat, 13 Apr 2024 21:57:54 +0200 Subject: [PATCH 10/43] perfil hecho --- docker-compose.yml | 12 ++++++------ gatewayservice/gateway-service.js | 2 +- {apis => perfilservice}/Dockerfile | 4 ++-- {apis => perfilservice}/package-lock.json | 4 ++-- {apis => perfilservice}/package.json | 8 ++++---- apis/usersapi.js => perfilservice/perfil-api.js | 15 ++++++++++++++- {apis => perfilservice}/user-model.js | 0 webapp/src/components/NavigationBar.js | 10 +++++++--- webapp/src/components/Perfil.js | 4 ++-- webapp/src/index.js | 3 +++ 10 files changed, 41 insertions(+), 21 deletions(-) rename {apis => perfilservice}/Dockerfile (86%) rename {apis => perfilservice}/package-lock.json (99%) rename {apis => perfilservice}/package.json (83%) rename apis/usersapi.js => perfilservice/perfil-api.js (62%) rename {apis => perfilservice}/user-model.js (100%) diff --git a/docker-compose.yml b/docker-compose.yml index d5c5b4c8..2738e8de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -75,11 +75,11 @@ services: environment: MONGODB_URI: mongodb://mongodb:27017/userdb - usersapi: - container_name: useraspi-${teamname:-defaultASW} - image: ghcr.io/arquisoft/wiq_es2c/apis/usersapi:latest + perfilservice: + container_name: perfilservice-${teamname:-defaultASW} + image: ghcr.io/arquisoft/wiq_es2c/perfilservice/perfil-api:latest profiles: ["dev", "prod"] - build: ./apis + build: ./perfilservice depends_on: - mongodb ports: @@ -101,7 +101,7 @@ services: - userservice - authservice - questiongenerator - - usersapi + - perfilservice - gamehistoryservice ports: - "8000:8000" @@ -112,7 +112,7 @@ services: GENERATOR_SERVICE_URL: http://questiongenerator:8003 AUTH_SERVICE_URL: http://authservice:8002 USER_SERVICE_URL: http://userservice:8001 - PERFIL_SERVICE_URL: http://usersapi:8005 + PERFIL_SERVICE_URL: http://perfilservice:8005 webapp: container_name: webapp-${teamname:-defaultASW} diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index c069b32c..defb1a9d 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -94,7 +94,7 @@ app.get('/getUser', async (req, res) => { try { const URL = perfilServiceUrl + '/getUser?username=' + req.query.username; const perfilResponse = await axios.get(URL); - console.log(req.query.username) + console.log(perfilResponse) res.json(perfilResponse.data); } catch (error) { console.log(error) diff --git a/apis/Dockerfile b/perfilservice/Dockerfile similarity index 86% rename from apis/Dockerfile rename to perfilservice/Dockerfile index 91163d7c..997b1fe3 100644 --- a/apis/Dockerfile +++ b/perfilservice/Dockerfile @@ -2,7 +2,7 @@ FROM node:20 # Set the working directory in the container -WORKDIR /usr/src/apis +WORKDIR /usr/src/perfilservice # Copy package.json and package-lock.json to the working directory COPY package*.json ./ @@ -17,4 +17,4 @@ COPY . . EXPOSE 8005 # Define the command to run your app -CMD ["node", "usersapi.js"] +CMD ["node", "perfil-api.js"] diff --git a/apis/package-lock.json b/perfilservice/package-lock.json similarity index 99% rename from apis/package-lock.json rename to perfilservice/package-lock.json index 49f64b60..9480ebb5 100644 --- a/apis/package-lock.json +++ b/perfilservice/package-lock.json @@ -1,11 +1,11 @@ { - "name": "usersapi", + "name": "perfil-api", "version": "1.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "usersapi", + "name": "perfil-api", "version": "1.0.0", "license": "ISC", "dependencies": { diff --git a/apis/package.json b/perfilservice/package.json similarity index 83% rename from apis/package.json rename to perfilservice/package.json index e0cc8b03..98b1a9f4 100644 --- a/apis/package.json +++ b/perfilservice/package.json @@ -1,10 +1,10 @@ { - "name": "usersapi", + "name": "perfil-api", "version": "1.0.0", - "description": "Users API", - "main": "usersapi.js", + "description": "Perfil API", + "main": "perfil-api.js", "scripts": { - "start": "node usersapi.js", + "start": "node perfil-api.js", "test": "jest" }, "repository": { diff --git a/apis/usersapi.js b/perfilservice/perfil-api.js similarity index 62% rename from apis/usersapi.js rename to perfilservice/perfil-api.js index 337c3ac7..ad7ad807 100644 --- a/apis/usersapi.js +++ b/perfilservice/perfil-api.js @@ -1,15 +1,27 @@ const express = require('express'); const mongoose = require('mongoose'); const User = require('./user-model') +const bodyParser = require('body-parser'); const app = express(); const port = 8005; -app.use(express.json()); +const originEndpoint = process.env.REACT_APP_API_ORIGIN_ENDPOINT || 'http://localhost:3000'; const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/userdb'; mongoose.connect(mongoUri); +// Middleware to parse JSON in request body +app.use(bodyParser.json()); + +app.use((req, res, next) => { + res.setHeader('Access-Control-Allow-Origin', originEndpoint); + res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); + res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); + res.setHeader('Access-Control-Allow-Credentials', true); + next(); +}); + app.get('/getUser', async (req, res) => { try{ @@ -22,6 +34,7 @@ app.get('/getUser', async (req, res) => { creado: user.createdAt }; res.json(response); + } catch (error) { console.error('Error al buscar el usuario:', error); diff --git a/apis/user-model.js b/perfilservice/user-model.js similarity index 100% rename from apis/user-model.js rename to perfilservice/user-model.js diff --git a/webapp/src/components/NavigationBar.js b/webapp/src/components/NavigationBar.js index e8ebe19a..c11dd022 100644 --- a/webapp/src/components/NavigationBar.js +++ b/webapp/src/components/NavigationBar.js @@ -23,6 +23,10 @@ const NavigationBar = () => { navigate("/Gamehistory") }; + const showPerfil = () => { + navigate("/Perfil") + }; + const showLogout = () => { try { setUsernameGlobal(''); @@ -37,7 +41,7 @@ const NavigationBar = () => { return null; // Si no estás en / o /App, no muestra la barra de navegación } - return ( + return ( {/* Columna izquierda */} @@ -48,7 +52,7 @@ const NavigationBar = () => { - @@ -60,7 +64,7 @@ const NavigationBar = () => { - ); + ); }; export default NavigationBar; \ No newline at end of file diff --git a/webapp/src/components/Perfil.js b/webapp/src/components/Perfil.js index c4da386b..ea099bda 100644 --- a/webapp/src/components/Perfil.js +++ b/webapp/src/components/Perfil.js @@ -26,7 +26,7 @@ const Perfil = () => { username: usernameGlobal } }); - console.log(response); + console.log(usernameGlobal); setUser(response.data); } catch (error) { setError(error.response.data.error); @@ -68,7 +68,7 @@ const Perfil = () => { {user.username} {user.email} - {user.createdAt} + {user.creado} diff --git a/webapp/src/index.js b/webapp/src/index.js index 8e6038eb..70e9692a 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -17,6 +17,8 @@ import Login from './components/Login'; import AddUser from './components/AddUser'; import Game from './components/Game'; import Gamehistory from './components/Gamehistory'; +import Perfil from './components/Perfil'; + const root = ReactDOM.createRoot(document.getElementById('root')); root.render( @@ -32,6 +34,7 @@ root.render( } /> } /> } /> + } /> From 69ab517114dd857bfbc2b17f4c1ae4dab6c512c2 Mon Sep 17 00:00:00 2001 From: Ruben Date: Sun, 14 Apr 2024 01:18:10 +0200 Subject: [PATCH 11/43] =?UTF-8?q?A=C3=B1adidos=20servicios=20a=20Sonar=20y?= =?UTF-8?q?=20los=20endpoints=20a=20OpenAPI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gatewayservice/openapi.yaml | 271 ++++++++++++++++++++++++++++++++++++ sonar-project.properties | 2 +- 2 files changed, 272 insertions(+), 1 deletion(-) diff --git a/gatewayservice/openapi.yaml b/gatewayservice/openapi.yaml index 8075ba4b..76676322 100644 --- a/gatewayservice/openapi.yaml +++ b/gatewayservice/openapi.yaml @@ -131,6 +131,277 @@ paths: type: string description: Shows the error info.. example: Invalid credentials + '500': + description: Internal server error. + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error information. + example: Internal Server Error + /generateQuestion: + get: + summary: Generate a question. + operationId: generateQuestion + responses: + '200': + description: Generation successful. Returns the question, the options, the correct option, the image (if neccessary) and the question id + content: + application/json: + schema: + type: object + properties: + responseQuestion: + type: string + description: Question. + example: ¿Cual es la capital de España? + responseOptions: + type: array + description: Options of the question. + example: [Barcelona, Madrid, Oviedo, Valladolid] + responseCorrectOption: + type: string + description: Correct option. + example: Madrid + responseImage: + type: URL + description: URL of the image of the question if neccessary. + example: https://upload.wikimedia.org/wikipedia/commons/thumb/6/68/Joe_Biden_presidential_portrait.jpg/220px-Joe_Biden_presidential_portrait.jpg + '400': + description: Error during the question generator. + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Shows the error info. + example: numberOfQuestions is not defined + '500': + description: Internal server error. + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error information. + example: Internal Server Error + /updateQuestion: + get: + summary: Update a question. + operationId: updateQuestion + parameters: + time: + in: query + description: Time of the question. + example: 10 + required: true + schema: + type: string + correct: + in: query + description: If the question was answered correctly. + example: true + required: true + schema: + type: boolean + responses: + '200': + description: Update successful. Returns a message ans the updated question + content: + application/json: + schema: + type: object + properties: + message: + type: string + description: A message indicating the operation was succesful. + example: Tiempo de pregunta actualizado exitosamente + updatedQuestion: + type: object + description: The question updated. + example: {enunciado: ¿Cual es la capital de España?, respuesta_correcta: Madrid, respuesta_falsa1: Barcelona, respuesta_falsa2: Oviedo, respuesta_falsa3: Valladolid, + time: 10, correct: true} + '404': + description: Cannot find the question. + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Shows the error info. + example: La pregunta no fue encontrada + '400': + description: Error when update the question + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Shows the error info. + example: Cannot read property 'time' of undefined + '500': + description: Internal server error. + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error information. + example: Internal Server Error + /saveGameHistory: + post: + summary: Save the game history. + operationId: saveGameHistory + responses: + '200': + description: Succesful saving the game history + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + description: Indicates if the operation has been succesful. + example: true + '400': + description: Error when saving the game history + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Shows the error info. + example: Error al guardar el historial del juego + '500': + description: Internal server error. + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error information. + example: Internal Server Error + /configureGame: + post: + summary: Configure the game. + operationId: configureGame + responses: + '200': + description: Succesful configure the game number of questions + content: + application/json: + schema: + type: object + properties: + maxQuestions: + type: int + description: The new number of questions of the question. + example: 10 + '400': + description: Error when configuring the game + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Shows the error info. + example: Cannot read property 'valueQuestion' of undefined + '500': + description: Internal server error. + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error information. + example: Internal Server Error + /gamehistory: + get: + summary: Charge the game history. + operationId: gamehistory + parameters: + username: + in: query + description: User which game history we want to recover. + example: Pepito + required: true + schema: + type: string + responses: + '200': + description: Succesful charge the game history + '400': + description: Error when charging the game history + '500': + description: Internal server error. + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error information. + example: Internal Server Error + /topUsers: + get: + summary: Charge the top users. + operationId: topUsers + responses: + '200': + description: Succesful charge the top users + '400': + description: Error when charging the top users + '500': + description: Internal server error. + content: + application/json: + schema: + type: object + properties: + error: + type: string + description: Error information. + example: Internal Server Error + /endgamestats: + get: + summary: Charge the end game statistics. + operationId: endgamestats + parameters: + username: + in: query + description: User which game statistics we want to charge. + example: Pepito + required: true + schema: + type: string + responses: + '200': + description: Succesful charge the end game statitics + '400': + description: Error when charging the end game statistics '500': description: Internal server error. content: diff --git a/sonar-project.properties b/sonar-project.properties index 9080fe9d..d6bda32c 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -11,7 +11,7 @@ sonar.language=js sonar.projectName=wiq_es2c sonar.coverage.exclusions=**/*.test.js -sonar.sources=webapp/src/components,users/authservice,users/userservice,gatewayservice +sonar.sources=webapp/src/components,users/authservice,users/userservice,gatewayservice,gamehistoryservice,questiongenerator sonar.sourceEncoding=UTF-8 sonar.exclusions=node_modules/** sonar.javascript.lcov.reportPaths=**/coverage/lcov.info From db77892fc52671b6e27646d72d1bf5d994382edf Mon Sep 17 00:00:00 2001 From: Ruben Date: Sun, 14 Apr 2024 19:27:57 +0200 Subject: [PATCH 12/43] =?UTF-8?q?A=C3=B1adidas=20preguntas=20por=20tematic?= =?UTF-8?q?as=20al=20generador=20de=20preguntas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- questiongenerator/image_questions.js | 86 ++++++++++++++----- questiongenerator/text_questions.js | 122 ++++++++++++++++++--------- 2 files changed, 146 insertions(+), 62 deletions(-) diff --git a/questiongenerator/image_questions.js b/questiongenerator/image_questions.js index 0e2b558c..ff131639 100644 --- a/questiongenerator/image_questions.js +++ b/questiongenerator/image_questions.js @@ -1,25 +1,69 @@ // Todas las consultas -var queries = - // pregunta = Imagen de un presidente de EE.UU., opcion = Nombres de presidentes de EE.UU. - [`SELECT ?option ?optionLabel ?imageLabel - WHERE { - ?option wdt:P31 wd:Q5; - wdt:P39 wd:Q11696; - wdt:P18 ?imageLabel. - SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } - } - `, - // pregunta = Imagen de un país, opcion = Pais - `SELECT DISTINCT ?option ?optionLabel ?imageLabel - WHERE { - ?option wdt:P31 wd:Q6256; - rdfs:label ?optionLabel; - - OPTIONAL { ?option wdt:P18 ?imageLabel. } - FILTER(lang(?optionLabel) = "es") - FILTER EXISTS { ?option wdt:P18 ?imageLabel } - } - `]; +var queries = {}; + +queries['Geografia'] = + [ + // pregunta = Imagen de un país, opcion = Pais + ` + SELECT DISTINCT ?option ?optionLabel ?imageLabel + WHERE { + ?option wdt:P31 wd:Q6256; + rdfs:label ?optionLabel; + + OPTIONAL { ?option wdt:P18 ?imageLabel. } + FILTER(lang(?optionLabel) = "es") + FILTER EXISTS { ?option wdt:P18 ?imageLabel } + } + ` + ]; + +queries['Cultura'] = + [ + // pregunta = cuadro, opcion -> nombre + ` + SELECT ?optionLabel ?imageLabel + WHERE { + ?option wdt:P31 wd:Q3305213. + ?option wdt:P18 ?imageLabel. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + LIMIT 200 + ` + ]; + +queries['Personajes'] = + [ + // pregunta = imagen pintor, opcion = nombre pintor + ` + SELECT ?optionLabel ?imageLabel + WHERE { + ?option wdt:P106 wd:Q1028181; + wdt:P18 ?imageLabel. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + LIMIT 200 + `, + // pregunta = imagen futbolista, opcion = nombre futbolista + ` + SELECT ?optionLabel ?imageLabel + WHERE { + ?option wdt:P106 wd:Q937857; + wdt:P18 ?imageLabel. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + LIMIT 200 + `, + // pregunta = imagen cantante, opcion = nombre cantante + ` + SELECT ?optionLabel ?imageLabel + WHERE { + ?option wdt:P106/wdt:P279* wd:Q177220; + wdt:P18 ?imageLabel. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + LIMIT 200 + ` + ]; // Todas las preguntas, en el mismo orden que las consultas var questions = ["¿Que presidente de EE.UU es el que se muestra en la imagen?", diff --git a/questiongenerator/text_questions.js b/questiongenerator/text_questions.js index 3e353113..550a87e5 100644 --- a/questiongenerator/text_questions.js +++ b/questiongenerator/text_questions.js @@ -1,45 +1,85 @@ // Todas las consultas -var queries = - // pregunta = Pais, opcion = capitales - [`SELECT ?question ?questionLabel ?option ?optionLabel - WHERE { - ?question wdt:P31 wd:Q6256; wdt:P36 ?option. - SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } - } - LIMIT 200 - `, - // pregunta = Club de futbol, opcion = estadio - ` - SELECT ?question ?questionLabel ?option ?optionLabel - WHERE { - ?question wdt:P31 wd:Q476028. - ?question wdt:P115 ?option. - ?question wdt:P17 wd:Q29. - SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } - } - LIMIT 100 - `, - // Pregunta = Numero en la tabla periodica, opcion = Elemento - ` - SELECT ?option ?optionLabel ?questionLabel (SUBSTR(?símbolo, 1, 1) AS ?sym) - WHERE { - ?option wdt:P31 wd:Q11344; - wdt:P1086 ?questionLabel. - SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE], es". } - } - LIMIT 100 - `, - // Pregunta = Batalla historica, opcion = año - `SELECT ?question ?questionLabel ?optionLabel - WHERE { - ?question wdt:P31 wd:Q178561. - ?question wdt:P580 ?date. - FILTER (YEAR(?date) >= 1500 && YEAR(?date) <= 2000) - BIND(YEAR(?date) as ?optionLabel) - SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } - } - LIMIT 100 - `]; +var queries = {}; + +queries['Geografia'] = + [ + // pregunta = Pais, opcion = capitales + `SELECT ?question ?questionLabel ?option ?optionLabel + WHERE { + ?question wdt:P31 wd:Q6256; wdt:P36 ?option. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + LIMIT 200 + `, + // pregunta = pais, opcion = montaña + ` + SELECT ?questionLabel ?optionLabel + WHERE { + ?country wdt:P31 wd:Q6256. + ?country wdt:P610 ?mountainRange. + ?mountainRange wdt:P2044 ?elevation. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + GROUP BY ?country ?questionLabel ?optionLabel + `, + // pregunta = poblacion, opcion = pais + ` + SELECT ?optionLabel ?questionLabel + WHERE { + ?option wdt:P31 wd:Q6256. + ?option wdt:P1082 ?questionLabel. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + `] + +queries['Cultura'] = + [ + // pregunta = pelicula, opcion = director + ` + SELECT DISTINCT ?questionLabel ?optionLabel + WHERE { + ?question wdt:P31 wd:Q11424; + wdt:P57 ?option. + ?question wdt:P577 ?publicationDate. + FILTER(YEAR(?publicationDate) >= 2000) + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es. } + } + LIMIT 200 + ` + ]; + +queries['Informatica'] = + [ + // pregunta = software, opcion = fecha + ` + SELECT ?questionLabel ?optionLabel + WHERE { + ?question wdt:P31 wd:Q7397. + ?question wdt:P571 ?optionLabel. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + `, + // pregunta = sistema operativo, opcion = creador + ` + SELECT ?questionLabel ?optionLabel + WHERE { + ?question wdt:P31 wd:Q9135. + ?question wdt:P178 ?option. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + LIMIT 200 + `, + // pregunta = creador, opcion = empresa + ` + SELECT ?optionLabel ?questionLabel + WHERE { + ?option wdt:P31 wd:Q4830453. + ?option wdt:P112 ?question. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + LIMIT 200 + ` + ]; // Todas las preguntas, en el mismo orden que las consultas var questions = ["¿Cuál es la capital de ", From 55c4a13ab47e7f712c8c27746cd3a8a8eb95d049 Mon Sep 17 00:00:00 2001 From: Ruben Date: Sun, 14 Apr 2024 23:19:51 +0200 Subject: [PATCH 13/43] =?UTF-8?q?Empezada=20la=20implementaci=C3=B3n=20de?= =?UTF-8?q?=20las=20tem=C3=A1ticas?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gatewayservice/gateway-service.js | 2 +- questiongenerator/image_questions.js | 22 +++++++- questiongenerator/question.js | 64 ++++++++++++++++++---- questiongenerator/text_questions.js | 56 ++++++++++++++++--- webapp/src/components/Game.js | 10 +--- webapp/src/components/GameConfiguration.js | 19 ++++++- webapp/src/components/PantallaInicio.js | 3 +- 7 files changed, 142 insertions(+), 34 deletions(-) diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index 01013524..da529e7c 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -50,7 +50,7 @@ app.post('/adduser', async (req, res) => { app.get(`/generateQuestion`, async (req, res) => { try { // Forward the add user request to the user service - const URL = generatorUrl + '/generateQuestion?user=' + req.query.user; + const URL = generatorUrl + '/generateQuestion?user=' + req.query.user + "&thematic" + req.query.thematic; const response = await axios.get(URL); res.json(response.data); } catch (error) { diff --git a/questiongenerator/image_questions.js b/questiongenerator/image_questions.js index ff131639..2f1b3985 100644 --- a/questiongenerator/image_questions.js +++ b/questiongenerator/image_questions.js @@ -62,11 +62,29 @@ queries['Personajes'] = SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } } LIMIT 200 + `, + // pregunta = Imagen de un presidente de EE.UU., opcion = Nombres de presidentes de EE.UU. + ` + SELECT ?option ?optionLabel ?imageLabel + WHERE { + ?option wdt:P31 wd:Q5; + wdt:P39 wd:Q11696; + wdt:P18 ?imageLabel. + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } ` ]; // Todas las preguntas, en el mismo orden que las consultas -var questions = ["¿Que presidente de EE.UU es el que se muestra en la imagen?", - "¿Que país es el que aparece en la siguiente imagen?"]; +var questions = {}; + +questions['Geografia'] = ["¿Que país es el que aparece en la siguiente imagen?"]; + +questions['Cultura'] = ["¿Cuál es el nombre del siguiente cuadro?"]; + +questions['Personajes'] = ["¿Cuál es el nombre de este pintor?", + "¿Cuál es el nombre de este futbolista?", + "¿Cuál es el nombre de este cantante?", + "¿Que presidente de EE.UU es el que se muestra en la imagen?"]; module.exports = { queries, questions }; \ No newline at end of file diff --git a/questiongenerator/question.js b/questiongenerator/question.js index 0c4c03f9..279f7a93 100644 --- a/questiongenerator/question.js +++ b/questiongenerator/question.js @@ -24,12 +24,8 @@ app.use((req, res, next) => { next(); }); -var queries = []; -queries = queries.concat(textQueries); -queries = queries.concat(imagesQueries); -var questions = []; -questions = questions.concat(textQuestions); -questions = questions.concat(imagesQuestions); +var queries = getAllQueries(textQueries, imagesQueries); +var questions = getAllQueries(textQuestions, imagesQuestions); var correctOption = ""; var options = []; @@ -48,13 +44,30 @@ var maxQuestions = 5; const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/questiondb'; mongoose.connect(mongoUri); +function getAllQueries(textData, imageData) { + var results = {}; + for (var thematic in textData) { + results[thematic] = textData[thematic]; + } + + for (var thematic in imageData) { + if (results[thematic]) { + results[thematic] = results[thematic].concat(imageData[thematic]); + } else { + results[thematic] = imageData[thematic]; + } + } + + return results; +} + app.get('/generateQuestion', async (req, res) => { try { if(numberOfQuestions == 0){ gameId = null; } const user = req.query.user; - await generarPregunta(); + await generarPregunta(req.query.thematic); numberOfQuestions++; if(numberOfQuestions>=maxQuestions){ numberOfQuestions = 0; @@ -94,14 +107,34 @@ var server = app.listen(port, () => { -async function generarPregunta() { +async function generarPregunta(thematic) { + if(thematic === "Geografia") { + changeQueriesAndQuestions("Geografia"); + } else if(thematic === "Cultura") { + changeQueriesAndQuestions("Cultura"); + } else if(thematic === "Informatica") { + changeQueriesAndQuestions("Informatica"); + } else if(thematic === "Personajes") { + changeQueriesAndQuestions("Personajes"); + } + randomNumber = Math.floor(Math.random() * 2); try { // Petición a la API de WikiData - randomNumber = Math.floor(Math.random() * queries.length); + // TODO Arreglar el mismo problema que aquí pero con las preguntas + // TODO En queries y questions hay que mirar como se pueden poner todos los valores sin clave en los arrays, como estaba antes, dependiendo de la tematica + let thematics = Object.keys(queries); + randomNumber = Math.floor(Math.random() * thematics.length); + console.log("TEMATICAS: " + thematics); + let key = thematics[randomNumber]; + console.log("CLAVE: " + key); + + let thematicQueries = queries[key]; + randomNumber = Math.floor(Math.random() * thematicQueries.length); + console.log("CONSULTA: " + thematicQueries[randomNumber]); var response = await axios.get(url, { params: { - query: queries[randomNumber], + query: thematicQueries[randomNumber], format: 'json' }, headers: { @@ -118,6 +151,11 @@ async function generarPregunta() { } } +function changeQueriesAndQuestions(thematic) { + queries = queries[thematic]; + questions = questions[thematic]; +} + function procesarDatos(data) { // Hay que eliminar todos los elementos de options para que no se acumulen options = []; @@ -150,14 +188,16 @@ function procesarDatos(data) { // Escogemos un índice aleatorio como la opción correcta var correctIndex = Math.floor(Math.random() * 4); correctOption = data[randomIndexes[correctIndex]].optionLabel.value; + let thematics = Object.keys(questions); + let key = thematics[randomNumber]; if(quest == "") { - question = questions[randomNumber]; + question = questions[key]; image = data[randomIndexes[correctIndex]].imageLabel.value; } else { image = ""; questionValue = data[randomIndexes[correctIndex]].questionLabel.value; - question = questions[randomNumber] + questionValue + "?"; + question = questions[key] + questionValue + "?"; } diff --git a/questiongenerator/text_questions.js b/questiongenerator/text_questions.js index 550a87e5..045a2efb 100644 --- a/questiongenerator/text_questions.js +++ b/questiongenerator/text_questions.js @@ -24,10 +24,10 @@ queries['Geografia'] = `, // pregunta = poblacion, opcion = pais ` - SELECT ?optionLabel ?questionLabel + SELECT ?optionLabel ?question ?questionLabel WHERE { ?option wdt:P31 wd:Q6256. - ?option wdt:P1082 ?questionLabel. + ?option wdt:P1082 ?question. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } } `] @@ -45,6 +45,38 @@ queries['Cultura'] = SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es. } } LIMIT 200 + `, + // pregunta = termino, opcion = universo + ` + SELECT DISTINCT ?question ?questionLabel ?option ?optionLabel + WHERE { + { + ?term wdt:P1080 wd:Q19595297; # Relacionado con Warhammer 40000 + rdfs:label ?termLabel. + BIND("Warhammer 40000" AS ?option) + } + UNION + { + ?term wdt:P1080 wd:Q19786052; # Relacionado con Star Wars + rdfs:label ?termLabel. + BIND("Star Wars" AS ?option) + } + UNION + { + ?term wdt:P1080 wd:Q18043309; # Relacionado con Star Trek + rdfs:label ?termLabel. + BIND("Star Trek" AS ?option) + } + UNION + { + ?term wdt:P1080 wd:Q81738; # Relacionado con Legendarium + rdfs:label ?termLabel. + BIND("Legendarium" AS ?option) + } + FILTER(LANG(?termLabel) = "es") + SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } + } + LIMIT 200 ` ]; @@ -52,10 +84,10 @@ queries['Informatica'] = [ // pregunta = software, opcion = fecha ` - SELECT ?questionLabel ?optionLabel + SELECT ?questionLabel ?option ?optionLabel WHERE { ?question wdt:P31 wd:Q7397. - ?question wdt:P571 ?optionLabel. + ?question wdt:P571 ?option. SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],es". } } `, @@ -82,9 +114,17 @@ queries['Informatica'] = ]; // Todas las preguntas, en el mismo orden que las consultas -var questions = ["¿Cuál es la capital de ", - "¿En que campo juega el ", - "¿Cuál es el elemento de la tabla periódica número ", - "¿En que año ocurrio la "]; +var questions = {}; + +questions['Geografia'] = ["¿Cuál es la capital de ", + "¿Que montaña se encuentra en ", + "¿Que pais tiene una poblacion de personas de "]; + +questions['Cultura'] = ["¿Que director dirigio ", + "¿Con que universo ficticio está relacionado el siguiente término: "]; + +questions['Informatica'] = ["¿En que fecha se creó ", + "¿Quién creo el sistema opertativo ", + "¿Que empresa tecnológica fue creada por "]; module.exports = { queries, questions }; \ No newline at end of file diff --git a/webapp/src/components/Game.js b/webapp/src/components/Game.js index 7fabb36b..eaed6d94 100644 --- a/webapp/src/components/Game.js +++ b/webapp/src/components/Game.js @@ -22,23 +22,19 @@ const Game = () => { const [answeredQuestions,setAnsweredQuestions] = useState(0); const [isTimeRunning, setIsTimeRunning] = useState(true); - - - // Comentario de prueba para el despliegue - const location = useLocation(); const MAX_TIME = location.state ? location.state.time : null; const MAX_PREGUNTAS = location.state ? location.state.question : null; + const THEMATIC = location.state ? location.state.thematic : null; const navigate = useNavigate(); - - const getQuestion = useCallback(async () => { try { const response = await axios.get(`${apiEndpoint}/generateQuestion`, { params: { - user: usernameGlobal + user: usernameGlobal, + thematic: THEMATIC } }); setQuestion(response.data.responseQuestion); diff --git a/webapp/src/components/GameConfiguration.js b/webapp/src/components/GameConfiguration.js index b9619e6b..73e9326e 100644 --- a/webapp/src/components/GameConfiguration.js +++ b/webapp/src/components/GameConfiguration.js @@ -2,7 +2,7 @@ import React, { useState } from 'react'; import axios from 'axios'; import { useNavigate} from 'react-router-dom'; -import { Container, Typography, TextField, Button, Snackbar } from '@mui/material'; +import { Container, Typography, TextField, Button, Snackbar, skeletonClasses } from '@mui/material'; import '../App.css'; const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; @@ -12,6 +12,7 @@ const GameConfiguration = () => { const [openSnackbar, setOpenSnackbar] = useState(false); const [error, setError] = useState(''); const [snackbarMessage, setSnackbarMessage] = useState(''); + const [selectedOption, setSelectedOption] = useState(null); const maxTime = 60; const [valueTime, setValueTime] = useState(30); @@ -45,13 +46,17 @@ const GameConfiguration = () => { const configureAndStart = async () => { try { await axios.post(`${apiEndpoint}/configureGame`, {valueTime, valueQuestion}); - navigate("/Game", {state: {time: valueTime, question:valueQuestion}}); + navigate("/Game", {state: {time: valueTime, question:valueQuestion, thematic:selectedOption}}); } catch (error) { setError(error.response.data.error); setOpenSnackbar(true); } }; + const handleOptionSelect = (event) => { + setSelectedOption(event.target.value); + }; + return ( { max: 60, }} /> +
+ +
+ + TODOS LOS USUARIOS + + + + + + Usuario + Email + Creado + + + + {users.map((user) => ( + + {user.username} + {user.email} + {user.creado} + + ))} + +
+
+
+ {error && ( + setError('')} message={`Error: ${error}`} /> + )} +
+
+ ); +}; + +export default AllUsers; \ No newline at end of file diff --git a/webapp/src/components/NavigationBar.js b/webapp/src/components/NavigationBar.js index c11dd022..745d6d77 100644 --- a/webapp/src/components/NavigationBar.js +++ b/webapp/src/components/NavigationBar.js @@ -27,6 +27,10 @@ const NavigationBar = () => { navigate("/Perfil") }; + const showAllUsers = () => { + navigate("/AllUsers") + }; + const showLogout = () => { try { setUsernameGlobal(''); @@ -55,6 +59,9 @@ const NavigationBar = () => { + {/* Columna derecha */} diff --git a/webapp/src/components/Perfil.js b/webapp/src/components/Perfil.js index ea099bda..9c0d475b 100644 --- a/webapp/src/components/Perfil.js +++ b/webapp/src/components/Perfil.js @@ -26,7 +26,6 @@ const Perfil = () => { username: usernameGlobal } }); - console.log(usernameGlobal); setUser(response.data); } catch (error) { setError(error.response.data.error); diff --git a/webapp/src/components/images/allusers.png b/webapp/src/components/images/allusers.png new file mode 100644 index 0000000000000000000000000000000000000000..b29341a3f324a411faa00bdd28fab6567c9eddb1 GIT binary patch literal 8859 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 s@vi@~ literal 0 HcmV?d00001 diff --git a/webapp/src/index.js b/webapp/src/index.js index 70e9692a..c5b5f4d9 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -18,6 +18,7 @@ import AddUser from './components/AddUser'; import Game from './components/Game'; import Gamehistory from './components/Gamehistory'; import Perfil from './components/Perfil'; +import AllUsers from './components/AllUsers'; const root = ReactDOM.createRoot(document.getElementById('root')); @@ -35,6 +36,7 @@ root.render( } /> } /> } /> + } /> From 2be745851668182ef1331a5c1ccbe4080f064154 Mon Sep 17 00:00:00 2001 From: Angela Date: Mon, 15 Apr 2024 13:05:56 +0200 Subject: [PATCH 15/43] api preguntas --- apis/allquestionservice/Dockerfile | 20 + apis/allquestionservice/allquestions-api.js | 58 + apis/allquestionservice/home.png | Bin 0 -> 6259 bytes apis/allquestionservice/package-lock.json | 5419 +++++++++++++++++++ apis/allquestionservice/package.json | 32 + apis/allquestionservice/question-model.js | 36 + apis/alluserservice/package-lock.json | 2 +- docker-compose.yml | 16 + gatewayservice/gateway-service.js | 11 + webapp/src/components/AllQuestions.js | 81 + webapp/src/components/NavigationBar.js | 9 +- webapp/src/components/images/questions.png | Bin 0 -> 7840 bytes webapp/src/index.js | 2 + 13 files changed, 5684 insertions(+), 2 deletions(-) create mode 100644 apis/allquestionservice/Dockerfile create mode 100644 apis/allquestionservice/allquestions-api.js create mode 100644 apis/allquestionservice/home.png create mode 100644 apis/allquestionservice/package-lock.json create mode 100644 apis/allquestionservice/package.json create mode 100644 apis/allquestionservice/question-model.js create mode 100644 webapp/src/components/AllQuestions.js create mode 100644 webapp/src/components/images/questions.png diff --git a/apis/allquestionservice/Dockerfile b/apis/allquestionservice/Dockerfile new file mode 100644 index 00000000..5678a0ab --- /dev/null +++ b/apis/allquestionservice/Dockerfile @@ -0,0 +1,20 @@ +# Use an official Node.js runtime as a parent image +FROM node:20 + +# Set the working directory in the container +WORKDIR /usr/src/apis/allquestionservice + +# Copy package.json and package-lock.json to the working directory +COPY package*.json ./ + +# Install app dependencies +RUN npm install + +# Copy the app source code to the working directory +COPY . . + +# Expose the port the app runs on +EXPOSE 8007 + +# Define the command to run your app +CMD ["node", "allquestions-api.js"] diff --git a/apis/allquestionservice/allquestions-api.js b/apis/allquestionservice/allquestions-api.js new file mode 100644 index 00000000..3e7de1b4 --- /dev/null +++ b/apis/allquestionservice/allquestions-api.js @@ -0,0 +1,58 @@ +const express = require('express'); +const mongoose = require('mongoose'); +const Question = require('./question-model') +const bodyParser = require('body-parser'); + +const app = express(); +const port = 8007; + +const originEndpoint = process.env.REACT_APP_API_ORIGIN_ENDPOINT || 'http://localhost:3000'; + +const mongoUri = process.env.MONGODB_URI || 'mongodb://localhost:27017/userdb'; +mongoose.connect(mongoUri); + +// Middleware to parse JSON in request body +app.use(bodyParser.json()); + +app.use((req, res, next) => { + res.setHeader('Access-Control-Allow-Origin', originEndpoint); + res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); + res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization'); + res.setHeader('Access-Control-Allow-Credentials', true); + next(); +}); + + +app.get('/getAllQuestions', async (req, res) => { + try{ + + var questions = await Question.find({ }); + + var questionsList = []; + + questions.forEach(q => { + questionsList.push({ + enunciado: q.enunciado, + respuesta_correcta: q.respuesta_correcta + }); + }); + + // Devolver la lista completa de usuarios + res.json(questionsList); + + + } catch (error) { + console.error('No hay preguntas:', error); + res.status(500).json({ message: 'Error interno del servidor' }); + } +}); + +const server = app.listen(port, () => { + console.log(`Creation Service listening at http://localhost:${port}`); +}); + +server.on('close', () => { + mongoose.connection.close(); +}); + +module.exports = server; \ No newline at end of file diff --git a/apis/allquestionservice/home.png b/apis/allquestionservice/home.png new file mode 100644 index 0000000000000000000000000000000000000000..c40c6b2296a5a1ebeaaf9ba657b2357fafb84de0 GIT binary patch literal 6259 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.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/code-frame/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/code-frame/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/code-frame/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/code-frame/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.7.tgz", + "integrity": "sha512-6AMnjCoC8wjqBzDHkuqpa7jAKwvMo4dC+lr/TFBz+ucfulO1XMpDnwWPGBNwClOKZ8h6xn5N81W/R5OrcKtCbQ==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz", + "integrity": "sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.23.3.tgz", + "integrity": "sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", + "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", + "dev": true + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.7.0.tgz", + "integrity": "sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.7.0.tgz", + "integrity": "sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "dev": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ==", + "dev": true, + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.7.0.tgz", + "integrity": "sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.7.0.tgz", + "integrity": "sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/types": "^29.6.3", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.7.0.tgz", + "integrity": "sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "dev": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.6.3.tgz", + "integrity": "sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.7.0.tgz", + "integrity": "sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz", + "integrity": "sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.20", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", + "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.11.tgz", + "integrity": "sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.1.tgz", + "integrity": "sha512-t7c5K033joZZMspnHg/gWPE4kandgc2OxE74aYOtGKfgB9VPuVJPix0H6fhmm2erj5PBJ21mqcx34lpIGtUCsQ==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.8", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", + "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", + "dev": true + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.0.tgz", + "integrity": "sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==", + "dev": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "dev": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.5.tgz", + "integrity": "sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "dev": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/node": { + "version": "20.10.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.7.tgz", + "integrity": "sha512-fRbIKb8C/Y2lXxB5eVMj4IU7xpdox0Lh8bUPEdtLysaylsml1hOOx1+STloRs/B9nf7C6kPRmmg/V7aQW7usNg==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "dev": true + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz", + "integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "node_modules/@types/yargs": { + "version": "17.0.32", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", + "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "dev": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/async-mutex": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/async-mutex/-/async-mutex-0.4.0.tgz", + "integrity": "sha512-eJFZ1YhRR8UN8eBLoNzcDPcy/jqjsg6I1AP+KvWQX80BqOSW1oJPJXDylPUEeMr2ZQvHgnQ//Lp6f3RQ1zI7HA==", + "dev": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/b4a": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", + "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", + "dev": true + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "dev": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz", + "integrity": "sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "dev": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/bcrypt": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.1.tgz", + "integrity": "sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.11", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "dev": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/bson": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.2.0.tgz", + "integrity": "sha512-ID1cI+7bazPDyL9wYy9GaQ8gEEohWvcUl/Yf0dIdutJxnmInEEyCsb4awy/OiBfall7zBA179Pahi3vCdFze3Q==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/char-regex/-/char-regex-1.0.2.tgz", + "integrity": "sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==", + "dev": true + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz", + "integrity": "sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==", + "dev": true + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.1.tgz", + "integrity": "sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.4.tgz", + "integrity": "sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==", + "dev": true + }, + "node_modules/create-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/create-jest/-/create-jest-29.7.0.tgz", + "integrity": "sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "prompts": "^2.0.1" + }, + "bin": { + "create-jest": "bin/create-jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/dedent": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.1.tgz", + "integrity": "sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg==", + "dev": true, + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-libc": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", + "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", + "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.623", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.623.tgz", + "integrity": "sha512-lKoz10iCYlP1WtRYdh5MvocQPWVRoI7ysp6qf18bmeBgR8abE6+I2CsfyNKztRDZvhdWc+krKT6wS7Neg8sw3A==", + "dev": true + }, + "node_modules/emittery": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz", + "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", + "integrity": "sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", + "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", + "dev": true + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", + "dev": true + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "dev": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "dev": true, + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.1.2.tgz", + "integrity": "sha512-CM3GuJ57US06mlpQ47YcunuUZ9jpm8Vx+P2CGt2j7HpgkKZO/DJYQ0Bobim8G6PFQmK5lOqOOdUXboU+h73A4g==", + "dev": true, + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "devOptional": true + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-generator-fn/-/is-generator-fn-2.1.0.tgz", + "integrity": "sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.1.tgz", + "integrity": "sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", + "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", + "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/istanbul-reports": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", + "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest/-/jest-29.7.0.tgz", + "integrity": "sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-changed-files": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.7.0.tgz", + "integrity": "sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==", + "dev": true, + "dependencies": { + "execa": "^5.0.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-changed-files/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-circus": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.7.0.tgz", + "integrity": "sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/expect": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "dedent": "^1.0.0", + "is-generator-fn": "^2.0.0", + "jest-each": "^29.7.0", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "p-limit": "^3.1.0", + "pretty-format": "^29.7.0", + "pure-rand": "^6.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-circus/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-cli": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.7.0.tgz", + "integrity": "sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==", + "dev": true, + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "create-jest": "^29.7.0", + "exit": "^0.1.2", + "import-local": "^3.0.2", + "jest-config": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "yargs": "^17.3.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/jest-config": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.7.0.tgz", + "integrity": "sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/test-sequencer": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-jest": "^29.7.0", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-circus": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "micromatch": "^4.0.4", + "parse-json": "^5.2.0", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@types/node": "*", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", + "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-docblock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.7.0.tgz", + "integrity": "sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g==", + "dev": true, + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-each": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.7.0.tgz", + "integrity": "sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "jest-util": "^29.7.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz", + "integrity": "sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw==", + "dev": true, + "dependencies": { + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-matcher-utils": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz", + "integrity": "sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz", + "integrity": "sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==", + "dev": true, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "dev": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.7.0.tgz", + "integrity": "sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "resolve": "^1.20.0", + "resolve.exports": "^2.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz", + "integrity": "sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA==", + "dev": true, + "dependencies": { + "jest-regex-util": "^29.6.3", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.7.0.tgz", + "integrity": "sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ==", + "dev": true, + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/environment": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "graceful-fs": "^4.2.9", + "jest-docblock": "^29.7.0", + "jest-environment-node": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-leak-detector": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-resolve": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-util": "^29.7.0", + "jest-watcher": "^29.7.0", + "jest-worker": "^29.7.0", + "p-limit": "^3.1.0", + "source-map-support": "0.5.13" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-runner/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-runtime": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.7.0.tgz", + "integrity": "sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ==", + "dev": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/globals": "^29.7.0", + "@jest/source-map": "^29.6.3", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "cjs-module-lexer": "^1.0.0", + "collect-v8-coverage": "^1.0.0", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0", + "strip-bom": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-snapshot": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.7.0.tgz", + "integrity": "sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw==", + "dev": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@babel/generator": "^7.7.2", + "@babel/plugin-syntax-jsx": "^7.7.2", + "@babel/plugin-syntax-typescript": "^7.7.2", + "@babel/types": "^7.3.3", + "@jest/expect-utils": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0", + "chalk": "^4.0.0", + "expect": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-diff": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "natural-compare": "^1.4.0", + "pretty-format": "^29.7.0", + "semver": "^7.5.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "dev": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-watcher": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.7.0.tgz", + "integrity": "sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g==", + "dev": true, + "dependencies": { + "@jest/test-result": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "emittery": "^0.13.1", + "jest-util": "^29.7.0", + "string-length": "^4.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "dev": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", + "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "dev": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mongodb": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.2.0.tgz", + "integrity": "sha512-d7OSuGjGWDZ5usZPqfvb36laQ9CPhnWkAGHT61x5P95p/8nMVeH8asloMwW6GcYFeB0Vj4CB/1wOTDG2RA9BFA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.2.0", + "mongodb-connection-string-url": "^2.6.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz", + "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/mongodb-memory-server": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mongodb-memory-server/-/mongodb-memory-server-9.1.5.tgz", + "integrity": "sha512-m7yewXoyctu2lwISq/sazwOV/LBkPmAm4ulwoP6J4zzv78ESlAIuQEHoL2+45CTlwxiRM5hfVBQe9HIYEFaBWw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "mongodb-memory-server-core": "9.1.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core": { + "version": "9.1.5", + "resolved": "https://registry.npmjs.org/mongodb-memory-server-core/-/mongodb-memory-server-core-9.1.5.tgz", + "integrity": "sha512-mevjdWrxym+MzMoNsFfCtrXwK3ndb0xHKj+fHT1xoT4l+uflEqvLHt+aRdJrTW5GTGYeVlYHQpQ8hLKMeEL6cg==", + "dev": true, + "dependencies": { + "async-mutex": "^0.4.0", + "camelcase": "^6.3.0", + "debug": "^4.3.4", + "find-cache-dir": "^3.3.2", + "follow-redirects": "^1.15.3", + "https-proxy-agent": "^7.0.2", + "mongodb": "^5.9.1", + "new-find-package-json": "^2.0.0", + "semver": "^7.5.4", + "tar-stream": "^3.0.0", + "tslib": "^2.6.2", + "yauzl": "^2.10.0" + }, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/bson": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz", + "integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==", + "dev": true, + "engines": { + "node": ">=14.20.1" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mongodb-memory-server-core/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dev": true, + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/mongodb-memory-server-core/node_modules/mongodb": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.2.tgz", + "integrity": "sha512-H60HecKO4Bc+7dhOv4sJlgvenK4fQNqqUIlXxZYQNbfEWSALGAwGoyJd/0Qwk4TttFXUOHJ2ZJQe/52ScaUwtQ==", + "dev": true, + "dependencies": { + "bson": "^5.5.0", + "mongodb-connection-string-url": "^2.6.0", + "socks": "^2.7.1" + }, + "engines": { + "node": ">=14.20.1" + }, + "optionalDependencies": { + "@mongodb-js/saslprep": "^1.1.0" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.0.0", + "kerberos": "^1.0.0 || ^2.0.0", + "mongodb-client-encryption": ">=2.3.0 <3", + "snappy": "^7.2.2" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + } + } + }, + "node_modules/mongodb-memory-server-core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/mongoose": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.0.4.tgz", + "integrity": "sha512-wN9qvdevX3+922VnLT7CpaZRT3jmVCBOK2QMHMGeScQxDRnFMPpkuI9StEPpZo/3x8t+kbzH7F8RMPsyNwyM4w==", + "dependencies": { + "bson": "^6.2.0", + "kareem": "2.5.1", + "mongodb": "6.2.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/new-find-package-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/new-find-package-json/-/new-find-package-json-2.0.0.tgz", + "integrity": "sha512-lDcBsjBSMlj3LXH2v/FW3txlh2pYTjmbOXPYJD93HI5EwuLzI11tdHSIpUMmfq/IOsldj4Ps8M8flhm+pCK4Ew==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/new-find-package-json/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/new-find-package-json/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/prompts/-/prompts-2.4.2.tgz", + "integrity": "sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==", + "dev": true, + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pure-rand": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/pure-rand/-/pure-rand-6.0.4.tgz", + "integrity": "sha512-LA0Y9kxMYv47GIPJy6MI84fqTd2HmYZI83W/kM/SkKfDlajnZYfmXFTxkbY+xSBPkLJxltMa9hIkmdc29eguMA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-tick": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", + "dev": true + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", + "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", + "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "devOptional": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "devOptional": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.13", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.13.tgz", + "integrity": "sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/streamx": { + "version": "2.15.6", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.6.tgz", + "integrity": "sha512-q+vQL4AAz+FdfT137VF69Cc/APqUbxy+MDOImRrMvchJpigHj9GksgDU2LYbO9rx7RX6osWgxJB2WxhYv4SZAw==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", + "integrity": "sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==", + "dev": true, + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "8.1.2", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-8.1.2.tgz", + "integrity": "sha512-6WTxW1EB6yCxV5VFOIPQruWGHqc3yI7hEmZK6h+pyk69Lk/Ut7rLUY6W/ONF2MjBuGjvmMiIpsrVJ2vjrHlslA==", + "dev": true, + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/supertest": { + "version": "6.3.4", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.4.tgz", + "integrity": "sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==", + "dev": true, + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.1.2" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tar": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz", + "integrity": "sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar-stream": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", + "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "dev": true + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", + "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", + "dev": true + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "dev": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", + "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "dev": true, + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/apis/allquestionservice/package.json b/apis/allquestionservice/package.json new file mode 100644 index 00000000..97b7bdc2 --- /dev/null +++ b/apis/allquestionservice/package.json @@ -0,0 +1,32 @@ +{ + "name": "allquestions-api", + "version": "1.0.0", + "description": "All questions API", + "main": "allquestions-api.js", + "scripts": { + "start": "node allquestions-api.js", + "test": "jest" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/arquisoft/wiq_es2c.git" + }, + "author": "", + "license": "ISC", + "bugs": { + "url": "https://github.com/arquisoft/wiq_es2c/issues" + }, + "homepage": "https://github.com/arquisoft/wiq_es2c#readme", + "dependencies": { + "bcrypt": "^5.1.1", + "body-parser": "^1.20.2", + "express": "^4.18.2", + "mongoose": "^8.0.4", + "axios": "^0.21.1" + }, + "devDependencies": { + "jest": "^29.7.0", + "mongodb-memory-server": "^9.1.5", + "supertest": "^6.3.4" + } +} diff --git a/apis/allquestionservice/question-model.js b/apis/allquestionservice/question-model.js new file mode 100644 index 00000000..77f14c48 --- /dev/null +++ b/apis/allquestionservice/question-model.js @@ -0,0 +1,36 @@ +const mongoose = require('mongoose'); + +const questionSchema = new mongoose.Schema({ + enunciado:{ + type: String, + required: true, + }, + respuesta_correcta: { + type:String, + required: true + }, + respuesta_falsa1:{ + type:String, + required:true + }, + respuesta_falsa2:{ + type:String, + required:true + },respuesta_falsa3:{ + type:String, + required:true + },time:{ + type:Number, + default: 30, + required: false + },correct:{ + type: Boolean, + default: false, + required: false + } + +}); + +const Question = mongoose.model('Question', questionSchema); + +module.exports = Question \ No newline at end of file diff --git a/apis/alluserservice/package-lock.json b/apis/alluserservice/package-lock.json index 4b878849..b865af3a 100644 --- a/apis/alluserservice/package-lock.json +++ b/apis/alluserservice/package-lock.json @@ -5,7 +5,7 @@ "requires": true, "packages": { "": { - "name": "perfil-api", + "name": "allusers-api", "version": "1.0.0", "license": "ISC", "dependencies": { diff --git a/docker-compose.yml b/docker-compose.yml index 9a2798c3..e4f079ac 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -103,6 +103,20 @@ services: environment: MONGODB_URI: mongodb://mongodb:27017/userdb + allquestionservice: + container_name: allquestionservice-${teamname:-defaultASW} + image: ghcr.io/arquisoft/wiq_es2c/apis/allquestionservice/allquestions-api:latest + profiles: ["dev", "prod"] + build: ./apis/allquestionservice + depends_on: + - mongodb + ports: + - "8007:8007" + networks: + - mynetwork + environment: + MONGODB_URI: mongodb://mongodb:27017/userdb + gatewayservice: container_name: gatewayservice-${teamname:-defaultASW} image: ghcr.io/arquisoft/wiq_es2c/gatewayservice:latest @@ -118,6 +132,7 @@ services: - perfilservice - gamehistoryservice - alluserservice + - allquestionservice ports: - "8000:8000" networks: @@ -129,6 +144,7 @@ services: USER_SERVICE_URL: http://userservice:8001 PERFIL_SERVICE_URL: http://perfilservice:8005 ALLUSERS_SERVICE_URL: http://alluserservice:8006 + ALLQUESTIONS_SERVICE_URL: http://allquestionservice:8007 webapp: container_name: webapp-${teamname:-defaultASW} diff --git a/gatewayservice/gateway-service.js b/gatewayservice/gateway-service.js index e824b365..1e928ca5 100644 --- a/gatewayservice/gateway-service.js +++ b/gatewayservice/gateway-service.js @@ -16,6 +16,7 @@ const authServiceUrl = process.env.AUTH_SERVICE_URL || 'http://localhost:8002'; const userServiceUrl = process.env.USER_SERVICE_URL || 'http://localhost:8001'; const perfilServiceUrl = process.env.PERFIL_SERVICE_URL || 'http://localhost:8005'; const allUsersServiceUrl = process.env.ALLUSERS_SERVICE_URL || 'http://localhost:8006'; +const allQuestionsServiceUrl = process.env.ALLQUESTIONS_SERVICE_URL || 'http://localhost:8007'; @@ -112,6 +113,16 @@ app.get('/getAllUsers', async (req, res) => { } }); +app.get('/getAllQuestions', async (req, res) => { + try { + const URL = allQuestionsServiceUrl + '/getAllQuestions'; + const allQuestionsResponse = await axios.get(URL, req.body); + res.json(allQuestionsResponse.data); + } catch (error) { + console.log(error) + } +}); + // Read the OpenAPI YAML file synchronously // Hubo que cambiar el path porque los test e2e ahora sólo se ejecutan desde webapp openapiPath='../gatewayservice/openapi.yaml' diff --git a/webapp/src/components/AllQuestions.js b/webapp/src/components/AllQuestions.js new file mode 100644 index 00000000..aa94070b --- /dev/null +++ b/webapp/src/components/AllQuestions.js @@ -0,0 +1,81 @@ +import axios from 'axios'; +import React, { useState, useEffect, useCallback } from 'react'; +import { useNavigate} from 'react-router-dom'; +import { Container, Typography, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, Paper, Snackbar,Button } from '@mui/material'; + +const AllQuestions = () => { + + const navigate = useNavigate(); + const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; + + + const [questions, setQuestions] = useState([]); + const [error, setError] = useState(''); + + + + const showHome = async () => { + navigate('/PantallaInicio'); + } + + const getAllQuestions = useCallback(async () => { + try { + const response = await axios.get(`${apiEndpoint}/getAllQuestions`,{}); + setQuestions(response.data); + } catch (error) { + setError(error.response.data.error); + } + }) + + useEffect(() => { + getAllQuestions(); + }, [getAllQuestions]); + + + return ( + + + + + TODAS LAS PREGUNTAS + + + + + + Pregunta + Respuesta + + + + {questions.map((q) => ( + + {q.enunciado} + {q.respuesta_correcta} + + ))} + +
+
+
+ {error && ( + setError('')} message={`Error: ${error}`} /> + )} +
+
+ ); +}; + +export default AllQuestions; \ No newline at end of file diff --git a/webapp/src/components/NavigationBar.js b/webapp/src/components/NavigationBar.js index 745d6d77..27966c63 100644 --- a/webapp/src/components/NavigationBar.js +++ b/webapp/src/components/NavigationBar.js @@ -31,6 +31,10 @@ const NavigationBar = () => { navigate("/AllUsers") }; + const showAllQuestions = () => { + navigate("/AllQuestions") + }; + const showLogout = () => { try { setUsernameGlobal(''); @@ -60,7 +64,10 @@ const NavigationBar = () => { Imagen usuario +
{/* Columna derecha */} diff --git a/webapp/src/components/images/questions.png b/webapp/src/components/images/questions.png new file mode 100644 index 0000000000000000000000000000000000000000..390d4dcf6061cb7700416ff54b882a06c1faef51 GIT binary patch literal 7840 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 /> } /> } /> + } /> From f2ac94ca39e7f935595e8c1f8b13caa0562216cd Mon Sep 17 00:00:00 2001 From: David Date: Mon, 15 Apr 2024 13:59:17 +0200 Subject: [PATCH 16/43] =?UTF-8?q?Cambiadas=20im=C3=A1genes=20final=20de=20?= =?UTF-8?q?partida?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gamehistoryservice/gamehistory.js | 3 ++- webapp/src/components/EndGame.js | 13 ++++++++++++- .../src/components/images/ronnie-comiendo.png | Bin 0 -> 18630 bytes .../src/components/images/ronnie-muletas.png | Bin 0 -> 157562 bytes 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 webapp/src/components/images/ronnie-comiendo.png create mode 100644 webapp/src/components/images/ronnie-muletas.png diff --git a/gamehistoryservice/gamehistory.js b/gamehistoryservice/gamehistory.js index ea9f939b..9f716f0d 100644 --- a/gamehistoryservice/gamehistory.js +++ b/gamehistoryservice/gamehistory.js @@ -75,7 +75,8 @@ app.get("/endgamestats", async (req, res) => { totalRightQuestions: gameStats.totalRightQuestions || 0, totalIncorrectQuestions: gameStats.totalIncorrectQuestions || 0, ratio: (gameStats.ratio || 0) + "%", - totalTime: (gameStats.totalTime || 0) + "s" + totalTime: (gameStats.totalTime || 0) + "s", + endgameImageWithRatio: gameStats.ratio }; // Envía la respuesta JSON diff --git a/webapp/src/components/EndGame.js b/webapp/src/components/EndGame.js index 959b7625..48e1a7ae 100644 --- a/webapp/src/components/EndGame.js +++ b/webapp/src/components/EndGame.js @@ -36,6 +36,17 @@ const EndGame = () => { getEndGame(); }, [getEndGame]); + const selectImage = () => { + + if (endGame.endgameImageWithRatio >= 0 && endGame.endgameImageWithRatio < 25) { + return require('./images/ronnie-muletas.png'); + } else if (endGame.endgameImageWithRatio >= 25 && endGame.endgameImageWithRatio < 50) { + return require('./images/ronnie-comiendo.png'); + } else { + return require('./images/ronnie.gif'); + } + }; + return ( { width: '100%', }}> - End Game + End Game Estadísticas de la última partida diff --git a/webapp/src/components/images/ronnie-comiendo.png b/webapp/src/components/images/ronnie-comiendo.png new file mode 100644 index 0000000000000000000000000000000000000000..89c2512dbecfc2d6b80252e1b8d0c950dd83305e GIT binary patch literal 18630 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 YL(# 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 gM#6*>X~=_VLxI^Ft&~9 Date: Mon, 15 Apr 2024 19:03:13 +0200 Subject: [PATCH 17/43] pantalla admin en proceso --- webapp/src/components/Login.js | 7 ++ webapp/src/components/PantallaInicioAdmin.js | 68 ++++++++++++++++++++ webapp/src/index.js | 2 + 3 files changed, 77 insertions(+) create mode 100644 webapp/src/components/PantallaInicioAdmin.js diff --git a/webapp/src/components/Login.js b/webapp/src/components/Login.js index b8a896bc..049452f5 100644 --- a/webapp/src/components/Login.js +++ b/webapp/src/components/Login.js @@ -36,6 +36,13 @@ const Login = () => { setError(error.response.data.error); } }; + + useEffect(() => { + if (loginSuccess && username == 'admin') { + setUsernameGlobal(username); + navigate("/PantallaInicioAdmin"); + } + }, [loginSuccess, navigate, setUsernameGlobal, username]); useEffect(() => { diff --git a/webapp/src/components/PantallaInicioAdmin.js b/webapp/src/components/PantallaInicioAdmin.js new file mode 100644 index 00000000..6ff878e9 --- /dev/null +++ b/webapp/src/components/PantallaInicioAdmin.js @@ -0,0 +1,68 @@ +import React, { useState } from 'react'; +import { Container, Typography, Button, Box, Snackbar } from '@mui/material'; +import { useUser } from './UserContext'; +import { useNavigate } from 'react-router-dom'; + + +const PantallaInicio = () => { + + const [openSnackbar, setOpenSnackbar] = useState(false); + const [error, setError] = useState(''); + + const { usernameGlobal} = useUser(); + + const navigate = useNavigate(); + + function nuevaPartida() { + navigate("/Game"); + } + + const handleCloseSnackbar = () => { + setOpenSnackbar(false); + }; + + const showAllUsers = () => { + navigate("/AllUsers") + }; + + const showAllQuestions = () => { + navigate("/AllQuestions") + }; + + + return ( + + + + + + + + {error && ( + setError('')} message={`Error: ${error}`} /> + )} + + + ); +}; + +export default PantallaInicio; \ No newline at end of file diff --git a/webapp/src/index.js b/webapp/src/index.js index b0724fe4..1ca5e8b2 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -13,6 +13,7 @@ import { } from "react-router-dom"; import PantallaInicio from './components/PantallaInicio'; +import PantallaInicioAdmin from './components/PantallaInicioAdmin'; import Login from './components/Login'; import AddUser from './components/AddUser'; import Game from './components/Game'; @@ -31,6 +32,7 @@ root.render( }> }> + }> } /> } /> } /> From 5401fd32198625b0fd5df3eea230ba64d28b07bc Mon Sep 17 00:00:00 2001 From: Angela Date: Mon, 15 Apr 2024 19:28:45 +0200 Subject: [PATCH 18/43] pantalla admin acabada con las apis --- webapp/src/components/AllQuestions.js | 13 +----------- webapp/src/components/AllUsers.js | 12 +---------- webapp/src/components/Login.js | 11 ++++------ webapp/src/components/NavigationBar.js | 21 ++++++-------------- webapp/src/components/PantallaInicioAdmin.js | 17 +++++----------- webapp/src/components/Perfil.js | 6 ------ 6 files changed, 17 insertions(+), 63 deletions(-) diff --git a/webapp/src/components/AllQuestions.js b/webapp/src/components/AllQuestions.js index aa94070b..821cacde 100644 --- a/webapp/src/components/AllQuestions.js +++ b/webapp/src/components/AllQuestions.js @@ -1,23 +1,15 @@ import axios from 'axios'; import React, { useState, useEffect, useCallback } from 'react'; -import { useNavigate} from 'react-router-dom'; -import { Container, Typography, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, Paper, Snackbar,Button } from '@mui/material'; +import { Container, Typography, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, Paper, Snackbar } from '@mui/material'; const AllQuestions = () => { - const navigate = useNavigate(); const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; const [questions, setQuestions] = useState([]); const [error, setError] = useState(''); - - - const showHome = async () => { - navigate('/PantallaInicio'); - } - const getAllQuestions = useCallback(async () => { try { const response = await axios.get(`${apiEndpoint}/getAllQuestions`,{}); @@ -45,9 +37,6 @@ const AllQuestions = () => { height: '100vh', width: '100%', }}> - TODAS LAS PREGUNTAS diff --git a/webapp/src/components/AllUsers.js b/webapp/src/components/AllUsers.js index c2b0d716..6bfc0972 100644 --- a/webapp/src/components/AllUsers.js +++ b/webapp/src/components/AllUsers.js @@ -1,11 +1,9 @@ import axios from 'axios'; import React, { useState, useEffect, useCallback } from 'react'; -import { useNavigate} from 'react-router-dom'; -import { Container, Typography, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, Paper, Snackbar,Button } from '@mui/material'; +import { Container, Typography, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, Paper, Snackbar } from '@mui/material'; const AllUsers = () => { - const navigate = useNavigate(); const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; @@ -13,11 +11,6 @@ const AllUsers = () => { const [error, setError] = useState(''); - - const showHome = async () => { - navigate('/PantallaInicio'); - } - const getAllUsers = useCallback(async () => { try { const response = await axios.get(`${apiEndpoint}/getAllUsers`,{}); @@ -45,9 +38,6 @@ const AllUsers = () => { height: '100vh', width: '100%', }}> - TODOS LOS USUARIOS diff --git a/webapp/src/components/Login.js b/webapp/src/components/Login.js index 049452f5..18504593 100644 --- a/webapp/src/components/Login.js +++ b/webapp/src/components/Login.js @@ -36,17 +36,14 @@ const Login = () => { setError(error.response.data.error); } }; + useEffect(() => { - if (loginSuccess && username == 'admin') { + if (loginSuccess && username === 'admin') { setUsernameGlobal(username); navigate("/PantallaInicioAdmin"); - } - }, [loginSuccess, navigate, setUsernameGlobal, username]); - - - useEffect(() => { - if (loginSuccess) { + + } else if(loginSuccess){ setUsernameGlobal(username); navigate("/PantallaInicio"); } diff --git a/webapp/src/components/NavigationBar.js b/webapp/src/components/NavigationBar.js index 27966c63..d95642a7 100644 --- a/webapp/src/components/NavigationBar.js +++ b/webapp/src/components/NavigationBar.js @@ -16,7 +16,12 @@ const NavigationBar = () => { const showHome = () => { - navigate("/PantallaInicio") + if (usernameGlobal === 'admin') { + navigate("/PantallaInicioAdmin"); + + } else { + navigate("/PantallaInicio"); + } }; const showGameHistory = () => { @@ -27,14 +32,6 @@ const NavigationBar = () => { navigate("/Perfil") }; - const showAllUsers = () => { - navigate("/AllUsers") - }; - - const showAllQuestions = () => { - navigate("/AllQuestions") - }; - const showLogout = () => { try { setUsernameGlobal(''); @@ -63,12 +60,6 @@ const NavigationBar = () => { - - {/* Columna derecha */} diff --git a/webapp/src/components/PantallaInicioAdmin.js b/webapp/src/components/PantallaInicioAdmin.js index 6ff878e9..a0b3c92f 100644 --- a/webapp/src/components/PantallaInicioAdmin.js +++ b/webapp/src/components/PantallaInicioAdmin.js @@ -1,6 +1,5 @@ import React, { useState } from 'react'; -import { Container, Typography, Button, Box, Snackbar } from '@mui/material'; -import { useUser } from './UserContext'; +import { Container, Button, Box, Snackbar } from '@mui/material'; import { useNavigate } from 'react-router-dom'; @@ -8,15 +7,9 @@ const PantallaInicio = () => { const [openSnackbar, setOpenSnackbar] = useState(false); const [error, setError] = useState(''); - - const { usernameGlobal} = useUser(); const navigate = useNavigate(); - function nuevaPartida() { - navigate("/Game"); - } - const handleCloseSnackbar = () => { setOpenSnackbar(false); }; @@ -49,11 +42,11 @@ const PantallaInicio = () => { justifyContent: 'center', // Centra horizontalmente alignItems: 'center' }}> - - diff --git a/webapp/src/components/Perfil.js b/webapp/src/components/Perfil.js index 9c0d475b..d5580119 100644 --- a/webapp/src/components/Perfil.js +++ b/webapp/src/components/Perfil.js @@ -1,12 +1,10 @@ import axios from 'axios'; import React, { useState, useEffect, useCallback } from 'react'; -import { useNavigate} from 'react-router-dom'; import { Container, Typography, TableContainer, Table, TableHead, TableBody, TableRow, TableCell, Paper, Snackbar } from '@mui/material'; import { useUser } from './UserContext'; const Perfil = () => { - const navigate = useNavigate(); const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; const { usernameGlobal } = useUser(); @@ -15,10 +13,6 @@ const Perfil = () => { const [error, setError] = useState(''); - const handlePreviousPage = async () => { - navigate('/PantallaInicio'); - } - const getPerfil = useCallback(async () => { try { const response = await axios.get(`${apiEndpoint}/getUser`,{ From 7e1bc9aeb04d9a2bce192814a607b986577fd8d5 Mon Sep 17 00:00:00 2001 From: UO288559 Date: Mon, 15 Apr 2024 20:19:27 +0200 Subject: [PATCH 19/43] =?UTF-8?q?A=C3=B1adido=20NavBar=20para=20la=20panta?= =?UTF-8?q?lla=20de=20juego.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/src/components/NavigationBar_Game.js | 43 +++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 webapp/src/components/NavigationBar_Game.js diff --git a/webapp/src/components/NavigationBar_Game.js b/webapp/src/components/NavigationBar_Game.js new file mode 100644 index 00000000..c6660aa0 --- /dev/null +++ b/webapp/src/components/NavigationBar_Game.js @@ -0,0 +1,43 @@ +import React, {useCallback, useState} from 'react'; +import { useNavigate, useLocation } from 'react-router-dom'; +import { AppBar, Button, Grid } from '@mui/material'; +import { useUser } from './UserContext'; +import axios from 'axios'; + +const apiEndpoint = process.env.REACT_APP_API_ENDPOINT || 'http://localhost:8000'; +const NavigationBar_Game = () => { + + const [error, setError] = useState(''); + const { usernameGlobal, setUsernameGlobal } = useUser(); + const navigate = useNavigate(); + + const location = useLocation(); + + const isHiddenRoute = location.pathname !== '/Game' ; + + + const showHome = () => { + navigate("/PantallaInicio") + }; + + + + if (isHiddenRoute) { + return null; // Si no estás en / o /App, no muestra la barra de navegación + } + + return ( + + + {/* Columna izquierda */} + + + + + + ); +}; + +export default NavigationBar_Game; \ No newline at end of file From 9e1855cfeedbdc7a77971199f3aaf84420b9ce48 Mon Sep 17 00:00:00 2001 From: UO288559 Date: Mon, 15 Apr 2024 20:22:09 +0200 Subject: [PATCH 20/43] =?UTF-8?q?A=C3=B1adido=20NavBarGame=20al=20index.js?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/src/index.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/webapp/src/index.js b/webapp/src/index.js index 70eff683..451b2cc2 100644 --- a/webapp/src/index.js +++ b/webapp/src/index.js @@ -2,6 +2,7 @@ import React from 'react'; import ReactDOM from 'react-dom/client'; import './index.css'; import App from './App'; +import NavigationBar from './components/NavigationBar'; import reportWebVitals from './reportWebVitals'; import { UserProvider } from './components/UserContext'; @@ -18,9 +19,6 @@ import Game from './components/Game'; import Gamehistory from './components/Gamehistory'; import Ranking from './components/Ranking'; import GameConfiguration from './components/GameConfiguration'; -import EndGame from './components/EndGame'; -import Footer from './components/fragments/Footer'; -import NavigationBar from './components/fragments/NavigationBar'; const root = ReactDOM.createRoot(document.getElementById('root')); root.render( @@ -38,9 +36,7 @@ root.render( } /> } /> } /> - } /> -