From 9df9db273c83c042e754dd1c0def472f9991456e Mon Sep 17 00:00:00 2001 From: Adji Bhawantu Date: Tue, 28 Oct 2025 23:58:57 +0700 Subject: [PATCH 1/2] apps running in localhost --- backend/.env.example | 17 - backend/package-lock.json | 2087 +++++++++++++++++++++++++++++++++++++ backend/package.json | 3 +- backend/yarn.lock | 412 ++++---- 4 files changed, 2318 insertions(+), 201 deletions(-) delete mode 100644 backend/.env.example create mode 100644 backend/package-lock.json diff --git a/backend/.env.example b/backend/.env.example deleted file mode 100644 index 11070817..00000000 --- a/backend/.env.example +++ /dev/null @@ -1,17 +0,0 @@ -# Generate a random string, or roll your face on the keyboard to fill this value: -SESSION_SECRET= - -# Get this on the Pi Developer Portal (develop.pi in the Pi Browser) -PI_API_KEY= - -# Platform API -PLATFORM_API_URL=https://api.minepi.com - -# MongoDB database connection details: -MONGO_HOST=localhost:27017 -MONGODB_DATABASE_NAME=demoapp-development -MONGODB_USERNAME=demoapp -MONGODB_PASSWORD=dev_password - -# Frontend app URL -FRONTEND_URL=http://localhost:3314 diff --git a/backend/package-lock.json b/backend/package-lock.json new file mode 100644 index 00000000..5a17b433 --- /dev/null +++ b/backend/package-lock.json @@ -0,0 +1,2087 @@ +{ + "name": "app-platform-demo-backend", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "app-platform-demo-backend", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@types/connect-mongo": "^3.1.3", + "@types/cookie-parser": "^1.4.2", + "@types/express-session": "^1.17.5", + "axios": "^0.21.1", + "connect-mongo": "^4.4.1", + "cookie-parser": "^1.4.5", + "cors": "^2.8.5", + "dotenv": "^10.0.0", + "express": "^4.17.1", + "express-session": "^1.17.2", + "mongodb": "^4.0.0", + "morgan": "^1.10.0" + }, + "devDependencies": { + "@types/cors": "^2.8.11", + "@types/express": "^4.17.12", + "@types/morgan": "^1.9.2", + "@types/node": "^18.7.23", + "ts-node-dev": "^2.0.0", + "typescript": "^4.7.4" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz", + "integrity": "sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true, + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", + "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-mongo": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/connect-mongo/-/connect-mongo-3.1.3.tgz", + "integrity": "sha512-h162kWzfphobvJOttkYKLXEQQmZuOlOSA1IszOusQhguCGf+/B8k4H373SJ0BtVv+qkXP/lziEuUfZDNfzZ1tw==", + "deprecated": "This is a stub types definition. connect-mongo provides its own type definitions, so you do not need this installed.", + "license": "MIT", + "dependencies": { + "connect-mongo": "*" + } + }, + "node_modules/@types/cookie-parser": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz", + "integrity": "sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/express": { + "version": "4.17.13", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz", + "integrity": "sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA==", + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.18", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.29", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz", + "integrity": "sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/express-session": { + "version": "1.17.5", + "resolved": "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.5.tgz", + "integrity": "sha512-l0DhkvNVfyUPEEis8fcwbd46VptfA/jmMwHfob2TfDMf3HyPLiB9mKD71LXhz5TMUobODXPD27zXSwtFQLHm+w==", + "license": "MIT", + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "license": "MIT" + }, + "node_modules/@types/morgan": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.3.tgz", + "integrity": "sha512-BiLcfVqGBZCyNCnCH3F4o2GmDLrpy0HeBVnNlyZG4fo88ZiE9SoiBe3C+2ezuwbjlEyT+PDZ17//TAlRxAn75Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "18.7.23", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz", + "integrity": "sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==", + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "license": "MIT" + }, + "node_modules/@types/serve-static": { + "version": "1.13.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz", + "integrity": "sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/strip-json-comments": { + "version": "0.0.30", + "resolved": "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz", + "integrity": "sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/webidl-conversions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", + "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/webidl-conversions": "*" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true, + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/axios": { + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.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==", + "dev": true, + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz", + "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-auth/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "license": "MIT", + "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.10.3", + "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/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "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, + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "4.6.4", + "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.4.tgz", + "integrity": "sha512-TdQ3FzguAu5HKPPlr0kYQCyrYUYh8tFM+CMTpxjNzVzxeiJY00Rtuj3LXLHSgiGvmaWlZ8PE+4KyM2thqE38pQ==", + "license": "Apache-2.0", + "dependencies": { + "buffer": "^5.6.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "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, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect-mongo": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/connect-mongo/-/connect-mongo-4.6.0.tgz", + "integrity": "sha512-8new4Z7NLP3CGP65Aw6ls3xDBeKVvHRSh39CXuDZTQsvpeeU9oNMzfFgvqmHqZ6gWpxIl663RyoVEmCAGf1yOg==", + "license": "MIT", + "dependencies": { + "debug": "^4.3.1", + "kruptein": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "mongodb": "^4.1.0" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-parser": { + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz", + "integrity": "sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==", + "license": "MIT", + "dependencies": { + "cookie": "0.4.1", + "cookie-signature": "1.0.6" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/denque": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", + "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz", + "integrity": "sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/dynamic-dedupe": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz", + "integrity": "sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "xtend": "^4.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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.1.tgz", + "integrity": "sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q==", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "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.10.3", + "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-session": { + "version": "1.17.3", + "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz", + "integrity": "sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw==", + "license": "MIT", + "dependencies": { + "cookie": "0.4.2", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-headers": "~1.0.2", + "parseurl": "~1.3.3", + "safe-buffer": "5.2.1", + "uid-safe": "~2.1.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/express-session/node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express-session/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express-session/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "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, + "license": "MIT", + "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==", + "license": "MIT", + "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/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", + "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "license": "MIT" + }, + "node_modules/get-intrinsic": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", + "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "license": "MIT", + "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/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "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==", + "license": "ISC" + }, + "node_modules/ip": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz", + "integrity": "sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/kruptein": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/kruptein/-/kruptein-3.0.4.tgz", + "integrity": "sha512-614v+4fgOkcw98lI7rMO9HZ+Y2cK6MGYcR/NSVhRXcClUb72LTAf2NibAh8CKSjalY81rfrrjLQgb8TW9RP03Q==", + "license": "MIT", + "dependencies": { + "asn1.js": "^5.4.1" + }, + "engines": { + "node": ">8" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "optional": true + }, + "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==", + "license": "MIT" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mongodb": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.7.0.tgz", + "integrity": "sha512-HhVar6hsUeMAVlIbwQwWtV36iyjKd9qdhY+s4wcU8K6TOj4Q331iiMy+FoPuxEntDIijTYWivwFJkLv8q/ZgvA==", + "license": "Apache-2.0", + "dependencies": { + "bson": "^4.6.3", + "denque": "^2.0.1", + "mongodb-connection-string-url": "^2.5.2", + "socks": "^2.6.2" + }, + "engines": { + "node": ">=12.9.0" + }, + "optionalDependencies": { + "saslprep": "^1.0.3" + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz", + "integrity": "sha512-tWDyIG8cQlI5k3skB6ywaEA5F9f5OntrKKsT/Lteub2zgwSUlhqEN2inGgBTm8bpYJf8QYBdA/5naz65XDpczA==", + "license": "Apache-2.0", + "dependencies": { + "@types/whatwg-url": "^8.2.1", + "whatwg-url": "^11.0.0" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz", + "integrity": "sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ==", + "license": "MIT", + "dependencies": { + "basic-auth": "~2.0.1", + "debug": "2.6.9", + "depd": "~2.0.0", + "on-finished": "~2.3.0", + "on-headers": "~1.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/morgan/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/morgan/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/morgan/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.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, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "license": "MIT", + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/random-bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz", + "integrity": "sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "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==", + "license": "MIT", + "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/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.1", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", + "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.9.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/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "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" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/saslprep": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", + "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", + "license": "MIT", + "optional": true, + "dependencies": { + "sparse-bitfield": "^3.0.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "license": "MIT", + "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/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "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/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" + }, + "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==", + "license": "MIT", + "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/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "license": "MIT", + "dependencies": { + "ip": "^1.1.5", + "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, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "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==", + "license": "MIT", + "optional": true, + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "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, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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, + "license": "MIT", + "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==", + "license": "MIT", + "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==", + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/ts-node": { + "version": "10.8.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", + "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/ts-node-dev": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz", + "integrity": "sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.1", + "dynamic-dedupe": "^0.3.0", + "minimist": "^1.2.6", + "mkdirp": "^1.0.4", + "resolve": "^1.0.0", + "rimraf": "^2.6.1", + "source-map-support": "^0.5.12", + "tree-kill": "^1.2.2", + "ts-node": "^10.4.0", + "tsconfig": "^7.0.0" + }, + "bin": { + "ts-node-dev": "lib/bin.js", + "tsnd": "lib/bin.js" + }, + "engines": { + "node": ">=0.8.0" + }, + "peerDependencies": { + "node-notifier": "*", + "typescript": "*" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/tsconfig": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz", + "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/strip-bom": "^3.0.0", + "@types/strip-json-comments": "0.0.30", + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/uid-safe": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz", + "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==", + "license": "MIT", + "dependencies": { + "random-bytes": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "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==", + "license": "BSD-2-Clause", + "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==", + "license": "MIT", + "dependencies": { + "tr46": "^3.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "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==", + "dev": true, + "license": "ISC" + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + } + } +} diff --git a/backend/package.json b/backend/package.json index 900b867a..3ee7cbb9 100644 --- a/backend/package.json +++ b/backend/package.json @@ -8,7 +8,7 @@ }, "scripts": { "build": "tsc", - "start": "NODE_ENV=development ts-node-dev ./src/index.ts" + "start": "cross-env NODE_ENV=development ts-node-dev ./src/index.ts" }, "dependencies": { "@types/connect-mongo": "^3.1.3", @@ -29,6 +29,7 @@ "@types/express": "^4.17.12", "@types/morgan": "^1.9.2", "@types/node": "^18.7.23", + "cross-env": "^10.1.0", "ts-node-dev": "^2.0.0", "typescript": "^4.7.4" } diff --git a/backend/yarn.lock b/backend/yarn.lock index 28787e36..09b8c4a4 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -4,24 +4,29 @@ "@cspotcode/source-map-support@^0.8.0": version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== dependencies: "@jridgewell/trace-mapping" "0.3.9" +"@epic-web/invariant@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@epic-web/invariant/-/invariant-1.0.0.tgz#1073e5dee6dd540410784990eb73e4acd25c9813" + integrity sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA== + "@jridgewell/resolve-uri@^3.0.3": version "3.0.8" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz#687cc2bbf243f4e9a868ecf2262318e2658873a1" + resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.8.tgz" integrity sha512-YK5G9LaddzGbcucK4c8h5tWFmMPBvRZ/uyWmN1/SbBdIvqGUdWGkJ5BAaccgs6XbzVLsqbPJrBSFwKv3kT9i7w== "@jridgewell/sourcemap-codec@^1.4.10": version "1.4.14" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz#add4c98d341472a289190b424efbdb096991bb24" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz" integrity sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw== "@jridgewell/trace-mapping@0.3.9": version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz" integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== dependencies: "@jridgewell/resolve-uri" "^3.0.3" @@ -29,27 +34,27 @@ "@tsconfig/node10@^1.0.7": version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" + resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz" integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== "@tsconfig/node12@^1.0.7": version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz" integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== "@tsconfig/node14@^1.0.0": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz" integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== "@tsconfig/node16@^1.0.2": version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" + resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== "@types/body-parser@*": version "1.19.2" - resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.2.tgz#aea2059e28b7658639081347ac4fab3de166e6f0" + resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz" integrity sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g== dependencies: "@types/connect" "*" @@ -57,33 +62,33 @@ "@types/connect-mongo@^3.1.3": version "3.1.3" - resolved "https://registry.yarnpkg.com/@types/connect-mongo/-/connect-mongo-3.1.3.tgz#4ff124a30e530dd2dae4725cfd28ca0b9badbfd1" + resolved "https://registry.npmjs.org/@types/connect-mongo/-/connect-mongo-3.1.3.tgz" integrity sha512-h162kWzfphobvJOttkYKLXEQQmZuOlOSA1IszOusQhguCGf+/B8k4H373SJ0BtVv+qkXP/lziEuUfZDNfzZ1tw== dependencies: connect-mongo "*" "@types/connect@*": version "3.4.35" - resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.35.tgz#5fcf6ae445e4021d1fc2219a4873cc73a3bb2ad1" + resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz" integrity sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ== dependencies: "@types/node" "*" "@types/cookie-parser@^1.4.2": version "1.4.3" - resolved "https://registry.yarnpkg.com/@types/cookie-parser/-/cookie-parser-1.4.3.tgz#3a01df117c5705cf89a84c876b50c5a1fd427a21" + resolved "https://registry.npmjs.org/@types/cookie-parser/-/cookie-parser-1.4.3.tgz" integrity sha512-CqSKwFwefj4PzZ5n/iwad/bow2hTCh0FlNAeWLtQM3JA/NX/iYagIpWG2cf1bQKQ2c9gU2log5VUCrn7LDOs0w== dependencies: "@types/express" "*" "@types/cors@^2.8.11": version "2.8.12" - resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.12.tgz#6b2c510a7ad7039e98e7b8d3d6598f4359e5c080" + resolved "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz" integrity sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw== "@types/express-serve-static-core@^4.17.18": version "4.17.29" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz#2a1795ea8e9e9c91b4a4bbe475034b20c1ec711c" + resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.29.tgz" integrity sha512-uMd++6dMKS32EOuw1Uli3e3BPgdLIXmezcfHv7N4c1s3gkhikBplORPpMq3fuWkxncZN1reb16d5n8yhQ80x7Q== dependencies: "@types/node" "*" @@ -92,14 +97,14 @@ "@types/express-session@^1.17.5": version "1.17.5" - resolved "https://registry.yarnpkg.com/@types/express-session/-/express-session-1.17.5.tgz#13f48852b4aa60ff595835faeb4b4dda0ba0866e" + resolved "https://registry.npmjs.org/@types/express-session/-/express-session-1.17.5.tgz" integrity sha512-l0DhkvNVfyUPEEis8fcwbd46VptfA/jmMwHfob2TfDMf3HyPLiB9mKD71LXhz5TMUobODXPD27zXSwtFQLHm+w== dependencies: "@types/express" "*" "@types/express@*", "@types/express@^4.17.12": version "4.17.13" - resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.13.tgz#a76e2995728999bab51a33fabce1d705a3709034" + resolved "https://registry.npmjs.org/@types/express/-/express-4.17.13.tgz" integrity sha512-6bSZTPaTIACxn48l50SR+axgrqm6qXFIxrdAKaG6PaJk3+zuUr35hBlgT7vOmJcum+OEaIBLtHV/qloEAFITeA== dependencies: "@types/body-parser" "*" @@ -109,39 +114,34 @@ "@types/mime@^1": version "1.3.2" - resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz" integrity sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw== "@types/morgan@^1.9.2": version "1.9.3" - resolved "https://registry.yarnpkg.com/@types/morgan/-/morgan-1.9.3.tgz#ae04180dff02c437312bc0cfb1e2960086b2f540" + resolved "https://registry.npmjs.org/@types/morgan/-/morgan-1.9.3.tgz" integrity sha512-BiLcfVqGBZCyNCnCH3F4o2GmDLrpy0HeBVnNlyZG4fo88ZiE9SoiBe3C+2ezuwbjlEyT+PDZ17//TAlRxAn75Q== dependencies: "@types/node" "*" -"@types/node@*": - version "18.0.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.0.0.tgz#67c7b724e1bcdd7a8821ce0d5ee184d3b4dd525a" - integrity sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== - -"@types/node@^18.7.23": +"@types/node@*", "@types/node@^18.7.23": version "18.7.23" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.7.23.tgz#75c580983846181ebe5f4abc40fe9dfb2d65665f" + resolved "https://registry.npmjs.org/@types/node/-/node-18.7.23.tgz" integrity sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg== "@types/qs@*": version "6.9.7" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz" integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/range-parser@*": version "1.2.4" - resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" + resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== "@types/serve-static@*": version "1.13.10" - resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.13.10.tgz#f5e0ce8797d2d7cc5ebeda48a52c96c4fa47a8d9" + resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.10.tgz" integrity sha512-nCkHGI4w7ZgAdNkrEu0bv+4xNV/XDqW+DydknebMOQwkpDGx8G+HTlj7R7ABI8i8nKxVw0wtKPi1D+lPOkh4YQ== dependencies: "@types/mime" "^1" @@ -149,22 +149,22 @@ "@types/strip-bom@^3.0.0": version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/strip-bom/-/strip-bom-3.0.0.tgz#14a8ec3956c2e81edb7520790aecf21c290aebd2" + resolved "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-xevGOReSYGM7g/kUBZzPqCrR/KYAo+F0yiPc85WFTJa0MSLtyFTVTU6cJu/aV4mid7IffDIWqo69THF2o4JiEQ== "@types/strip-json-comments@0.0.30": version "0.0.30" - resolved "https://registry.yarnpkg.com/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz#9aa30c04db212a9a0649d6ae6fd50accc40748a1" + resolved "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz" integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ== "@types/webidl-conversions@*": version "6.1.1" - resolved "https://registry.yarnpkg.com/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz#e33bc8ea812a01f63f90481c666334844b12a09e" + resolved "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz" integrity sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q== "@types/whatwg-url@^8.2.1": version "8.2.2" - resolved "https://registry.yarnpkg.com/@types/whatwg-url/-/whatwg-url-8.2.2.tgz#749d5b3873e845897ada99be4448041d4cc39e63" + resolved "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz" integrity sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA== dependencies: "@types/node" "*" @@ -172,7 +172,7 @@ accepts@~1.3.8: version "1.3.8" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + 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" @@ -180,17 +180,17 @@ accepts@~1.3.8: acorn-walk@^8.1.1: version "8.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1" + resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz" integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA== acorn@^8.4.1: version "8.7.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.7.1.tgz#0197122c843d1bf6d0a5e83220a788f278f63c30" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz" integrity sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A== anymatch@~3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz" integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" @@ -198,17 +198,17 @@ anymatch@~3.1.2: arg@^4.1.0: version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + resolved "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz" integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== array-flatten@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== asn1.js@^5.4.1: version "5.4.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-5.4.1.tgz#11a980b84ebb91781ce35b0fdc2ee294e3783f07" + resolved "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz" integrity sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA== dependencies: bn.js "^4.0.0" @@ -218,41 +218,41 @@ asn1.js@^5.4.1: axios@^0.21.1: version "0.21.4" - resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + resolved "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz" integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== dependencies: follow-redirects "^1.14.0" balanced-match@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== basic-auth@~2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-2.0.1.tgz#b998279bf47ce38344b4f3cf916d4679bbf51e3a" + resolved "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz" integrity sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg== dependencies: safe-buffer "5.1.2" binary-extensions@^2.0.0: version "2.2.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== bn.js@^4.0.0: version "4.12.0" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" + resolved "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== body-parser@1.20.0: version "1.20.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.0.tgz#3de69bd89011c11573d7bfee6a64f11b6bd27cc5" + resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz" integrity sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg== dependencies: bytes "3.1.2" @@ -270,7 +270,7 @@ body-parser@1.20.0: brace-expansion@^1.1.7: version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz" integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" @@ -278,26 +278,26 @@ brace-expansion@^1.1.7: braces@~3.0.2: version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== dependencies: fill-range "^7.0.1" bson@^4.6.3: version "4.6.4" - resolved "https://registry.yarnpkg.com/bson/-/bson-4.6.4.tgz#e66d4a334f1ab230dfcfb9ec4ea9091476dd372e" + resolved "https://registry.npmjs.org/bson/-/bson-4.6.4.tgz" integrity sha512-TdQ3FzguAu5HKPPlr0kYQCyrYUYh8tFM+CMTpxjNzVzxeiJY00Rtuj3LXLHSgiGvmaWlZ8PE+4KyM2thqE38pQ== dependencies: buffer "^5.6.0" buffer-from@^1.0.0: version "1.1.2" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer@^5.6.0: version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== dependencies: base64-js "^1.3.1" @@ -305,12 +305,12 @@ buffer@^5.6.0: bytes@3.1.2: version "3.1.2" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== call-bind@^1.0.0: version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz" integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== dependencies: function-bind "^1.1.1" @@ -318,7 +318,7 @@ call-bind@^1.0.0: chokidar@^3.5.1: version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" @@ -333,12 +333,12 @@ chokidar@^3.5.1: concat-map@0.0.1: version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz" integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== connect-mongo@*, connect-mongo@^4.4.1: version "4.6.0" - resolved "https://registry.yarnpkg.com/connect-mongo/-/connect-mongo-4.6.0.tgz#1bf62868efc9f28ecf1459ae9a9d6caaf90ae8a6" + resolved "https://registry.npmjs.org/connect-mongo/-/connect-mongo-4.6.0.tgz" integrity sha512-8new4Z7NLP3CGP65Aw6ls3xDBeKVvHRSh39CXuDZTQsvpeeU9oNMzfFgvqmHqZ6gWpxIl663RyoVEmCAGf1yOg== dependencies: debug "^4.3.1" @@ -346,19 +346,19 @@ connect-mongo@*, connect-mongo@^4.4.1: content-disposition@0.5.4: version "0.5.4" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + 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" content-type@~1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== cookie-parser@^1.4.5: version "1.4.6" - resolved "https://registry.yarnpkg.com/cookie-parser/-/cookie-parser-1.4.6.tgz#3ac3a7d35a7a03bbc7e365073a26074824214594" + resolved "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.6.tgz" integrity sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA== dependencies: cookie "0.4.1" @@ -366,27 +366,27 @@ cookie-parser@^1.4.5: cookie-signature@1.0.6: version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== cookie@0.4.1: version "0.4.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz" integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== cookie@0.4.2: version "0.4.2" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz" integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== cookie@0.5.0: version "0.5.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.5.0.tgz#d1f5d71adec6558c58f389987c366aa47e994f8b" + resolved "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz" integrity sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw== cors@^2.8.5: version "2.8.5" - resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + resolved "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz" integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== dependencies: object-assign "^4" @@ -394,78 +394,95 @@ cors@^2.8.5: create-require@^1.1.0: version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz" integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== +cross-env@^10.1.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-10.1.0.tgz#cfd2a6200df9ed75bfb9cb3d7ce609c13ea21783" + integrity sha512-GsYosgnACZTADcmEyJctkJIoqAhHjttw7RsFrVoJNXbsWWqaq6Ym+7kZjq6mS45O0jij6vtiReppKQEtqWy6Dw== + dependencies: + "@epic-web/invariant" "^1.0.0" + cross-spawn "^7.0.6" + +cross-spawn@^7.0.6: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + debug@2.6.9: version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== dependencies: ms "2.0.0" debug@^4.3.1: version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== dependencies: ms "2.1.2" denque@^2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/denque/-/denque-2.0.1.tgz#bcef4c1b80dc32efe97515744f21a4229ab8934a" + resolved "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz" integrity sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ== depd@2.0.0, depd@~2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== destroy@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz" integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== diff@^4.0.1: version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + resolved "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz" integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== dotenv@^10.0.0: version "10.0.0" - resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + resolved "https://registry.npmjs.org/dotenv/-/dotenv-10.0.0.tgz" integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== dynamic-dedupe@^0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz#06e44c223f5e4e94d78ef9db23a6515ce2f962a1" + resolved "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz" integrity sha512-ssuANeD+z97meYOqd50e04Ze5qp4bPqo8cCkI4TRjZkzAUgIDTrXV1R8QCdINpiI+hw14+rYazvTRdQrz0/rFQ== dependencies: xtend "^4.0.0" ee-first@1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== encodeurl@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== escape-html@~1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== etag@~1.8.1: version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== express-session@^1.17.2: version "1.17.3" - resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.17.3.tgz#14b997a15ed43e5949cb1d073725675dd2777f36" + resolved "https://registry.npmjs.org/express-session/-/express-session-1.17.3.tgz" integrity sha512-4+otWXlShYlG1Ma+2Jnn+xgKUZTMJ5QD3YvfilX3AcocOAbIkVylSWEklzALe/+Pu4qV6TYBj5GwOBFfdKqLBw== dependencies: cookie "0.4.2" @@ -479,7 +496,7 @@ express-session@^1.17.2: express@^4.17.1: version "4.18.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.18.1.tgz#7797de8b9c72c857b9cd0e14a5eea80666267caf" + resolved "https://registry.npmjs.org/express/-/express-4.18.1.tgz" integrity sha512-zZBcOX9TfehHQhtupq57OF8lFZ3UZi08Y97dwFCkD8p9d/d2Y3M+ykKcwaMDEL+4qyUolgBDX6AblpR3fL212Q== dependencies: accepts "~1.3.8" @@ -516,14 +533,14 @@ express@^4.17.1: fill-range@^7.0.1: version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== dependencies: to-regex-range "^5.0.1" finalhandler@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" + resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz" integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== dependencies: debug "2.6.9" @@ -536,37 +553,37 @@ finalhandler@1.2.0: follow-redirects@^1.14.0: version "1.15.1" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.1.tgz#0ca6a452306c9b276e4d3127483e29575e207ad5" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz" integrity sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA== forwarded@0.2.0: version "0.2.0" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz" integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fresh@0.5.2: version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== fs.realpath@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz" integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== fsevents@~2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" - integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== function-bind@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== get-intrinsic@^1.0.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.2.tgz#336975123e05ad0b7ba41f152ee4aadbea6cf598" + resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz" integrity sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA== dependencies: function-bind "^1.1.1" @@ -575,14 +592,14 @@ get-intrinsic@^1.0.2: glob-parent@~5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" glob@^7.1.3: version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz" integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== dependencies: fs.realpath "^1.0.0" @@ -594,19 +611,19 @@ glob@^7.1.3: has-symbols@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz" integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== has@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + resolved "https://registry.npmjs.org/has/-/has-1.0.3.tgz" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: function-bind "^1.1.1" http-errors@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== dependencies: depd "2.0.0" @@ -617,19 +634,19 @@ http-errors@2.0.0: iconv-lite@0.4.24: version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== dependencies: safer-buffer ">= 2.1.2 < 3" ieee754@^1.1.13: version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== inflight@^1.0.4: version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz" integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== dependencies: once "^1.3.0" @@ -637,124 +654,129 @@ inflight@^1.0.4: inherits@2, inherits@2.0.4, inherits@^2.0.1: version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== ip@^1.1.5: version "1.1.8" - resolved "https://registry.yarnpkg.com/ip/-/ip-1.1.8.tgz#ae05948f6b075435ed3307acce04629da8cdbf48" + resolved "https://registry.npmjs.org/ip/-/ip-1.1.8.tgz" integrity sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg== ipaddr.js@1.9.1: version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== is-binary-path@~2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== dependencies: binary-extensions "^2.0.0" is-core-module@^2.9.0: version "2.9.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.9.0.tgz#e1c34429cd51c6dd9e09e0799e396e27b19a9c69" + resolved "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz" integrity sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A== dependencies: has "^1.0.3" is-extglob@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== dependencies: is-extglob "^2.1.1" is-number@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + kruptein@^3.0.0: version "3.0.4" - resolved "https://registry.yarnpkg.com/kruptein/-/kruptein-3.0.4.tgz#68dcd32ee9e6b611c86615a4616fee2ca3b9b769" + resolved "https://registry.npmjs.org/kruptein/-/kruptein-3.0.4.tgz" integrity sha512-614v+4fgOkcw98lI7rMO9HZ+Y2cK6MGYcR/NSVhRXcClUb72LTAf2NibAh8CKSjalY81rfrrjLQgb8TW9RP03Q== dependencies: asn1.js "^5.4.1" make-error@^1.1.1: version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz" integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== media-typer@0.3.0: version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== memory-pager@^1.0.2: version "1.5.0" - resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" + resolved "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz" integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== merge-descriptors@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz" integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== methods@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== mime-db@1.52.0: version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + 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" mime@1.6.0: version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz" integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== minimalistic-assert@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + resolved "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== minimatch@^3.1.1: version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== dependencies: brace-expansion "^1.1.7" minimist@^1.2.6: version "1.2.6" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44" + resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz" integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q== mkdirp@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== mongodb-connection-string-url@^2.5.2: version "2.5.2" - resolved "https://registry.yarnpkg.com/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz#f075c8d529e8d3916386018b8a396aed4f16e5ed" + resolved "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz" integrity sha512-tWDyIG8cQlI5k3skB6ywaEA5F9f5OntrKKsT/Lteub2zgwSUlhqEN2inGgBTm8bpYJf8QYBdA/5naz65XDpczA== dependencies: "@types/whatwg-url" "^8.2.1" @@ -762,7 +784,7 @@ mongodb-connection-string-url@^2.5.2: mongodb@^4.0.0: version "4.7.0" - resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-4.7.0.tgz#99f7323271d93659067695b60e7b4efee2de9bf0" + resolved "https://registry.npmjs.org/mongodb/-/mongodb-4.7.0.tgz" integrity sha512-HhVar6hsUeMAVlIbwQwWtV36iyjKd9qdhY+s4wcU8K6TOj4Q331iiMy+FoPuxEntDIijTYWivwFJkLv8q/ZgvA== dependencies: bson "^4.6.3" @@ -774,7 +796,7 @@ mongodb@^4.0.0: morgan@^1.10.0: version "1.10.0" - resolved "https://registry.yarnpkg.com/morgan/-/morgan-1.10.0.tgz#091778abc1fc47cd3509824653dae1faab6b17d7" + resolved "https://registry.npmjs.org/morgan/-/morgan-1.10.0.tgz" integrity sha512-AbegBVI4sh6El+1gNwvD5YIck7nSA36weD7xvIxG4in80j/UoK8AEGaWnnz8v1GxonMCltmlNs5ZKbGvl9b1XQ== dependencies: basic-auth "~2.0.1" @@ -785,93 +807,98 @@ morgan@^1.10.0: ms@2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== ms@2.1.2: version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== ms@2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== negotiator@0.6.3: version "0.6.3" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== object-assign@^4: version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== object-inspect@^1.9.0: version "1.12.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.2.tgz#c0641f26394532f28ab8d796ab954e43c009a8ea" + resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz" integrity sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ== on-finished@2.4.1: version "2.4.1" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + 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" on-finished@~2.3.0: version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz" integrity sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww== dependencies: ee-first "1.1.1" on-headers@~1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + resolved "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz" integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== once@^1.3.0: version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz" integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== dependencies: wrappy "1" parseurl@~1.3.3: version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== path-is-absolute@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz" integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== +path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + path-parse@^1.0.7: version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz" integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== picomatch@^2.0.4, picomatch@^2.2.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== proxy-addr@~2.0.7: version "2.0.7" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + 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" @@ -879,29 +906,29 @@ proxy-addr@~2.0.7: punycode@^2.1.1: version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" + resolved "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== qs@6.10.3: version "6.10.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e" + resolved "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz" integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ== dependencies: side-channel "^1.0.4" random-bytes@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + resolved "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz" integrity sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ== range-parser@~1.2.1: version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== raw-body@2.5.1: version "2.5.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.1.tgz#fe1b1628b181b700215e5fd42389f98b71392857" + resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz" integrity sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig== dependencies: bytes "3.1.2" @@ -911,14 +938,14 @@ raw-body@2.5.1: readdirp@~3.6.0: version "3.6.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" resolve@^1.0.0: version "1.22.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.1.tgz#27cb2ebb53f91abb49470a928bba7558066ac177" + resolved "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz" integrity sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw== dependencies: is-core-module "^2.9.0" @@ -927,36 +954,36 @@ resolve@^1.0.0: rimraf@^2.6.1: version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== dependencies: glob "^7.1.3" safe-buffer@5.1.2: version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== safe-buffer@5.2.1: version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.1.0: version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== saslprep@^1.0.3: version "1.0.3" - resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" + resolved "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz" integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== dependencies: sparse-bitfield "^3.0.3" send@0.18.0: version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz" integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" @@ -975,7 +1002,7 @@ send@0.18.0: serve-static@1.15.0: version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" + resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz" integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== dependencies: encodeurl "~1.0.2" @@ -985,12 +1012,24 @@ serve-static@1.15.0: setprototypeof@1.2.0: version "1.2.0" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz" integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + side-channel@^1.0.4: version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" + resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz" integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== dependencies: call-bind "^1.0.0" @@ -999,12 +1038,12 @@ side-channel@^1.0.4: smart-buffer@^4.2.0: version "4.2.0" - resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-4.2.0.tgz#6e1d71fa4f18c05f7d0ff216dd16a481d0e8d9ae" + resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz" integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg== socks@^2.6.2: version "2.6.2" - resolved "https://registry.yarnpkg.com/socks/-/socks-2.6.2.tgz#ec042d7960073d40d94268ff3bb727dc685f111a" + resolved "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz" integrity sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA== dependencies: ip "^1.1.5" @@ -1012,7 +1051,7 @@ socks@^2.6.2: source-map-support@^0.5.12: version "0.5.21" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" @@ -1020,63 +1059,63 @@ source-map-support@^0.5.12: source-map@^0.6.0: version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== sparse-bitfield@^3.0.3: version "3.0.3" - resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" + resolved "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz" integrity sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ== dependencies: memory-pager "^1.0.2" statuses@2.0.1: version "2.0.1" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== strip-bom@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz" integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== strip-json-comments@^2.0.0: version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== supports-preserve-symlinks-flag@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + resolved "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== to-regex-range@^5.0.1: version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== dependencies: is-number "^7.0.0" toidentifier@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== tr46@^3.0.0: version "3.0.0" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + resolved "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz" integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== dependencies: punycode "^2.1.1" tree-kill@^1.2.2: version "1.2.2" - resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.2.tgz#4ca09a9092c88b73a7cdc5e8a01b507b0790a0cc" + resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== ts-node-dev@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/ts-node-dev/-/ts-node-dev-2.0.0.tgz#bdd53e17ab3b5d822ef519928dc6b4a7e0f13065" + resolved "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz" integrity sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w== dependencies: chokidar "^3.5.1" @@ -1092,7 +1131,7 @@ ts-node-dev@^2.0.0: ts-node@^10.4.0: version "10.8.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.8.1.tgz#ea2bd3459011b52699d7e88daa55a45a1af4f066" + resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz" integrity sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g== dependencies: "@cspotcode/source-map-support" "^0.8.0" @@ -1111,7 +1150,7 @@ ts-node@^10.4.0: tsconfig@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/tsconfig/-/tsconfig-7.0.0.tgz#84538875a4dc216e5c4a5432b3a4dec3d54e91b7" + resolved "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz" integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw== dependencies: "@types/strip-bom" "^3.0.0" @@ -1121,7 +1160,7 @@ tsconfig@^7.0.0: type-is@~1.6.18: version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz" integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== dependencies: media-typer "0.3.0" @@ -1129,60 +1168,67 @@ type-is@~1.6.18: typescript@^4.7.4: version "4.7.4" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.7.4.tgz#1a88596d1cf47d59507a1bcdfb5b9dfe4d488235" + resolved "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz" integrity sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ== uid-safe@~2.1.5: version "2.1.5" - resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" + resolved "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz" integrity sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA== dependencies: random-bytes "~1.0.0" unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== utils-merge@1.0.1: version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz" integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== v8-compile-cache-lib@^3.0.1: version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz" integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== vary@^1, vary@~1.1.2: version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== webidl-conversions@^7.0.0: version "7.0.0" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz" integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== whatwg-url@^11.0.0: version "11.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + 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" +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + wrappy@1: version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz" integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== xtend@^4.0.0: version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== yn@3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz" integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== From 18d267e24e7d9b8b83929ec04ad99b0806de2de1 Mon Sep 17 00:00:00 2001 From: Adji Bhawantu Date: Sat, 1 Nov 2025 19:59:26 +0700 Subject: [PATCH 2/2] feat: Mendesain ulang UI/UX, menambah pencarian, dan animasi Merombak total tampilan dan pengalaman pengguna (UI/UX) frontend. - Mendesain ulang header: latar belakang putih, logo, dan search bar fungsional. - Mengubah warna tombol Sign In menjadi biru. - Menerapkan grid produk responsif baru (4-3-2). - Mendesain ulang kartu produk menjadi vertikal dengan rating, diskon, dll. - Mengubah mata uang menjadi Test Coin. - Mendesain ulang modal Sign In agar lebih modern. - Menambahkan animasi CSS untuk load-in kartu (fadeInUp) dan hover (zoom/lift). fix: Memperbaiki bug tampilan pada hasil pencarian tunggal - Mengatasi masalah di mana satu hasil pencarian akan tampil gepeng dengan menambahkan min-width ke kartu produk. refactor: Memisahkan logika animasi untuk mengatasi konflik CSS - Memindahkan layout dan animasi load ( adeInUp) ke div wrapper baru (.product-card-wrapper). - Ini menyelesaikan konflik antara properti nimation (saat load) dan ransition (saat hover), yang memungkinkan animasi hover (zoom) berfungsi dengan benar. --- frontend/public/index.html | 19 +- frontend/public/tekindo-logo.png | Bin 0 -> 53462 bytes frontend/public/tekindomall-logo.png | Bin 0 -> 30703 bytes frontend/src/Shop/App.css | 163 ++++++++++++ frontend/src/Shop/components/Header.tsx | 39 +-- frontend/src/Shop/components/ProductCard.css | 157 ++++++++++++ frontend/src/Shop/components/ProductCard.tsx | 107 ++++++-- frontend/src/Shop/components/SignIn.css | 100 ++++++++ frontend/src/Shop/components/SignIn.tsx | 48 ++-- frontend/src/Shop/index.tsx | 247 ++++++++++++------- frontend/src/index.tsx | 21 +- 11 files changed, 725 insertions(+), 176 deletions(-) create mode 100644 frontend/public/tekindo-logo.png create mode 100644 frontend/public/tekindomall-logo.png create mode 100644 frontend/src/Shop/App.css create mode 100644 frontend/src/Shop/components/ProductCard.css create mode 100644 frontend/src/Shop/components/SignIn.css diff --git a/frontend/public/index.html b/frontend/public/index.html index d68d739a..65b60999 100644 --- a/frontend/public/index.html +++ b/frontend/public/index.html @@ -2,14 +2,11 @@ - + - - + + - + - - React App + + Tekindo Mall diff --git a/frontend/public/tekindo-logo.png b/frontend/public/tekindo-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..bb4ab650b563861c6d872a358e0bdc1937ea121c GIT binary patch literal 53462 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

ld*OCM8^D^KmZA$9m{5t@{Sy#jnlA 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

}TTNKoh{ZMR;}cTOo#$+HoUxH> zci5Pl(>LyxNF3b$mvn%WR9%VM);js~6&B&+Pnvim(yu;47q5~6ZCYh` z|NRJuk1P`pEd1cCOKiBb>F(fk%*&{9U^b9Xy`#N9p_P8pLH;(n`N*+j$G+OtHI`kK zih>yxx=5XT{oTryD}R(qrM^av>Asv@QauZb!C4&r^hxm&Rmls1$Dj87IyMr`P;{4* zKg%g1t@>3oA@I?pHG!3WY*=xPUVI>*&;P&MZo6%7qR2`t6$djZ3l=QcL%!ZcK<#S; z)V@rPZ|JGC^od>yIne9MwKvoKZ=|$#^Zv&Pi2WS_vB(X2DVE!FiRjXFb zF-`N+q@eET4e9C=E^qKg*5miTk+0&RCxv(?Ilq~F>Uub7eWHzg)9s%@bez z;um}6TEkukW>S_cSwai!QTlo8vBzqM4I6eHIi}!7zen|K>fU^k(5@)*+ME6UV#D_I z{p9=rxxSRBl26cYF>!|*Z@e)SXK#^S3udZ_f_#vEOw%-oDmu-wtjkCtFCy3Glg|{q zLGtoOmSP)p-~Gws>EZixdT@TW+~!8#zxFVK0$48~}&{-YP!dr`L!| zT1{jI0lMkrGoHMtvE-$UCf|d}H+2}<4}5)SHQs=E?oComgD$qw_4NIP;w#1Ti%CZb z?$41h)ISgP)^L^_Q;)94$@Tr@n-1sf%IEXjnwpxny#M|0_xbT5?JPF#-YEYcy{hi2 T-lq$D00000NkvXXu0mjfoq@yH literal 0 HcmV?d00001 diff --git a/frontend/public/tekindomall-logo.png b/frontend/public/tekindomall-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..d491582b5260f88fd4bd0388b10e9f19ead48880 GIT binary patch literal 30703 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 void; onSignOut: () => void; - user: User | null + user: User | null; + // Props baru untuk search + searchQuery: string; + onSearchChange: (event: React.ChangeEvent) => void; } -const headerStyle: CSSProperties = { - padding: 8, - backgroundColor: "gray", - color: "white", - width: "100%", - display: "flex", - alignItems: "center", - justifyContent: "space-between", -}; - export default function Header(props: Props) { return ( -

-
Pi Bakery
+
+ {/* Container untuk logo */} +
+ Tekindo Mall Logo +
+ + {/* --- SEARCH BAR BARU --- */} +
+ +
-
+ {/* Tombol Sign in/out */} +
{props.user === null ? ( ) : (
- @{props.user.username} + @{props.user.username}{" "} +
)}
diff --git a/frontend/src/Shop/components/ProductCard.css b/frontend/src/Shop/components/ProductCard.css new file mode 100644 index 00000000..0ac4b160 --- /dev/null +++ b/frontend/src/Shop/components/ProductCard.css @@ -0,0 +1,157 @@ +/* --- ProductCard.css (Lengkap & Diperbaiki) --- */ + +:root { + --primary-blue: #0047ab; + --accent-yellow: #ffd700; + --white-bg: #ffffff; + --text-dark: #333333; + --text-medium: #666666; + --text-light: #999999; + --sale-red: #d9534f; +} + +/* --- Keyframe DIHAPUS dari sini --- */ + +.product-card { + font-family: Arial, sans-serif; + border: 1px solid #e0e0e0; + border-radius: 10px; + overflow: hidden; + box-shadow: 0 4px 10px rgba(0, 0, 0, 0.05); + background: var(--white-bg); + display: flex; + flex-direction: column; + + /* --- INI BAGIAN PENTING UNTUK HOVER --- */ + /* State awal transform (tidak bergerak) */ + transform: translateY(0); + /* Transisi untuk hover (TIDAK ADA KONFLIK LAGI) */ + transition: transform 0.2s ease-in-out, box-shadow 0.2s ease-in-out; + + /* Layout, Grid, dan Animasi Load DIHAPUS dari sini */ + + /* Pastikan kartu mengisi wrapper-nya */ + height: 100%; + box-sizing: border-box; +} + +/* --- Animasi Hover (SEKARANG AKAN BEKERJA) --- */ +.product-card:hover { + transform: translateY(-5px) scale(1.03); + box-shadow: 0 8px 16px rgba(0, 0, 0, 0.1); + z-index: 10; +} + +/* --- Konten Kartu (TETAP SAMA) --- */ +.product-image-container { + position: relative; + width: 100%; + padding-top: 100%; + overflow: hidden; + border-bottom: 1px solid #eee; +} + +.product-image { + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + object-fit: cover; +} + +.product-alert { + position: absolute; + top: 10px; + left: 10px; + background-color: var(--accent-yellow); + color: var(--text-dark); + padding: 5px 10px; + border-radius: 5px; + font-size: 0.8em; + font-weight: bold; + z-index: 1; + text-transform: uppercase; +} + +.product-info { + padding: 15px; + display: flex; + flex-direction: column; + flex-grow: 1; +} + +.product-type { + font-size: 0.8em; + color: var(--text-medium); + margin-bottom: 5px; + text-transform: capitalize; +} + +.product-info h3 { + font-size: 1.2em; + font-weight: 600; + color: var(--text-dark); + margin: 0 0 8px 0; + min-height: 40px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.product-rating { + margin-bottom: 10px; + color: var(--accent-yellow); + font-size: 1em; + display: flex; + align-items: center; +} +.product-rating span { + margin-right: 2px; +} +.product-rating .rating-value { + color: var(--text-medium); + font-size: 0.9em; + margin-left: 5px; +} + +.product-price { + margin-top: auto; + margin-bottom: 15px; + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 3px; +} + +.product-price-original { + font-size: 0.9em; + color: var(--text-light); + text-decoration: line-through; +} + +.product-price-discount { + font-size: 1.4em; + font-weight: bold; + color: var(--sale-red); +} + +.product-action-button { + background-color: var(--primary-blue); + color: var(--white-bg); + border: none; + padding: 12px; + border-radius: 5px; + font-size: 0.9em; + font-weight: bold; + cursor: pointer; + text-align: center; + transition: background-color 0.2s ease; + width: 100%; +} + +.product-action-button:hover { + background-color: #003788; +} + +/* --- Media Queries DIHAPUS dari sini --- */ diff --git a/frontend/src/Shop/components/ProductCard.tsx b/frontend/src/Shop/components/ProductCard.tsx index db1c31ce..78b24539 100644 --- a/frontend/src/Shop/components/ProductCard.tsx +++ b/frontend/src/Shop/components/ProductCard.tsx @@ -1,34 +1,95 @@ -import React from 'react'; +// --- ProductCard.tsx --- + +import React from "react"; +import "./ProductCard.css"; interface Props { - name: string, - description: string, - price: number, - pictureCaption: string, - pictureURL: string, - onClickBuy: () => void, + name: string; + description: string; + pictureURL: string; + onClickBuy: () => void; + productType: string; + rating: number; + price: number; + originalPrice?: number; + alertText?: string; + buttonText?: string; + + // --- TAMBAHKAN PROPS INI --- + style?: React.CSSProperties; } +// ... (Fungsi renderRating Anda tetap sama) ... +const renderRating = (rating: number) => { + const totalStars = 5; + let stars = []; + for (let i = 1; i <= totalStars; i++) { + if (i <= Math.floor(rating)) { + stars.push( + + ★ + + ); + } else { + stars.push( + + ★ + + ); + } + } + return ( + <> + {stars} + ({rating.toFixed(1)}) + + ); +}; + export default function ProductCard(props: Props) { + const { + name, + pictureURL, + onClickBuy, + productType, + rating, + price, + originalPrice, + alertText, + buttonText, + // --- AMBIL PROPS STYLE --- + style, + } = props; + + const displayPrice = price; + const displayOriginalPrice = originalPrice !== undefined ? originalPrice : undefined; + return ( -
-
-
- {props.name} -
+ // --- TERAPKAN STYLE DI SINI --- +
+
+ {/* ... (sisa kode Anda tetap sama) ... */} + {alertText &&
{alertText}
} + {name} +
+ +
+ {/* ... (sisa kode Anda tetap sama) ... */} +
{productType}
+ +

{name}

+ +
{renderRating(rating)}
-
-

{props.name}

-

{props.description}

+
+ {displayOriginalPrice !== undefined && {displayOriginalPrice} Test Coin} + {displayPrice} Test Coin
-
-
- {props.price} Test-π
- +
- - {props.pictureCaption}
- ) -} \ No newline at end of file + ); +} diff --git a/frontend/src/Shop/components/SignIn.css b/frontend/src/Shop/components/SignIn.css new file mode 100644 index 00000000..59c87c15 --- /dev/null +++ b/frontend/src/Shop/components/SignIn.css @@ -0,0 +1,100 @@ +/* --- SignIn.css --- */ + +:root { + --primary-blue: #0047ab; + --accent-yellow: #ffd700; + --white-bg: #ffffff; + --text-dark: #333333; +} + +/* Overlay gelap di belakang modal */ +.modal-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.6); /* Sedikit lebih gelap */ + display: flex; + justify-content: center; + align-items: center; + z-index: 1000; /* Pastikan di atas semua elemen lain */ +} + +/* Kontainer utama modal */ +.modal-content { + background-color: var(--white-bg); + padding: 30px; + border-radius: 12px; /* Sudut lebih bulat */ + box-shadow: 0 8px 25px rgba(0, 0, 0, 0.2); /* Bayangan lebih dalam */ + text-align: center; + max-width: 400px; /* Lebar maksimum modal */ + width: 90%; /* Responsif */ + transform: translateY(-20px); /* Sedikit geser ke atas untuk efek */ + animation: modal-fade-in 0.3s forwards; /* Animasi muncul */ +} + +/* Animasi muncul modal */ +@keyframes modal-fade-in { + from { + opacity: 0; + transform: translateY(-40px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +.modal-content h2 { + color: var(--primary-blue); /* Judul warna biru */ + font-size: 1.8em; + margin-bottom: 15px; +} + +.modal-content p { + color: var(--text-dark); + font-size: 1.1em; + line-height: 1.5; + margin-bottom: 25px; +} + +.modal-buttons { + display: flex; + gap: 15px; /* Jarak antar tombol */ + justify-content: center; +} + +.modal-button { + padding: 12px 25px; + border-radius: 8px; + font-size: 1em; + font-weight: bold; + cursor: pointer; + transition: background-color 0.2s ease, color 0.2s ease; + flex: 1; /* Agar tombol memiliki lebar yang sama */ + max-width: 150px; +} + +.modal-button.primary { + background-color: var(--primary-blue); + color: var(--white-bg); + border: 2px solid var(--primary-blue); +} + +.modal-button.primary:hover { + background-color: #003788; + border-color: #003788; +} + +.modal-button.secondary { + background-color: transparent; + color: var(--text-dark); + border: 2px solid #ccc; +} + +.modal-button.secondary:hover { + background-color: #f0f0f0; + color: var(--text-dark); + border-color: #aaa; +} diff --git a/frontend/src/Shop/components/SignIn.tsx b/frontend/src/Shop/components/SignIn.tsx index 1286a9b2..83044f8a 100644 --- a/frontend/src/Shop/components/SignIn.tsx +++ b/frontend/src/Shop/components/SignIn.tsx @@ -1,32 +1,32 @@ -import React, { CSSProperties } from 'react'; +// --- SignIn.tsx --- -interface Props { - onSignIn: () => void, - onModalClose: () => void, -} +import React from "react"; +import "./SignIn.css"; // <- Impor file CSS baru Anda -const modalStyle: CSSProperties = { - background: 'white', - position: 'absolute', - left: '15vw', - top: '40%', - width: '70vw', - height: '25vh', - border: '1px solid black', - textAlign: 'center', - display: 'flex', - flexDirection: 'column', - justifyContent: 'center' +interface Props { + onSignIn: () => void; + onModalClose: () => void; } export default function SignIn(props: Props) { return ( -
-

You need to sign in first.

-
- - +
+ {" "} + {/* Klik di luar modal untuk menutup */} +
e.stopPropagation()}> + {" "} + {/* Mencegah penutupan saat klik di dalam modal */} +

Login Diperlukan

+

Anda perlu masuk (sign in) terlebih dahulu untuk melanjutkan pembelian ini.

+
+ + +
- ) -} \ No newline at end of file + ); +} diff --git a/frontend/src/Shop/index.tsx b/frontend/src/Shop/index.tsx index da9ece8f..73794f64 100644 --- a/frontend/src/Shop/index.tsx +++ b/frontend/src/Shop/index.tsx @@ -1,152 +1,209 @@ -import React, {useState} from 'react'; -import axios from 'axios'; -import ProductCard from './components/ProductCard'; -import SignIn from './components/SignIn'; -import Header from './components/Header'; +// --- index.tsx --- -type MyPaymentMetadata = {}; +import React, { useState } from "react"; +import axios from "axios"; +// Hapus impor motion jika masih ada + +import ProductCard from "./components/ProductCard"; +import SignIn from "./components/SignIn"; +import Header from "./components/Header"; +import "./App.css"; // Pastikan App.css diimpor +// --- TIPE DATA LENGKAP --- +type MyPaymentMetadata = {}; type AuthResult = { - accessToken: string, + accessToken: string; user: { - uid: string, - username: string - } + uid: string; + username: string; + }; }; - -export type User = AuthResult['user']; - +export type User = AuthResult["user"]; interface PaymentDTO { - amount: number, - user_uid: string, - created_at: string, - identifier: string, - metadata: Object, - memo: string, + amount: number; + user_uid: string; + created_at: string; + identifier: string; + metadata: Object; + memo: string; status: { - developer_approved: boolean, - transaction_verified: boolean, - developer_completed: boolean, - cancelled: boolean, - user_cancelled: boolean, - }, - to_address: string, + developer_approved: boolean; + transaction_verified: boolean; + developer_completed: boolean; + cancelled: boolean; + user_cancelled: boolean; + }; + to_address: string; transaction: null | { - txid: string, - verified: boolean, - _link: string, - }, -}; - -// Make TS accept the existence of our window.__ENV object - defined in index.html: + txid: string; + verified: boolean; + _link: string; + }; +} interface WindowWithEnv extends Window { __ENV?: { - backendURL: string, // REACT_APP_BACKEND_URL environment variable - sandbox: "true" | "false", // REACT_APP_SANDBOX_SDK environment variable - string, not boolean! - } + backendURL: string; + sandbox: "true" | "false"; + }; } +// --- KONFIGURASI LENGKAP --- const _window: WindowWithEnv = window; const backendURL = _window.__ENV && _window.__ENV.backendURL; -const axiosClient = axios.create({ baseURL: `${backendURL}`, timeout: 20000, withCredentials: true}); -const config = {headers: {'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*'}}; - +const axiosClient = axios.create({ baseURL: `${backendURL}`, timeout: 20000, withCredentials: true }); +const config = { headers: { "Content-Type": "application/json", "Access-Control-Allow-Origin": "*" } }; + +// --- DATA PRODUK LENGKAP --- +const allProducts = [ + { + id: "camera_001", + name: "Camera DSLR Pro", + description: "Kamera DSLR profesional untuk hasil foto yang menakjubkan.", + pictureURL: "https://images.pexels.com/photos/1010492/pexels-photo-1010492.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2", + productType: "Elektronik", + rating: 4.9, + price: 1000, + originalPrice: 1500, + alertText: "Sale!", + buttonText: "Add to Cart", + }, + { + id: "pc_gaming_001", + name: "Gaming PC Ultimate", + description: "Komputer gaming berperforma tinggi dengan GPU terbaru.", + pictureURL: "https://images.pexels.com/photos/4096956/pexels-photo-4096956.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2", + productType: "Komputer", + rating: 4.8, + price: 4000, + originalPrice: 5000, + alertText: "Diskon 20%", + buttonText: "Add to Cart", + }, + { + id: "earphone_001", + name: "Wireless Earphone", + description: "Earphone nirkabel dengan kualitas suara premium dan noise cancellation.", + pictureURL: "https://images.pexels.com/photos/3785084/pexels-photo-3785084.jpeg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2", + productType: "Aksesoris", + rating: 4.5, + price: 1500, + originalPrice: 2000, + alertText: "Sale!", + buttonText: "Add to Cart", + }, + { + id: "laptop_001", + name: "Ultrabook Laptop", + description: "Laptop tipis dan ringan, cocok untuk produktivitas sehari-hari.", + pictureURL: "https://images.pexels.com/photos/7974/pexels-photo.jpg?auto=compress&cs=tinysrgb&w=1260&h=750&dpr=2", + productType: "Komputer", + rating: 4.6, + price: 2000, + originalPrice: 2500, + alertText: "Hemat!", + buttonText: "Add to Cart", + }, +]; export default function Shop() { const [user, setUser] = useState(null); const [showModal, setShowModal] = useState(false); + const [searchQuery, setSearchQuery] = useState(""); + // --- SEMUA FUNGSI (LENGKAP) --- const signIn = async () => { - const scopes = ['username', 'payments']; + const scopes = ["username", "payments"]; const authResult: AuthResult = await window.Pi.authenticate(scopes, onIncompletePaymentFound); signInUser(authResult); setUser(authResult.user); - } - + }; const signOut = () => { setUser(null); signOutUser(); - } - + }; const signInUser = (authResult: AuthResult) => { - axiosClient.post('/user/signin', {authResult}); + axiosClient.post("/user/signin", { authResult }); return setShowModal(false); - } - + }; const signOutUser = () => { - return axiosClient.get('/user/signout'); - } - + return axiosClient.get("/user/signout"); + }; const onModalClose = () => { setShowModal(false); - } - + }; const orderProduct = async (memo: string, amount: number, paymentMetadata: MyPaymentMetadata) => { - if(user === null) { + if (user === null) { return setShowModal(true); } const paymentData = { amount, memo, metadata: paymentMetadata }; - const callbacks = { - onReadyForServerApproval, - onReadyForServerCompletion, - onCancel, - onError - }; + const callbacks = { onReadyForServerApproval, onReadyForServerCompletion, onCancel, onError }; const payment = await window.Pi.createPayment(paymentData, callbacks); console.log(payment); - } - + }; const onIncompletePaymentFound = (payment: PaymentDTO) => { console.log("onIncompletePaymentFound", payment); - return axiosClient.post('/payments/incomplete', {payment}); - } - + return axiosClient.post("/payments/incomplete", { payment }); + }; const onReadyForServerApproval = (paymentId: string) => { console.log("onReadyForServerApproval", paymentId); - axiosClient.post('/payments/approve', {paymentId}, config); - } - + axiosClient.post("/payments/approve", { paymentId }, config); + }; const onReadyForServerCompletion = (paymentId: string, txid: string) => { console.log("onReadyForServerCompletion", paymentId, txid); - axiosClient.post('/payments/complete', {paymentId, txid}, config); - } - + axiosClient.post("/payments/complete", { paymentId, txid }, config); + }; const onCancel = (paymentId: string) => { console.log("onCancel", paymentId); - return axiosClient.post('/payments/cancelled_payment', {paymentId}); - } - + return axiosClient.post("/payments/cancelled_payment", { paymentId }); + }; const onError = (error: Error, payment?: PaymentDTO) => { console.log("onError", error); if (payment) { console.log(payment); - // handle the error accordingly } - } + }; + const handleSearchChange = (event: React.ChangeEvent) => { + setSearchQuery(event.target.value); + }; + const filteredProducts = allProducts.filter((product) => product.name.toLowerCase().includes(searchQuery.toLowerCase()) || product.productType.toLowerCase().includes(searchQuery.toLowerCase())); + // --- AKHIR DARI FUNGSI --- return ( <> -
- - orderProduct("Order Apple Pie", 3, { productId: 'apple_pie_1' })} - /> - orderProduct("Order Lemon Meringue Pie", 5, { productId: 'lemon_pie_1' })} - /> - - { showModal && } +
+ +
+ {filteredProducts.map((product, index) => ( + /* --- INI PERUBAHANNYA --- */ + /* Kita tambahkan wrapper div untuk menangani layout dan animasi load */ +
+ orderProduct(`Order ${product.name}`, product.price, { productId: product.id })} + productType={product.productType} + rating={product.rating} + price={product.price} + originalPrice={product.originalPrice} + alertText={product.alertText} + buttonText={product.buttonText} + /> +
+ /* --- AKHIR PERUBAHAN --- */ + ))} + + {filteredProducts.length === 0 && ( +
+

Produk tidak ditemukan

+

Coba kata kunci lain untuk "{searchQuery}"

+
+ )} +
+ + {showModal && } ); } diff --git a/frontend/src/index.tsx b/frontend/src/index.tsx index 571dc732..53a1a052 100644 --- a/frontend/src/index.tsx +++ b/frontend/src/index.tsx @@ -1,12 +1,19 @@ -import React from 'react'; -import ReactDOM from 'react-dom'; -import 'normalize.css'; -import './defaults.css'; -import Shop from './Shop'; +// --- File: frontend/src/index.tsx --- +import React from "react"; +// --- PERBAIKAN 1: Impor 'react-dom' (bukan 'react-dom/client') --- +import ReactDOM from "react-dom"; + +// Impor CSS global Anda +import "./defaults.css"; + +// Impor komponen utama Shop Anda +import Shop from "./Shop"; + +// --- PERBAIKAN 2: Gunakan sintaks 'ReactDOM.render' yang lama --- ReactDOM.render( , - document.getElementById('root') -); \ No newline at end of file + document.getElementById("root") +);