From a8ed2ac85085b0148838c185987b3a09c1da7d9d Mon Sep 17 00:00:00 2001 From: AronIpeka Date: Tue, 19 Mar 2024 16:06:09 +0700 Subject: [PATCH 01/10] codeacademy - mongoDB --- codeacademy - mongoDB.png | Bin 0 -> 118005 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 codeacademy - mongoDB.png diff --git a/codeacademy - mongoDB.png b/codeacademy - mongoDB.png new file mode 100644 index 0000000000000000000000000000000000000000..cc397e1ad601d51d590846d862a7041c2e1a31bc GIT binary patch literal 118005 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 literal 0 HcmV?d00001 From 9e53c2f40c2eb9d8cc7649692e4be0728577720d Mon Sep 17 00:00:00 2001 From: AronIpeka Date: Mon, 25 Mar 2024 14:33:56 +0700 Subject: [PATCH 02/10] fancy_todo_odm --- fancy-todo-odm/.gitignore | 2 + .../fancy-todo-odm.postman_collection.json | 257 ++++ fancy-todo-odm/package-lock.json | 1276 +++++++++++++++++ fancy-todo-odm/package.json | 19 + fancy-todo-odm/src/app.js | 10 + .../src/controllers/todo.controller.js | 94 ++ .../src/controllers/user.controller.js | 94 ++ fancy-todo-odm/src/index.js | 40 + fancy-todo-odm/src/models/todo.model.js | 24 + fancy-todo-odm/src/models/user.model.js | 22 + fancy-todo-odm/src/routes/index.js | 12 + fancy-todo-odm/src/routes/todo.route.js | 14 + fancy-todo-odm/src/routes/user.route.js | 15 + fancy-todo-odm/src/services/todo.service.js | 33 + fancy-todo-odm/src/services/user.service.js | 62 + latihan-mongodb/.gitignore | 2 + latihan-mongodb/app.js | 44 + latihan-mongodb/models/user.js | 22 + latihan-mongodb/package-lock.json | 967 +++++++++++++ latihan-mongodb/package.json | 18 + simple-project/.gitignore | 2 + simple-project/api.js | 98 ++ simple-project/package-lock.json | 1272 ++++++++++++++++ simple-project/package.json | 20 + simple-project/server.js | 14 + simple-project/studentschema.js | 11 + 26 files changed, 4444 insertions(+) create mode 100644 fancy-todo-odm/.gitignore create mode 100644 fancy-todo-odm/fancy-todo-odm.postman_collection.json create mode 100644 fancy-todo-odm/package-lock.json create mode 100644 fancy-todo-odm/package.json create mode 100644 fancy-todo-odm/src/app.js create mode 100644 fancy-todo-odm/src/controllers/todo.controller.js create mode 100644 fancy-todo-odm/src/controllers/user.controller.js create mode 100644 fancy-todo-odm/src/index.js create mode 100644 fancy-todo-odm/src/models/todo.model.js create mode 100644 fancy-todo-odm/src/models/user.model.js create mode 100644 fancy-todo-odm/src/routes/index.js create mode 100644 fancy-todo-odm/src/routes/todo.route.js create mode 100644 fancy-todo-odm/src/routes/user.route.js create mode 100644 fancy-todo-odm/src/services/todo.service.js create mode 100644 fancy-todo-odm/src/services/user.service.js create mode 100644 latihan-mongodb/.gitignore create mode 100644 latihan-mongodb/app.js create mode 100644 latihan-mongodb/models/user.js create mode 100644 latihan-mongodb/package-lock.json create mode 100644 latihan-mongodb/package.json create mode 100644 simple-project/.gitignore create mode 100644 simple-project/api.js create mode 100644 simple-project/package-lock.json create mode 100644 simple-project/package.json create mode 100644 simple-project/server.js create mode 100644 simple-project/studentschema.js diff --git a/fancy-todo-odm/.gitignore b/fancy-todo-odm/.gitignore new file mode 100644 index 000000000..13dfa3637 --- /dev/null +++ b/fancy-todo-odm/.gitignore @@ -0,0 +1,2 @@ +.env +node_modules/ \ No newline at end of file diff --git a/fancy-todo-odm/fancy-todo-odm.postman_collection.json b/fancy-todo-odm/fancy-todo-odm.postman_collection.json new file mode 100644 index 000000000..f9bf870e1 --- /dev/null +++ b/fancy-todo-odm/fancy-todo-odm.postman_collection.json @@ -0,0 +1,257 @@ +{ + "info": { + "_postman_id": "c53be2ea-645c-41bf-bfc7-a24d59327496", + "name": "fancy-todo-odm", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "28737688" + }, + "item": [ + { + "name": "get all user", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:3001/user", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "user" + ] + } + }, + "response": [] + }, + { + "name": "create user", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Riska Veli\",\r\n \"email\": \"riska.veli@example.com\",\r\n \"phone\": 1234567890\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3001/user", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "user" + ] + } + }, + "response": [] + }, + { + "name": "update user by /user/:id", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Jane Doe Updated\",\r\n \"email\": \"jane.doe.updated@example.com\",\r\n \"phone\": 9876543210\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3001/user/65fa8f2d77d7fd1cd28dd27d", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "user", + "65fa8f2d77d7fd1cd28dd27d" + ] + } + }, + "response": [] + }, + { + "name": "delete user by /user/:id", + "request": { + "method": "DELETE", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3001/user/65fa8f2d77d7fd1cd28dd27d", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "user", + "65fa8f2d77d7fd1cd28dd27d" + ] + } + }, + "response": [] + }, + { + "name": "get user by /user/:id", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:3001/user/66011a361c5c31bdd4f7a8d3", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "user", + "66011a361c5c31bdd4f7a8d3" + ] + } + }, + "response": [] + }, + { + "name": "create todo /user/:id", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"title\": \"Sample Todo\",\r\n \"description\": \"This is a sample todo item\",\r\n \"status\": \"pending\",\r\n \"userId\": \"66011a361c5c31bdd4f7a8d3\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3001/todo", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "todo" + ] + } + }, + "response": [] + }, + { + "name": "get all todo", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:3001/todo", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "todo" + ] + } + }, + "response": [] + }, + { + "name": "update /todo/:id", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"title\": \"Updated Sample Todo\",\r\n \"status\": \"completed\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3001/todo/66011d681b180073e00e7f74", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "todo", + "66011d681b180073e00e7f74" + ] + } + }, + "response": [] + }, + { + "name": "delete /todo/:id", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "http://localhost:3001/todo/66011d681b180073e00e7f74", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "todo", + "66011d681b180073e00e7f74" + ] + } + }, + "response": [] + }, + { + "name": "get /todo/:id", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:3001/todo/:id", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "todo", + ":id" + ], + "variable": [ + { + "key": "id", + "value": "" + } + ] + } + }, + "response": [] + } + ] +} \ No newline at end of file diff --git a/fancy-todo-odm/package-lock.json b/fancy-todo-odm/package-lock.json new file mode 100644 index 000000000..b94dc4886 --- /dev/null +++ b/fancy-todo-odm/package-lock.json @@ -0,0 +1,1276 @@ +{ + "name": "fancy-todo-odm", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "fancy-todo-odm", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dotenv": "^16.4.5", + "express": "^4.18.3", + "mongoose": "^8.2.2", + "nodemon": "^3.1.0" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", + "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.4.tgz", + "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.5.0.tgz", + "integrity": "sha512-DXf1BTAS8vKyR90BO4x5v3rKVarmkdkzwOrnYDFdjAY694ILNDkmA3uRh1xXJEl+C1DAh8XCvAQ+Gh3kzubtpg==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", + "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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==", + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz", + "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.2.2.tgz", + "integrity": "sha512-6sMxe1d3k/dBjiOX4ExNTNOP0g1x0iq8eXyg+ttgIXM3HLnQ0IUyXRwVVAPFFY6O4/8uYN5dB0Ec72FrexbPpw==", + "dependencies": { + "bson": "^6.2.0", + "kareem": "2.5.1", + "mongodb": "6.3.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/mongodb": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.3.0.tgz", + "integrity": "sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.2.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/fancy-todo-odm/package.json b/fancy-todo-odm/package.json new file mode 100644 index 000000000..32da5b500 --- /dev/null +++ b/fancy-todo-odm/package.json @@ -0,0 +1,19 @@ +{ + "name": "fancy-todo-odm", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "npx nodemon src/index.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "dotenv": "^16.4.5", + "express": "^4.18.3", + "mongoose": "^8.2.2", + "nodemon": "^3.1.0" + } +} diff --git a/fancy-todo-odm/src/app.js b/fancy-todo-odm/src/app.js new file mode 100644 index 000000000..2a6f83235 --- /dev/null +++ b/fancy-todo-odm/src/app.js @@ -0,0 +1,10 @@ +const express = require("express"); +const app = express(); +const router = require("../src/routes"); + +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); + +app.use(router); + +module.exports = app; diff --git a/fancy-todo-odm/src/controllers/todo.controller.js b/fancy-todo-odm/src/controllers/todo.controller.js new file mode 100644 index 000000000..6e8f44692 --- /dev/null +++ b/fancy-todo-odm/src/controllers/todo.controller.js @@ -0,0 +1,94 @@ +const todoService = require('../services/todo.service') + +const showTodos = async(req, res) => { + try{ + const result = await todoService.showTodos() + res.status(200).send({ + status: 200, + message: "Get todos Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const createTodo = async (req, res) => { + try{ + const { title, description, status, userId } = req.body + const result = await todoService.createTodo(title, description, status, userId) + res.status(200).send({ + status: 200, + message: "Create todo Success", + data: result, + }) + + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const getTodoById = async(req, res) => { + try{ + const id = req.params.id + const result = await todoService.getTodoById(id) + res.status(200).send({ + status: 200, + message: "Get todo by id Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const updateTodo = async (req, res) => { + try{ + const id = req.params.id + const { title, description, status, userId} = req.body + const result = await todoService.updateTodo(id, title, description, status, userId) + res.status(200).send({ + status: 200, + message: "Update todo Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const deleteTodo = async (req, res) => { + try{ + const id = req.params.id + const result = await todoService.deleteTodo(id) + res.status(200).send({ + status: 200, + message: "Delete todo Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +module.exports = { createTodo, showTodos, getTodoById, updateTodo, deleteTodo} \ No newline at end of file diff --git a/fancy-todo-odm/src/controllers/user.controller.js b/fancy-todo-odm/src/controllers/user.controller.js new file mode 100644 index 000000000..f3bab58b3 --- /dev/null +++ b/fancy-todo-odm/src/controllers/user.controller.js @@ -0,0 +1,94 @@ +const userService = require('../services/user.service') + +const showUsers = async(req, res) => { + try{ + const result = await userService.showUsers() + res.status(200).send({ + status: 200, + message: "Get users Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const createUser = async (req, res) => { + try{ + const { name, email, phone } = req.body + const result = await userService.createUser(name, email, phone) + res.status(200).send({ + status: 200, + message: "Create user Success", + data: result, + }) + + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const getUserById = async(req, res) => { + try{ + const id = req.params.id + const result = await userService.getUserById(id) + res.status(200).send({ + status: 200, + message: "Get user by id Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const updateUser = async (req, res) => { + try{ + const id = req.params.id + const { name, email, phone} = req.body + const result = await userService.updateUser(id, name, email, phone) + res.status(200).send({ + status: 200, + message: "Update user Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const deleteUser = async (req, res) => { + try{ + const id = req.params.id + const result = await userService.deleteUser(id) + res.status(200).send({ + status: 200, + message: "Delete user Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +module.exports = { createUser, showUsers, getUserById, updateUser, deleteUser} \ No newline at end of file diff --git a/fancy-todo-odm/src/index.js b/fancy-todo-odm/src/index.js new file mode 100644 index 000000000..017d1cf3f --- /dev/null +++ b/fancy-todo-odm/src/index.js @@ -0,0 +1,40 @@ +require('dotenv').config() +const app = require('./app') +const mongoose = require('mongoose') + +let server; +const port = 3001 + +mongoose.connect(process.env.DATABASE_URL, { +}).then(() => { + console.log('Connected to MongoDB') + server = app.listen(port, ()=> { + console.log(`Connected to http://localhost:${port}`) + }) +}) + +const exitHandler = () => { + if(server){ + server.close(()=> { + console.log('Server closed') + process.exit(1) + }) + }else{ + process.exit(1) + } +} + +const unexpectedErrorHandler = (err) => { + console.log(err) + exitHandler() +} + +process.on('uncaughtException', unexpectedErrorHandler) +process.on('unhandledRejection', unexpectedErrorHandler) + +process.on('SIGTERM', () => { + console.log('SIGTERM Receiver') + if(server){ + server.close() + } +}) \ No newline at end of file diff --git a/fancy-todo-odm/src/models/todo.model.js b/fancy-todo-odm/src/models/todo.model.js new file mode 100644 index 000000000..54c63338a --- /dev/null +++ b/fancy-todo-odm/src/models/todo.model.js @@ -0,0 +1,24 @@ +const mongoose = require("mongoose"); + +const todoSchema = new mongoose.Schema({ + title: { + type: String, + required: true, + }, + description: { + type: String, + required: true, + }, + status: { + type: String, + required: true, + }, + userId: { + type: mongoose.Schema.Types.ObjectId, + ref: "User" + } +}) + +const Todo = mongoose.model("Todo", todoSchema) + +module.exports = Todo \ No newline at end of file diff --git a/fancy-todo-odm/src/models/user.model.js b/fancy-todo-odm/src/models/user.model.js new file mode 100644 index 000000000..7892a4285 --- /dev/null +++ b/fancy-todo-odm/src/models/user.model.js @@ -0,0 +1,22 @@ +const mongoose = require("mongoose"); + +const userSchema = new mongoose.Schema({ + name: { + type: String, + required: true, + }, + email: { + type: String, + required: true, + unique: true, + }, + phone: { + type: Number, + required: true, + unique: true, + }, +}); + +const User = mongoose.model("User", userSchema); + +module.exports = User; \ No newline at end of file diff --git a/fancy-todo-odm/src/routes/index.js b/fancy-todo-odm/src/routes/index.js new file mode 100644 index 000000000..13cad252d --- /dev/null +++ b/fancy-todo-odm/src/routes/index.js @@ -0,0 +1,12 @@ +const express = require("express"); +const router = express.Router(); +const userRouter = require("./user.route"); +const todoRouter = require("./todo.route"); + +router.get("/", (req, res) => { + res.send("Hello, world from router!"); +}); +router.use("/user", userRouter); +router.use("/todo", todoRouter); + +module.exports = router; diff --git a/fancy-todo-odm/src/routes/todo.route.js b/fancy-todo-odm/src/routes/todo.route.js new file mode 100644 index 000000000..f3ef5627f --- /dev/null +++ b/fancy-todo-odm/src/routes/todo.route.js @@ -0,0 +1,14 @@ +const express = require('express') +const router = express.Router() +const todoController = require('../controllers/todo.controller') + +router.route('/') + .get(todoController.showTodos) + .post(todoController.createTodo) + +router.route('/:id') + .get(todoController.getTodoById) + .put(todoController.updateTodo) + .delete(todoController.deleteTodo) + +module.exports = router \ No newline at end of file diff --git a/fancy-todo-odm/src/routes/user.route.js b/fancy-todo-odm/src/routes/user.route.js new file mode 100644 index 000000000..cc00efa8a --- /dev/null +++ b/fancy-todo-odm/src/routes/user.route.js @@ -0,0 +1,15 @@ +const express = require("express"); +const router = express.Router(); +const userController = require("../controllers/user.controller"); + +router +.route("/").get(userController.showUsers) +.post(userController.createUser); + +router + .route("/:id") + .get(userController.getUserById) + .put(userController.updateUser) + .delete(userController.deleteUser); + +module.exports = router; diff --git a/fancy-todo-odm/src/services/todo.service.js b/fancy-todo-odm/src/services/todo.service.js new file mode 100644 index 000000000..5e47aca45 --- /dev/null +++ b/fancy-todo-odm/src/services/todo.service.js @@ -0,0 +1,33 @@ +const Todo = require('../models/todo.model') + +const showTodos = async () => { + const result = await Todo.find({}) + return result +} + +const getTodoById = async (id) => { + const result = await Todo.findOne({_id: id}) + + return result +} + +const createTodo = async (title, description, status, userId) => { + const result = await Todo.create({title, description, status, userId}) + + return result +} + +const updateTodo = async (id, title, description, status, userId) => { + const result = await Todo.updateOne({_id: id}, {title, description, status, userId}) + + return result +} + +const deleteTodo = async (id) => { + const result = await Todo.deleteOne({_id: id}) + + return result +} + + +module.exports = {createTodo, showTodos, getTodoById, updateTodo, deleteTodo} \ No newline at end of file diff --git a/fancy-todo-odm/src/services/user.service.js b/fancy-todo-odm/src/services/user.service.js new file mode 100644 index 000000000..59628c9c4 --- /dev/null +++ b/fancy-todo-odm/src/services/user.service.js @@ -0,0 +1,62 @@ +const User = require('../models/user.model') +const mongoose = require('mongoose') +const showUsers = async () => { + const result = await User.aggregate([ + {$lookup: { + from: "todos", + localField: "_id", + foreignField: "userId", + as: "todos" + }} + ]) + return result +} + +const getUserById = async (id) => { + const objectId = new mongoose.Types.ObjectId(id); + const result = await User.aggregate([ + { + $match: { + _id: objectId + }, + }, + { + $lookup: { + from: "todos", + localField: "_id", + foreignField: "userId", + as: "todos", + }, + }, + { + $project: { + "todos.title": 1, + "todos.description": 1, + "todos.status": 1 + } + } + ]); + + return result +} + +const createUser = async (name, email, phone) => { + const user = await User.create({name, email, phone}) + + return user +} + +const updateUser = async (id, name, email, phone) => { + const result = await User.updateOne({_id: id}, {name, email, phone}) + + return result +} + +const deleteUser = async (id) => { + const result = await User.deleteOne({_id: id}) + + return result +} + + +module.exports = {createUser, showUsers, getUserById, updateUser, deleteUser} \ No newline at end of file diff --git a/latihan-mongodb/.gitignore b/latihan-mongodb/.gitignore new file mode 100644 index 000000000..13dfa3637 --- /dev/null +++ b/latihan-mongodb/.gitignore @@ -0,0 +1,2 @@ +.env +node_modules/ \ No newline at end of file diff --git a/latihan-mongodb/app.js b/latihan-mongodb/app.js new file mode 100644 index 000000000..23ddefe54 --- /dev/null +++ b/latihan-mongodb/app.js @@ -0,0 +1,44 @@ +// app.js +require("dotenv").config(); +const express = require("express"); +const mongoose = require("mongoose"); +const User = require("./models/user"); + +const app = express(); +const port = process.env.PORT || 3000; + +app.use(express.json()); + +mongoose + .connect(process.env.DATABASE_URL) + .then(() => { + console.log("Connected to MongoDB"); + }) + .catch((err) => { + console.error("Connection error =>", err); + }); + +// Endpoint untuk menambahkan pengguna baru +app.post("/users", async (req, res) => { + try { + const user = new User(req.body); + await user.save(); + res.status(201).send(user); + } catch (error) { + res.status(400).send(error); + } +}); + +// Endpoint untuk mendapatkan daftar semua pengguna +app.get("/users", async (req, res) => { + try { + const users = await User.find(); + res.send(users); + } catch (error) { + res.status(500).send(error); + } +}); + +app.listen(port, () => { + console.log(`Server is running on port ${port}`); +}); diff --git a/latihan-mongodb/models/user.js b/latihan-mongodb/models/user.js new file mode 100644 index 000000000..c9691d51f --- /dev/null +++ b/latihan-mongodb/models/user.js @@ -0,0 +1,22 @@ +// models/user.js +const mongoose = require("mongoose"); + +const userSchema = new mongoose.Schema({ + name: { + type: String, + required: true, + }, + email: { + type: String, + required: true, + unique: true, + }, + age: { + type: Number, + default: 0, + }, +}); + +const User = mongoose.model("User", userSchema); + +module.exports = User; diff --git a/latihan-mongodb/package-lock.json b/latihan-mongodb/package-lock.json new file mode 100644 index 000000000..1f83a86e3 --- /dev/null +++ b/latihan-mongodb/package-lock.json @@ -0,0 +1,967 @@ +{ + "name": "latihan-mongodb", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "latihan-mongodb", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dotenv": "^16.4.5", + "express": "^4.18.3", + "mongodb": "^6.5.0", + "mongoose": "^8.2.2" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", + "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.4.tgz", + "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/bson": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.5.0.tgz", + "integrity": "sha512-DXf1BTAS8vKyR90BO4x5v3rKVarmkdkzwOrnYDFdjAY694ILNDkmA3uRh1xXJEl+C1DAh8XCvAQ+Gh3kzubtpg==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", + "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mongodb": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.5.0.tgz", + "integrity": "sha512-Fozq68InT+JKABGLqctgtb8P56pRrJFkbhW0ux+x1mdHeyinor8oNzJqwLjV/t5X5nJGfTlluxfyMnOXNggIUA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.5", + "bson": "^6.4.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz", + "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.2.2.tgz", + "integrity": "sha512-6sMxe1d3k/dBjiOX4ExNTNOP0g1x0iq8eXyg+ttgIXM3HLnQ0IUyXRwVVAPFFY6O4/8uYN5dB0Ec72FrexbPpw==", + "dependencies": { + "bson": "^6.2.0", + "kareem": "2.5.1", + "mongodb": "6.3.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/mongodb": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.3.0.tgz", + "integrity": "sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.2.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + } + } +} diff --git a/latihan-mongodb/package.json b/latihan-mongodb/package.json new file mode 100644 index 000000000..515eadaa9 --- /dev/null +++ b/latihan-mongodb/package.json @@ -0,0 +1,18 @@ +{ + "name": "latihan-mongodb", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "dotenv": "^16.4.5", + "express": "^4.18.3", + "mongodb": "^6.5.0", + "mongoose": "^8.2.2" + } +} diff --git a/simple-project/.gitignore b/simple-project/.gitignore new file mode 100644 index 000000000..13dfa3637 --- /dev/null +++ b/simple-project/.gitignore @@ -0,0 +1,2 @@ +.env +node_modules/ \ No newline at end of file diff --git a/simple-project/api.js b/simple-project/api.js new file mode 100644 index 000000000..bebf53ff2 --- /dev/null +++ b/simple-project/api.js @@ -0,0 +1,98 @@ +const mongoose = require("mongoose"); +const express = require("express"); +const router = express.Router(); +const StudentModel = require("./studentschema"); +require("dotenv").config(); +const dbUri = process.env.MONGODB_URI; +console.log(process.env.MONGODB_URI); +mongoose + .connect(dbUri, { + useNewUrlParser: true, + useUnifiedTopology: true, + }) + .then(() => { + console.log("Successfully connected to MongoDB."); + }) + .catch((error) => { + console.error("MongoDB connection error:", error); + }); + +// Define your CRUD operation routes here +router.post("/save", async (req, res) => { + const newStudent = new StudentModel(req.body); + + try { + const data = await newStudent.save(); + res.send("Data inserted"); + } catch (err) { + console.log(err); + res.status(500).send("Error saving the data"); + } +}); + +router.get("/findall", async (req, res) => { + try { + const data = await StudentModel.find(); + res.send(data); + } catch (err) { + console.log(err); + res.status(500).send("Error fetching data"); + } +}); + +router.get("/findfirst", async (req, res) => { //it will simply return the first document it finds. + try { + const data = await StudentModel.findOne(); // Add a condition if necessary + // console.log("dataaa =>", data); + res.send(data); + } catch (err) { + console.log(err); + res.status(500).send("Error fetching data"); + } +}); + +router.put("/update", async (req, res) => { + try { + const data = await StudentModel.findOneAndUpdate( + { StudentId: req.body.StudentId }, + req.body, + { + new: true, + } + ); + if (!data) { + res.status(404).send("No data found with given StudentId"); + } else { + res.send("Data updated!"); + } + } catch (err) { + console.log(err); + res.status(500).send("Error updating data"); + } +}); + +router.delete("/delete", async (req, res) => { + try { + const data = await StudentModel.findByIdAndDelete(req.body.id); + if (data) { + res.send("Data Deleted!"); + } else { + res.status(404).send("Data Not Found"); + } + } catch (err) { + console.log(err); + res.status(500).send("Error deleting data"); + } +}); + +router.get("/latest", async (req, res) => { + try { + const data = await StudentModel.find().sort({ _id: -1 }).limit(1); + res.send(data); + } catch (err) { + console.log(err); + res.status(500).send("Error fetching latest data"); + } +}); + +module.exports = router; diff --git a/simple-project/package-lock.json b/simple-project/package-lock.json new file mode 100644 index 000000000..13630e051 --- /dev/null +++ b/simple-project/package-lock.json @@ -0,0 +1,1272 @@ +{ + "name": "simple-project", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "dependencies": { + "dotenv": "^16.4.5", + "express": "^4.18.3", + "mongoose": "^8.2.2", + "nodemon": "^3.1.0" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", + "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.4.tgz", + "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.5.0.tgz", + "integrity": "sha512-DXf1BTAS8vKyR90BO4x5v3rKVarmkdkzwOrnYDFdjAY694ILNDkmA3uRh1xXJEl+C1DAh8XCvAQ+Gh3kzubtpg==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", + "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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==", + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.3.0.tgz", + "integrity": "sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.2.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz", + "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.2.2.tgz", + "integrity": "sha512-6sMxe1d3k/dBjiOX4ExNTNOP0g1x0iq8eXyg+ttgIXM3HLnQ0IUyXRwVVAPFFY6O4/8uYN5dB0Ec72FrexbPpw==", + "dependencies": { + "bson": "^6.2.0", + "kareem": "2.5.1", + "mongodb": "6.3.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/simple-project/package.json b/simple-project/package.json new file mode 100644 index 000000000..96dff0e3b --- /dev/null +++ b/simple-project/package.json @@ -0,0 +1,20 @@ +{ + "dependencies": { + "dotenv": "^16.4.5", + "express": "^4.18.3", + "mongoose": "^8.2.2", + "nodemon": "^3.1.0" + }, + "scripts": { + "start": "node server.js", + "dev": "nodemon server.js" + }, + "name": "simple-project", + "version": "1.0.0", + "main": "api.js", + "devDependencies": {}, + "keywords": [], + "author": "", + "license": "ISC", + "description": "" +} diff --git a/simple-project/server.js b/simple-project/server.js new file mode 100644 index 000000000..81d0aea4a --- /dev/null +++ b/simple-project/server.js @@ -0,0 +1,14 @@ +const express = require("express"); +const bodyParser = require("body-parser"); +const api = require("./api"); // You'll create this in a later step + +const port = 3000; +const app = express(); + +app.listen(port, () => { + console.log(`Server is listening at port: ${port}`); +}); + +app.use(bodyParser.urlencoded({ extended: true })); +app.use(bodyParser.json()); +app.use("/api", api); diff --git a/simple-project/studentschema.js b/simple-project/studentschema.js new file mode 100644 index 000000000..cf5379dc6 --- /dev/null +++ b/simple-project/studentschema.js @@ -0,0 +1,11 @@ +const mongoose = require("mongoose"); + +const StudentSchema = new mongoose.Schema({ + StudentId: Number, + Name: String, + Roll: Number, + Birthday: Date, + Address: String, +}); + +module.exports = mongoose.model("student", StudentSchema, "Students"); From 2e1572eb8e860b19210b9b01849d4ffe4f04fec7 Mon Sep 17 00:00:00 2001 From: AronIpeka Date: Mon, 25 Mar 2024 14:38:28 +0700 Subject: [PATCH 03/10] simple-project --- latihan-mongodb/app.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/latihan-mongodb/app.js b/latihan-mongodb/app.js index 23ddefe54..cf1ee2e5d 100644 --- a/latihan-mongodb/app.js +++ b/latihan-mongodb/app.js @@ -29,6 +29,7 @@ app.post("/users", async (req, res) => { } }); + // Endpoint untuk mendapatkan daftar semua pengguna app.get("/users", async (req, res) => { try { @@ -39,6 +40,7 @@ app.get("/users", async (req, res) => { } }); + app.listen(port, () => { console.log(`Server is running on port ${port}`); }); From 9058d2cbf37985c92ff7e9af065f8d7fa4d8b2e5 Mon Sep 17 00:00:00 2001 From: AronIpeka Date: Mon, 25 Mar 2024 14:39:25 +0700 Subject: [PATCH 04/10] latihan-mongodb --- latihan-mongodb/app.js | 1 - 1 file changed, 1 deletion(-) diff --git a/latihan-mongodb/app.js b/latihan-mongodb/app.js index cf1ee2e5d..9d1a5fe60 100644 --- a/latihan-mongodb/app.js +++ b/latihan-mongodb/app.js @@ -1,4 +1,3 @@ -// app.js require("dotenv").config(); const express = require("express"); const mongoose = require("mongoose"); From fd8c4c5ff7d28681d779caa758dedefcf86ad99f Mon Sep 17 00:00:00 2001 From: AronIpeka Date: Wed, 27 Mar 2024 10:16:13 +0700 Subject: [PATCH 05/10] orm --- fancy-todo-supabase-orm/.gitignore | 2 + .../fancy-todo-orm.postman_collection.json | 263 ++++ fancy-todo-supabase-orm/package-lock.json | 1310 +++++++++++++++++ fancy-todo-supabase-orm/package.json | 23 + .../20240326075509_fancy_todo/migration.sql | 23 + .../prisma/migrations/migration_lock.toml | 3 + fancy-todo-supabase-orm/prisma/schema.prisma | 35 + fancy-todo-supabase-orm/src/app.js | 12 + .../src/controllers/todo.controller.js | 72 + .../src/controllers/user.controller.js | 63 + fancy-todo-supabase-orm/src/index.js | 6 + .../src/middleware/checkUserExists.js | 20 + .../src/middleware/validateUserUpdate.js | 9 + fancy-todo-supabase-orm/src/routes/index.js | 19 + .../src/routes/todo.route.js | 22 + .../src/routes/user.route.js | 19 + .../src/service/todo.service.js | 46 + .../src/service/user.service.js | 68 + fancy-todo-supabase-orm/supabase/client.js | 9 + 19 files changed, 2024 insertions(+) create mode 100644 fancy-todo-supabase-orm/.gitignore create mode 100644 fancy-todo-supabase-orm/fancy-todo-orm.postman_collection.json create mode 100644 fancy-todo-supabase-orm/package-lock.json create mode 100644 fancy-todo-supabase-orm/package.json create mode 100644 fancy-todo-supabase-orm/prisma/migrations/20240326075509_fancy_todo/migration.sql create mode 100644 fancy-todo-supabase-orm/prisma/migrations/migration_lock.toml create mode 100644 fancy-todo-supabase-orm/prisma/schema.prisma create mode 100644 fancy-todo-supabase-orm/src/app.js create mode 100644 fancy-todo-supabase-orm/src/controllers/todo.controller.js create mode 100644 fancy-todo-supabase-orm/src/controllers/user.controller.js create mode 100644 fancy-todo-supabase-orm/src/index.js create mode 100644 fancy-todo-supabase-orm/src/middleware/checkUserExists.js create mode 100644 fancy-todo-supabase-orm/src/middleware/validateUserUpdate.js create mode 100644 fancy-todo-supabase-orm/src/routes/index.js create mode 100644 fancy-todo-supabase-orm/src/routes/todo.route.js create mode 100644 fancy-todo-supabase-orm/src/routes/user.route.js create mode 100644 fancy-todo-supabase-orm/src/service/todo.service.js create mode 100644 fancy-todo-supabase-orm/src/service/user.service.js create mode 100644 fancy-todo-supabase-orm/supabase/client.js diff --git a/fancy-todo-supabase-orm/.gitignore b/fancy-todo-supabase-orm/.gitignore new file mode 100644 index 000000000..13dfa3637 --- /dev/null +++ b/fancy-todo-supabase-orm/.gitignore @@ -0,0 +1,2 @@ +.env +node_modules/ \ No newline at end of file diff --git a/fancy-todo-supabase-orm/fancy-todo-orm.postman_collection.json b/fancy-todo-supabase-orm/fancy-todo-orm.postman_collection.json new file mode 100644 index 000000000..59e8ef704 --- /dev/null +++ b/fancy-todo-supabase-orm/fancy-todo-orm.postman_collection.json @@ -0,0 +1,263 @@ +{ + "info": { + "_postman_id": "7723ff47-513b-4e8e-8271-4457028916dd", + "name": "fancy-todo-orm", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "28737688" + }, + "item": [ + { + "name": "get all users", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:4000/users", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "users" + ] + } + }, + "response": [] + }, + { + "name": "create users", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"John Doe\",\r\n \"email\": \"John.deo@gmail.com\",\r\n \"phone\": \"1234567890\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:4000/users", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "users" + ] + } + }, + "response": [] + }, + { + "name": "get User By Id", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:4000/users/9614e897-190d-4c28-a763-46587dd1adf4", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "users", + "9614e897-190d-4c28-a763-46587dd1adf4" + ] + } + }, + "response": [] + }, + { + "name": "edit User By Id", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"New Name\",\r\n \"email\": \"new.email@example.com\",\r\n \"phone\": \"1234567890\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:4000/users/9614e897-190d-4c28-a763-46587dd1adf4", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "users", + "9614e897-190d-4c28-a763-46587dd1adf4" + ] + } + }, + "response": [] + }, + { + "name": "delete User By Id", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "http://localhost:4000/users/9614e897-190d-4c28-a763-46587dd1adf4", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "users", + "9614e897-190d-4c28-a763-46587dd1adf4" + ] + } + }, + "response": [] + }, + { + "name": "create todos", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"title\": \"mmmmmmmmmmmmm\",\r\n \"description\": \"oooooooooooooo\",\r\n \"status\": \"In Progress\",\r\n \"userId\": \"ff2c951b-5fd2-4986-887a-2f2a7c44f99d\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:4000/todos", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "todos" + ] + } + }, + "response": [] + }, + { + "name": "get all todos", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:4000/todos", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "todos" + ] + } + }, + "response": [] + }, + { + "name": "get todo by id", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:4000/todos/5fe88dd6-b68f-4247-947d-2958c7ce45b4", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "todos", + "5fe88dd6-b68f-4247-947d-2958c7ce45b4" + ] + } + }, + "response": [] + }, + { + "name": "update todo by id", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"title\": \"Update Report\",\r\n \"description\": \"Update the quarterly report with the latest figures.\",\r\n \"status\": \"Completed\"\r\n}\r\n", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:4000/todos/5fe88dd6-b68f-4247-947d-2958c7ce45b4", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "todos", + "5fe88dd6-b68f-4247-947d-2958c7ce45b4" + ] + } + }, + "response": [] + }, + { + "name": "delete todo by id", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "http://localhost:4000/todos/01edd837-461e-4166-af6b-ea1c7050f250", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "todos", + "01edd837-461e-4166-af6b-ea1c7050f250" + ] + } + }, + "response": [] + }, + { + "name": "get all todo by user id", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:4000/todos/byUser/ff2c951b-5fd2-4986-887a-2f2a7c44f99d", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "4000", + "path": [ + "todos", + "byUser", + "ff2c951b-5fd2-4986-887a-2f2a7c44f99d" + ] + } + }, + "response": [] + } + ] +} \ No newline at end of file diff --git a/fancy-todo-supabase-orm/package-lock.json b/fancy-todo-supabase-orm/package-lock.json new file mode 100644 index 000000000..ea8011088 --- /dev/null +++ b/fancy-todo-supabase-orm/package-lock.json @@ -0,0 +1,1310 @@ +{ + "name": "fancy-todo-supabase-orm", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "fancy-todo-supabase-orm", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@prisma/client": "^5.11.0", + "@supabase/supabase-js": "^2.40.0", + "dotenv": "^16.4.5", + "express": "^4.19.2" + }, + "devDependencies": { + "nodemon": "^3.1.0", + "prisma": "^5.11.0" + } + }, + "node_modules/@prisma/client": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@prisma/client/-/client-5.11.0.tgz", + "integrity": "sha512-SWshvS5FDXvgJKM/a0y9nDC1rqd7KG0Q6ZVzd+U7ZXK5soe73DJxJJgbNBt2GNXOa+ysWB4suTpdK5zfFPhwiw==", + "hasInstallScript": true, + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@prisma/debug/-/debug-5.11.0.tgz", + "integrity": "sha512-N6yYr3AbQqaiUg+OgjkdPp3KPW1vMTAgtKX6+BiB/qB2i1TjLYCrweKcUjzOoRM5BriA4idrkTej9A9QqTfl3A==", + "dev": true + }, + "node_modules/@prisma/engines": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-5.11.0.tgz", + "integrity": "sha512-gbrpQoBTYWXDRqD+iTYMirDlF9MMlQdxskQXbhARhG6A/uFQjB7DZMYocMQLoiZXO/IskfDOZpPoZE8TBQKtEw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/debug": "5.11.0", + "@prisma/engines-version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", + "@prisma/fetch-engine": "5.11.0", + "@prisma/get-platform": "5.11.0" + } + }, + "node_modules/@prisma/engines-version": { + "version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", + "resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102.tgz", + "integrity": "sha512-WXCuyoymvrS4zLz4wQagSsc3/nE6CHy8znyiMv8RKazKymOMd5o9FP5RGwGHAtgoxd+aB/BWqxuP/Ckfu7/3MA==", + "dev": true + }, + "node_modules/@prisma/fetch-engine": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.11.0.tgz", + "integrity": "sha512-994viazmHTJ1ymzvWugXod7dZ42T2ROeFuH6zHPcUfp/69+6cl5r9u3NFb6bW8lLdNjwLYEVPeu3hWzxpZeC0w==", + "dev": true, + "dependencies": { + "@prisma/debug": "5.11.0", + "@prisma/engines-version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", + "@prisma/get-platform": "5.11.0" + } + }, + "node_modules/@prisma/get-platform": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.11.0.tgz", + "integrity": "sha512-rxtHpMLxNTHxqWuGOLzR2QOyQi79rK1u1XYAVLZxDGTLz/A+uoDnjz9veBFlicrpWjwuieM4N6jcnjj/DDoidw==", + "dev": true, + "dependencies": { + "@prisma/debug": "5.11.0" + } + }, + "node_modules/@supabase/functions-js": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@supabase/functions-js/-/functions-js-2.1.5.tgz", + "integrity": "sha512-BNzC5XhCzzCaggJ8s53DP+WeHHGT/NfTsx2wUSSGKR2/ikLFQTBCDzMvGz/PxYMqRko/LwncQtKXGOYp1PkPaw==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/gotrue-js": { + "version": "2.62.2", + "resolved": "https://registry.npmjs.org/@supabase/gotrue-js/-/gotrue-js-2.62.2.tgz", + "integrity": "sha512-AP6e6W9rQXFTEJ7sTTNYQrNf0LCcnt1hUW+RIgUK+Uh3jbWvcIST7wAlYyNZiMlS9+PYyymWQ+Ykz/rOYSO0+A==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/node-fetch": { + "version": "2.6.15", + "resolved": "https://registry.npmjs.org/@supabase/node-fetch/-/node-fetch-2.6.15.tgz", + "integrity": "sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + } + }, + "node_modules/@supabase/postgrest-js": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/@supabase/postgrest-js/-/postgrest-js-1.9.2.tgz", + "integrity": "sha512-I6yHo8CC9cxhOo6DouDMy9uOfW7hjdsnCxZiaJuIVZm1dBGTFiQPgfMa9zXCamEWzNyWRjZvupAUuX+tqcl5Sw==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/realtime-js": { + "version": "2.9.3", + "resolved": "https://registry.npmjs.org/@supabase/realtime-js/-/realtime-js-2.9.3.tgz", + "integrity": "sha512-lAp50s2n3FhGJFq+wTSXLNIDPw5Y0Wxrgt44eM5nLSA3jZNUUP3Oq2Ccd1CbZdVntPCWLZvJaU//pAd2NE+QnQ==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14", + "@types/phoenix": "^1.5.4", + "@types/ws": "^8.5.10", + "ws": "^8.14.2" + } + }, + "node_modules/@supabase/storage-js": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@supabase/storage-js/-/storage-js-2.5.5.tgz", + "integrity": "sha512-OpLoDRjFwClwc2cjTJZG8XviTiQH4Ik8sCiMK5v7et0MDu2QlXjCAW3ljxJB5+z/KazdMOTnySi+hysxWUPu3w==", + "dependencies": { + "@supabase/node-fetch": "^2.6.14" + } + }, + "node_modules/@supabase/supabase-js": { + "version": "2.40.0", + "resolved": "https://registry.npmjs.org/@supabase/supabase-js/-/supabase-js-2.40.0.tgz", + "integrity": "sha512-XF8OrsA13DYBL074sHH4M0NhXJCWhQ0R5JbVeVUytZ0coPMS9krRdzxl+0c4z4LLjqbm/Wdz0UYlTYM9MgnDag==", + "dependencies": { + "@supabase/functions-js": "2.1.5", + "@supabase/gotrue-js": "2.62.2", + "@supabase/node-fetch": "2.6.15", + "@supabase/postgrest-js": "1.9.2", + "@supabase/realtime-js": "2.9.3", + "@supabase/storage-js": "2.5.5" + } + }, + "node_modules/@types/node": { + "version": "20.11.30", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.30.tgz", + "integrity": "sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/phoenix": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/@types/phoenix/-/phoenix-1.6.4.tgz", + "integrity": "sha512-B34A7uot1Cv0XtaHRYDATltAdKx0BvVKNgYNqE4WjtPUa4VQJM7kxeXcVKaH+KS+kCmZ+6w+QaUdcljiheiBJA==" + }, + "node_modules/@types/ws": { + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prisma": { + "version": "5.11.0", + "resolved": "https://registry.npmjs.org/prisma/-/prisma-5.11.0.tgz", + "integrity": "sha512-KCLiug2cs0Je7kGkQBN9jDWoZ90ogE/kvZTUTgz2h94FEo8pczCkPH7fPNXkD1sGU7Yh65risGGD1HQ5DF3r3g==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@prisma/engines": "5.11.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dev": true, + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/ws": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.16.0.tgz", + "integrity": "sha512-HS0c//TP7Ina87TfiPUz1rQzMhHrl/SG2guqRcTOIUYD2q8uhUdNHZYJUaQ8aTGPzCh+c6oawMKW35nFl1dxyQ==", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + } + } +} diff --git a/fancy-todo-supabase-orm/package.json b/fancy-todo-supabase-orm/package.json new file mode 100644 index 000000000..c5bc8aafb --- /dev/null +++ b/fancy-todo-supabase-orm/package.json @@ -0,0 +1,23 @@ +{ + "name": "fancy-todo-supabase-orm", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "nodemon src/index.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@prisma/client": "^5.11.0", + "@supabase/supabase-js": "^2.40.0", + "dotenv": "^16.4.5", + "express": "^4.19.2" + }, + "devDependencies": { + "nodemon": "^3.1.0", + "prisma": "^5.11.0" + } +} diff --git a/fancy-todo-supabase-orm/prisma/migrations/20240326075509_fancy_todo/migration.sql b/fancy-todo-supabase-orm/prisma/migrations/20240326075509_fancy_todo/migration.sql new file mode 100644 index 000000000..5a9aa4d83 --- /dev/null +++ b/fancy-todo-supabase-orm/prisma/migrations/20240326075509_fancy_todo/migration.sql @@ -0,0 +1,23 @@ +-- CreateTable +CREATE TABLE "User" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "email" TEXT NOT NULL, + "phone" TEXT NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Todo" ( + "id" TEXT NOT NULL, + "title" TEXT NOT NULL, + "description" TEXT, + "status" TEXT NOT NULL, + "userId" TEXT NOT NULL, + + CONSTRAINT "Todo_pkey" PRIMARY KEY ("id") +); + +-- AddForeignKey +ALTER TABLE "Todo" ADD CONSTRAINT "Todo_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/fancy-todo-supabase-orm/prisma/migrations/migration_lock.toml b/fancy-todo-supabase-orm/prisma/migrations/migration_lock.toml new file mode 100644 index 000000000..fbffa92c2 --- /dev/null +++ b/fancy-todo-supabase-orm/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/fancy-todo-supabase-orm/prisma/schema.prisma b/fancy-todo-supabase-orm/prisma/schema.prisma new file mode 100644 index 000000000..fc243d548 --- /dev/null +++ b/fancy-todo-supabase-orm/prisma/schema.prisma @@ -0,0 +1,35 @@ +// This is your Prisma schema file, +// learn more about it in the docs: https://pris.ly/d/prisma-schema + +// Looking for ways to speed up your queries, or scale easily with your serverless or edge functions? +// Try Prisma Accelerate: https://pris.ly/cli/accelerate-init + +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "postgresql" + url = env("DATABASE_URL") + directUrl = env("DIRECT_URL") +} + +model User { + id String @id @default(uuid()) + name String + email String + phone String + todos Todo[] +} + + + +model Todo { + id String @id @default(uuid()) + title String + description String? + status String + userId String + user User @relation(fields: [userId], references: [id], onDelete: Cascade) +} + diff --git a/fancy-todo-supabase-orm/src/app.js b/fancy-todo-supabase-orm/src/app.js new file mode 100644 index 000000000..3cccf2d0e --- /dev/null +++ b/fancy-todo-supabase-orm/src/app.js @@ -0,0 +1,12 @@ +const express = require('express'); +const userRoutes = require('./routes/user.route'); +const todoRoutes = require('./routes/todo.route'); + +const app = express(); +app.use(express.json()); + +// Use routes +app.use('/users', userRoutes); +app.use('/todos', todoRoutes); + +module.exports = app; diff --git a/fancy-todo-supabase-orm/src/controllers/todo.controller.js b/fancy-todo-supabase-orm/src/controllers/todo.controller.js new file mode 100644 index 000000000..e9366aef6 --- /dev/null +++ b/fancy-todo-supabase-orm/src/controllers/todo.controller.js @@ -0,0 +1,72 @@ +const todoService = require("../service/todo.service"); + +const createTodoController = async (req, res) => { + try { + const newTodo = await todoService.createTodo(req.body); + res.status(201).json(newTodo); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const getAllTodosController = async (req, res) => { + try { + const todos = await todoService.getAllTodos(); + res.status(200).json(todos); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const getTodoByIdController = async (req, res) => { + const todoId = req.params.id; + try { + const todo = await todoService.getTodoById(todoId); + res.status(200).json(todo); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const updateTodoController = async (req, res) => { + const todoId = req.params.id; + const todoData = req.body; + try { + const updatedTodo = await todoService.updateTodo(todoId, todoData); + res.status(200).json(updatedTodo); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const deleteTodoController = async (req, res) => { + const todoId = req.params.id; + try { + await todoService.deleteTodo(todoId); + res.status(200).json({ message: "Todo has been deleted successfully" }); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const getAllTodosByUserController = async (req, res) => { + try { + const userId = req.params.userId; + const todos = await todoService.getAllTodosByUser(userId); + if (todos.length === 0) { + return res.status(404).json({ message: "No Todos found for this user." }); + } + res.status(200).json(todos); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +module.exports = { + createTodoController, + getAllTodosController, + getTodoByIdController, + updateTodoController, + deleteTodoController, + getAllTodosByUserController, +}; diff --git a/fancy-todo-supabase-orm/src/controllers/user.controller.js b/fancy-todo-supabase-orm/src/controllers/user.controller.js new file mode 100644 index 000000000..50f038e49 --- /dev/null +++ b/fancy-todo-supabase-orm/src/controllers/user.controller.js @@ -0,0 +1,63 @@ +const userService = require('../service/user.service'); + +const createUserController = async (req, res) => { + try { + const newUser = await userService.createUser(req.body); + res.status(201).json(newUser); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const getAllUsersController = async (req, res) => { + try { + const users = await userService.getAllUsers(); + res.status(200).json(users); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const getUserByIdController = async (req, res) => { + try { + const user = await userService.getUserById(req.params.id); + if (user) { + res.status(200).json(user); + } else { + res.status(404).send('User not found'); + } + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const updateUserController = async (req, res) => { + try { + const updatedUser = await userService.updateUser(req.params.id, req.body); + res.status(200).json(updatedUser); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const deleteUserController = async (req, res) => { + const userId = req.params.id; + + try { + const deletedUser = await userService.deleteUser(userId); + res.status(200).json({ + message: 'User has been deleted successfully', + deletedUser: deletedUser // Include deleted user's data in the response + }); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +module.exports = { + createUserController, + getAllUsersController, + getUserByIdController, + updateUserController, + deleteUserController, +}; diff --git a/fancy-todo-supabase-orm/src/index.js b/fancy-todo-supabase-orm/src/index.js new file mode 100644 index 000000000..f28a73c49 --- /dev/null +++ b/fancy-todo-supabase-orm/src/index.js @@ -0,0 +1,6 @@ +const app = require('./app'); + +const PORT = process.env.PORT || 4000; +app.listen(PORT, () => { + console.log(`Server is running on http://localhost:${PORT}`); +}); diff --git a/fancy-todo-supabase-orm/src/middleware/checkUserExists.js b/fancy-todo-supabase-orm/src/middleware/checkUserExists.js new file mode 100644 index 000000000..726b013d9 --- /dev/null +++ b/fancy-todo-supabase-orm/src/middleware/checkUserExists.js @@ -0,0 +1,20 @@ +const userService = require("../service/user.service"); + +const checkUserExists = async (req, res, next) => { + const userId = req.body.userId; + try { + const user = await userService.getUserById(userId); + if (!user) { + return res + .status(404) + .json({ + error: "Todo cannot be created because the user is not found", + }); + } + next(); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +module.exports = checkUserExists; diff --git a/fancy-todo-supabase-orm/src/middleware/validateUserUpdate.js b/fancy-todo-supabase-orm/src/middleware/validateUserUpdate.js new file mode 100644 index 000000000..f59ad064a --- /dev/null +++ b/fancy-todo-supabase-orm/src/middleware/validateUserUpdate.js @@ -0,0 +1,9 @@ +const searchUsersController = async (req, res) => { + try { + const { name, email } = req.query; + const results = await userService.searchUsers({ name, email }); + res.status(200).json(results); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; diff --git a/fancy-todo-supabase-orm/src/routes/index.js b/fancy-todo-supabase-orm/src/routes/index.js new file mode 100644 index 000000000..9efb80cb5 --- /dev/null +++ b/fancy-todo-supabase-orm/src/routes/index.js @@ -0,0 +1,19 @@ +// src/routes/index.js + +const express = require('express'); +const todoRoutes = require('./todo.route'); +const userRoutes = require('./user.route'); + +const router = express.Router(); + +router.get('/', (req, res) => { + res.send('Selamat datang di Fancy Todo API!'); + }); +// Gunakan todoRoutes untuk menangani semua rute yang berkaitan dengan todos +router.use('/todos', todoRoutes); + +// Gunakan userRoutes untuk menangani semua rute yang berkaitan dengan users +router.use('/users', userRoutes); + +// Export router utama +module.exports = router; diff --git a/fancy-todo-supabase-orm/src/routes/todo.route.js b/fancy-todo-supabase-orm/src/routes/todo.route.js new file mode 100644 index 000000000..c139777e8 --- /dev/null +++ b/fancy-todo-supabase-orm/src/routes/todo.route.js @@ -0,0 +1,22 @@ +const express = require("express"); +const checkUserExists = require("../middleware/checkUserExists"); + +const { + createTodoController, + getAllTodosController, + getTodoByIdController, + updateTodoController, + deleteTodoController, + getAllTodosByUserController +} = require("../controllers/todo.controller"); + +const router = express.Router(); + +router.post("/", checkUserExists, createTodoController); +router.get("/", getAllTodosController); +router.get("/:id", getTodoByIdController); +router.put("/:id", updateTodoController); +router.delete("/:id", deleteTodoController); +router.get('/byUser/:userId', getAllTodosByUserController); + +module.exports = router; diff --git a/fancy-todo-supabase-orm/src/routes/user.route.js b/fancy-todo-supabase-orm/src/routes/user.route.js new file mode 100644 index 000000000..c67f8624c --- /dev/null +++ b/fancy-todo-supabase-orm/src/routes/user.route.js @@ -0,0 +1,19 @@ +// src/routes/user.route.js +const express = require('express'); +const { + createUserController, + getAllUsersController, + getUserByIdController, + updateUserController, + deleteUserController, +} = require('../controllers/user.controller'); + +const router = express.Router(); + +router.post('/', createUserController); +router.get('/', getAllUsersController); +router.get('/:id', getUserByIdController); +router.put('/:id', updateUserController); +router.delete('/:id', deleteUserController); + +module.exports = router; diff --git a/fancy-todo-supabase-orm/src/service/todo.service.js b/fancy-todo-supabase-orm/src/service/todo.service.js new file mode 100644 index 000000000..740b6d179 --- /dev/null +++ b/fancy-todo-supabase-orm/src/service/todo.service.js @@ -0,0 +1,46 @@ +const { PrismaClient } = require('@prisma/client'); +const prisma = new PrismaClient({ + log: ['query', 'info', 'warn', 'error'], + }); + +const createTodo = async (todoData) => { + try { + return await prisma.todo.create({ data: todoData }); + } catch (error) { + throw new Error(`Error creating todo: ${error.message}`); + } +}; + +const getAllTodos = async () => { + return await prisma.todo.findMany(); +}; + +const getTodoById = async (id) => { + return await prisma.todo.findUnique({ where: { id } }); +}; + +const updateTodo = async (id, todoData) => { + return await prisma.todo.update({ + where: { id }, + data: todoData, + }); +}; + +const deleteTodo = async (id) => { + return await prisma.todo.delete({ where: { id } }); +}; + +const getAllTodosByUser = async (userId) => { + return await prisma.todo.findMany({ + where: { userId: userId }, + }); + }; + +module.exports = { + createTodo, + getAllTodos, + getTodoById, + updateTodo, + deleteTodo, + getAllTodosByUser, +}; diff --git a/fancy-todo-supabase-orm/src/service/user.service.js b/fancy-todo-supabase-orm/src/service/user.service.js new file mode 100644 index 000000000..a5523a16f --- /dev/null +++ b/fancy-todo-supabase-orm/src/service/user.service.js @@ -0,0 +1,68 @@ + +const { PrismaClient } = require('@prisma/client'); +const prisma = new PrismaClient({ + log: ['query', 'info', 'warn', 'error'], +}); + +const createUser = async (userData) => { + try { + // Periksa apakah ada pengguna dengan email, phone, atau name yang sama + const existingUser = await prisma.user.findFirst({ + where: { + OR: [ + { email: userData.email }, + { phone: userData.phone }, + { name: userData.name } + ] + } + }); + + // Jika ada pengguna dengan email, phone, atau name yang sama, lempar kesalahan + if (existingUser) { + let errorMessage = ''; + if (existingUser.email === userData.email) { + errorMessage += 'Email sudah terdaftar. '; + } + if (existingUser.phone === userData.phone) { + errorMessage += 'Nomor telepon sudah terdaftar. '; + } + if (existingUser.name === userData.name) { + errorMessage += 'Nama sudah terdaftar. '; + } + throw new Error(errorMessage); + } + + // Jika tidak ada pengguna dengan email, phone, atau name yang sama, buat pengguna baru + return await prisma.user.create({ + data: { + name: userData.name, + email: userData.email, + phone: userData.phone, + } + }); + } catch (error) { + throw new Error(`Error creating user: ${error.message}`); + } +}; + + +const getAllUsers = async () => { + return prisma.user.findMany(); +}; + +const getUserById = async (id) => { + return prisma.user.findUnique({ where: { id } }); +}; + +const updateUser = async (id, userData) => { + return prisma.user.update({ + where: { id }, + data: userData, + }); +}; + +const deleteUser = async (id) => { + return prisma.user.delete({ where: { id } }); +}; + +module.exports = { createUser, getAllUsers, getUserById, updateUser, deleteUser }; diff --git a/fancy-todo-supabase-orm/supabase/client.js b/fancy-todo-supabase-orm/supabase/client.js new file mode 100644 index 000000000..5b7f7dcb8 --- /dev/null +++ b/fancy-todo-supabase-orm/supabase/client.js @@ -0,0 +1,9 @@ +const { createClient } = require("@supabase/supabase-js"); +require("dotenv").config(); + +const supabaseUrl = process.env.SUPABASE_URL; +const supabaseKey = process.env.SUPABASE_ANON_KEY; + +const supabase = createClient(supabaseUrl, supabaseKey); + +module.exports = supabase; From d95028ec239d18839eae60fb9f0942cac9409b28 Mon Sep 17 00:00:00 2001 From: AronIpeka Date: Tue, 2 Apr 2024 12:51:41 +0700 Subject: [PATCH 06/10] Inventory System Checkpoint --- inventory-system/.editorconfig | 9 + inventory-system/.eslintignore | 2 + inventory-system/.eslintrc.json | 19 + inventory-system/.gitignore | 2 + inventory-system/.lintstagedrc.json | 3 + inventory-system/.prettierignore | 2 + inventory-system/.prettierrc.json | 4 + inventory-system/README.md | 4 + inventory-system/package-lock.json | 11861 ++++++++++++++++ inventory-system/package.json | 84 + inventory-system/prisma/client.js | 5 + inventory-system/prisma/schema.prisma | 82 + inventory-system/src/app.js | 18 + inventory-system/src/config/config.js | 17 + inventory-system/src/config/logger.js | 26 + inventory-system/src/config/morgan.js | 24 + inventory-system/src/config/passport.js | 30 + inventory-system/src/config/tokens.js | 10 + .../src/controllers/auth.controller.js | 28 + .../src/controllers/user.controller.js | 63 + inventory-system/src/index.js | 45 + inventory-system/src/routes/index.js | 17 + inventory-system/src/routes/user.route.js | 19 + inventory-system/src/services/user.service.js | 35 + 24 files changed, 12409 insertions(+) create mode 100644 inventory-system/.editorconfig create mode 100644 inventory-system/.eslintignore create mode 100644 inventory-system/.eslintrc.json create mode 100644 inventory-system/.gitignore create mode 100644 inventory-system/.lintstagedrc.json create mode 100644 inventory-system/.prettierignore create mode 100644 inventory-system/.prettierrc.json create mode 100644 inventory-system/README.md create mode 100644 inventory-system/package-lock.json create mode 100644 inventory-system/package.json create mode 100644 inventory-system/prisma/client.js create mode 100644 inventory-system/prisma/schema.prisma create mode 100644 inventory-system/src/app.js create mode 100644 inventory-system/src/config/config.js create mode 100644 inventory-system/src/config/logger.js create mode 100644 inventory-system/src/config/morgan.js create mode 100644 inventory-system/src/config/passport.js create mode 100644 inventory-system/src/config/tokens.js create mode 100644 inventory-system/src/controllers/auth.controller.js create mode 100644 inventory-system/src/controllers/user.controller.js create mode 100644 inventory-system/src/index.js create mode 100644 inventory-system/src/routes/index.js create mode 100644 inventory-system/src/routes/user.route.js create mode 100644 inventory-system/src/services/user.service.js diff --git a/inventory-system/.editorconfig b/inventory-system/.editorconfig new file mode 100644 index 000000000..53b061a85 --- /dev/null +++ b/inventory-system/.editorconfig @@ -0,0 +1,9 @@ +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true \ No newline at end of file diff --git a/inventory-system/.eslintignore b/inventory-system/.eslintignore new file mode 100644 index 000000000..ed4598e7f --- /dev/null +++ b/inventory-system/.eslintignore @@ -0,0 +1,2 @@ +node_modules +bin diff --git a/inventory-system/.eslintrc.json b/inventory-system/.eslintrc.json new file mode 100644 index 000000000..c1bcc4b88 --- /dev/null +++ b/inventory-system/.eslintrc.json @@ -0,0 +1,19 @@ +{ + "env": { + "node": true, + "jest": true + }, + "extends": ["airbnb-base", "plugin:jest/recommended", "plugin:security/recommended", "plugin:prettier/recommended"], + "plugins": ["jest", "security", "prettier"], + "parserOptions": { + "ecmaVersion": 2018 + }, + "rules": { + "no-console": "error", + "func-names": "off", + "no-underscore-dangle": "off", + "consistent-return": "off", + "jest/expect-expect": "off", + "security/detect-object-injection": "off" + } +} diff --git a/inventory-system/.gitignore b/inventory-system/.gitignore new file mode 100644 index 000000000..13dfa3637 --- /dev/null +++ b/inventory-system/.gitignore @@ -0,0 +1,2 @@ +.env +node_modules/ \ No newline at end of file diff --git a/inventory-system/.lintstagedrc.json b/inventory-system/.lintstagedrc.json new file mode 100644 index 000000000..5189da9a2 --- /dev/null +++ b/inventory-system/.lintstagedrc.json @@ -0,0 +1,3 @@ +{ + "*.js": "eslint" +} diff --git a/inventory-system/.prettierignore b/inventory-system/.prettierignore new file mode 100644 index 000000000..ba2a97b57 --- /dev/null +++ b/inventory-system/.prettierignore @@ -0,0 +1,2 @@ +node_modules +coverage diff --git a/inventory-system/.prettierrc.json b/inventory-system/.prettierrc.json new file mode 100644 index 000000000..db10690bc --- /dev/null +++ b/inventory-system/.prettierrc.json @@ -0,0 +1,4 @@ +{ + "singleQuote": true, + "printWidth": 125 +} diff --git a/inventory-system/README.md b/inventory-system/README.md new file mode 100644 index 000000000..527843fee --- /dev/null +++ b/inventory-system/README.md @@ -0,0 +1,4 @@ +npm run lint -> untuk check problem standarisasi code kalian +npm run lint:fix -> fixing otomatis code kalian sesuai standarisasi +npm run prettier -> untuk check problem prettier di code kalian +npm run prettier -> fixing otomatis prettier (indentasi) di code kalian diff --git a/inventory-system/package-lock.json b/inventory-system/package-lock.json new file mode 100644 index 000000000..85bce01fe --- /dev/null +++ b/inventory-system/package-lock.json @@ -0,0 +1,11861 @@ +{ + "name": "inventory-system", + "version": "1.7.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "inventory-system", + "version": "1.7.0", + "license": "MIT", + "dependencies": { + "@prisma/client": "^5.3.1", + "bcryptjs": "^2.4.3", + "compression": "^1.7.4", + "cors": "^2.8.5", + "cross-env": "^7.0.0", + "dotenv": "^10.0.0", + "express": "^4.17.1", + "express-rate-limit": "^5.0.0", + "helmet": "^4.1.0", + "http-status": "^1.4.0", + "joi": "^17.12.2", + "jsonwebtoken": "^8.5.1", + "moment": "^2.24.0", + "morgan": "^1.9.1", + "nodemailer": "^6.3.1", + "passport": "^0.4.0", + "passport-jwt": "^4.0.0", + "pm2": "^5.1.0", + "swagger-jsdoc": "^6.0.8", + "swagger-ui-express": "^4.1.6", + "validator": "^13.0.0", + "winston": "^3.2.1", + "xss-clean": "^0.1.1" + }, + "bin": { + "inventory-system": "bin/createNodejsApp.js" + }, + "devDependencies": { + "coveralls": "^3.0.7", + "eslint": "^7.0.0", + "eslint-config-airbnb-base": "^14.0.0", + "eslint-config-prettier": "^8.1.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-jest": "^24.0.1", + "eslint-plugin-prettier": "^3.1.1", + "eslint-plugin-security": "^1.4.0", + "faker": "^5.1.0", + "husky": "^7.0.0", + "jest": "^26.0.1", + "lint-staged": "^11.0.0", + "node-mocks-http": "^1.8.0", + "nodemon": "^2.0.0", + "prettier": "^2.0.5", + "prisma": "^5.3.1", + "supertest": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.1.2", + "license": "MIT", + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@apidevtools/openapi-schemas": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/@apidevtools/swagger-methods": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/@apidevtools/swagger-parser": { + "version": "10.0.3", + "license": "MIT", + "dependencies": { + "@apidevtools/json-schema-ref-parser": "^9.0.6", + "@apidevtools/openapi-schemas": "^2.0.4", + "@apidevtools/swagger-methods": "^3.0.2", + "@jsdevtools/ono": "^7.1.3", + "call-me-maybe": "^1.0.1", + "z-schema": "^5.0.1" + }, + "peerDependencies": { + "openapi-types": ">=7" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.12.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.10.4" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.24.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.24.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.24.2", + "@babel/generator": "^7.24.1", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.24.1", + "@babel/parser": "^7.24.1", + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/@babel/code-frame": { + "version": "7.24.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.24.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.0", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.23.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.24.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.23.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.24.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.24.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.23.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.24.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.1", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.24.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/@babel/highlight/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/parser": { + "version": "7.24.1", + "dev": true, + "license": "MIT", + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/template": { + "version": "7.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.23.5", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template/node_modules/@babel/code-frame": { + "version": "7.24.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.24.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.24.1", + "@babel/generator": "^7.24.1", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.24.1", + "@babel/types": "^7.24.0", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/code-frame": { + "version": "7.24.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/highlight": "^7.24.2", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@babel/types": { + "version": "7.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@cnakazawa/watch": { + "version": "1.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "exec-sh": "^0.3.2", + "minimist": "^1.2.0" + }, + "bin": { + "watch": "cli.js" + }, + "engines": { + "node": ">=0.1.95" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.3", + "license": "MIT", + "dependencies": { + "colorspace": "1.1.x", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "0.4.3", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/@eslint/eslintrc/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@eslint/eslintrc/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@hapi/hoek": { + "version": "9.3.0", + "license": "BSD-3-Clause" + }, + "node_modules/@hapi/topo": { + "version": "5.1.0", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.5.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "1.2.1", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^26.6.2", + "jest-util": "^26.6.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/core": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/reporters": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-changed-files": "^26.6.2", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-resolve-dependencies": "^26.6.3", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "jest-watcher": "^26.6.2", + "micromatch": "^4.0.2", + "p-each-series": "^2.1.0", + "rimraf": "^3.0.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/environment": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/fake-timers": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@sinonjs/fake-timers": "^6.0.1", + "@types/node": "*", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/globals": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/types": "^26.6.2", + "expect": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/reporters": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.2.4", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^4.0.3", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "jest-haste-map": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "slash": "^3.0.0", + "source-map": "^0.6.0", + "string-length": "^4.0.1", + "terminal-link": "^2.0.0", + "v8-to-istanbul": "^7.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "node-notifier": "^8.0.0" + } + }, + "node_modules/@jest/reporters/node_modules/v8-to-istanbul": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-7.1.2.tgz", + "integrity": "sha512-TxNb7YEUwkLXCQYeudi6lgQ/SZrzNO4kMdlqVxaZPUIUjCv6iSSypUQX70kNBSERpQ8fk48+d61FXk+tgqcWow==", + "dev": true, + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0", + "source-map": "^0.7.3" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@jest/reporters/node_modules/v8-to-istanbul/node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@jest/source-map": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0", + "graceful-fs": "^4.2.4", + "source-map": "^0.6.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-result": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-runner": "^26.6.3", + "jest-runtime": "^26.6.3" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/transform": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/types": "^26.6.2", + "babel-plugin-istanbul": "^6.0.0", + "chalk": "^4.0.0", + "convert-source-map": "^1.4.0", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-haste-map": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-util": "^26.6.2", + "micromatch": "^4.0.2", + "pirates": "^4.0.1", + "slash": "^3.0.0", + "source-map": "^0.6.1", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jest/types": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@opencensus/core": { + "version": "0.0.9", + "license": "Apache-2.0", + "dependencies": { + "continuation-local-storage": "^3.2.1", + "log-driver": "^1.2.7", + "semver": "^5.5.0", + "shimmer": "^1.2.0", + "uuid": "^3.2.1" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@opencensus/core/node_modules/semver": { + "version": "5.7.2", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@opencensus/core/node_modules/uuid": { + "version": "3.4.0", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@opencensus/propagation-b3": { + "version": "0.0.8", + "license": "Apache-2.0", + "dependencies": { + "@opencensus/core": "^0.0.8", + "uuid": "^3.2.1" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@opencensus/propagation-b3/node_modules/@opencensus/core": { + "version": "0.0.8", + "license": "Apache-2.0", + "dependencies": { + "continuation-local-storage": "^3.2.1", + "log-driver": "^1.2.7", + "semver": "^5.5.0", + "shimmer": "^1.2.0", + "uuid": "^3.2.1" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@opencensus/propagation-b3/node_modules/semver": { + "version": "5.7.2", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/@opencensus/propagation-b3/node_modules/uuid": { + "version": "3.4.0", + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/@pm2/agent": { + "version": "2.0.3", + "license": "AGPL-3.0", + "dependencies": { + "async": "~3.2.0", + "chalk": "~3.0.0", + "dayjs": "~1.8.24", + "debug": "~4.3.1", + "eventemitter2": "~5.0.1", + "fast-json-patch": "^3.0.0-1", + "fclone": "~1.0.11", + "nssocket": "0.6.0", + "pm2-axon": "~4.0.1", + "pm2-axon-rpc": "~0.7.0", + "proxy-agent": "~6.3.0", + "semver": "~7.5.0", + "ws": "~7.4.0" + } + }, + "node_modules/@pm2/agent/node_modules/chalk": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@pm2/agent/node_modules/dayjs": { + "version": "1.8.36", + "license": "MIT" + }, + "node_modules/@pm2/agent/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@pm2/agent/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@pm2/agent/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/@pm2/agent/node_modules/semver": { + "version": "7.5.4", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@pm2/agent/node_modules/ws": { + "version": "7.4.6", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@pm2/agent/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/@pm2/io": { + "version": "5.0.2", + "license": "Apache-2", + "dependencies": { + "@opencensus/core": "0.0.9", + "@opencensus/propagation-b3": "0.0.8", + "async": "~2.6.1", + "debug": "~4.3.1", + "eventemitter2": "^6.3.1", + "require-in-the-middle": "^5.0.0", + "semver": "~7.5.4", + "shimmer": "^1.2.0", + "signal-exit": "^3.0.3", + "tslib": "1.9.3" + }, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/@pm2/io/node_modules/async": { + "version": "2.6.4", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/@pm2/io/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@pm2/io/node_modules/eventemitter2": { + "version": "6.4.9", + "license": "MIT" + }, + "node_modules/@pm2/io/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@pm2/io/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/@pm2/io/node_modules/semver": { + "version": "7.5.4", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@pm2/io/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/@pm2/js-api": { + "version": "0.8.0", + "license": "Apache-2", + "dependencies": { + "async": "^2.6.3", + "debug": "~4.3.1", + "eventemitter2": "^6.3.1", + "extrareqp2": "^1.0.0", + "ws": "^7.0.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/@pm2/js-api/node_modules/async": { + "version": "2.6.4", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/@pm2/js-api/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@pm2/js-api/node_modules/eventemitter2": { + "version": "6.4.9", + "license": "MIT" + }, + "node_modules/@pm2/js-api/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/@pm2/pm2-version-check": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@pm2/pm2-version-check/-/pm2-version-check-1.0.4.tgz", + "integrity": "sha512-SXsM27SGH3yTWKc2fKR4SYNxsmnvuBQ9dd6QHtEWmiZ/VqaOYPAIlS8+vMcn27YLtAEBGvNRSh3TPNvtjZgfqA==", + "dependencies": { + "debug": "^4.3.1" + } + }, + "node_modules/@pm2/pm2-version-check/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@pm2/pm2-version-check/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/@prisma/client": { + "version": "5.11.0", + "hasInstallScript": true, + "license": "Apache-2.0", + "engines": { + "node": ">=16.13" + }, + "peerDependencies": { + "prisma": "*" + }, + "peerDependenciesMeta": { + "prisma": { + "optional": true + } + } + }, + "node_modules/@prisma/debug": { + "version": "5.11.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/engines": { + "version": "5.11.0", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.11.0", + "@prisma/engines-version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", + "@prisma/fetch-engine": "5.11.0", + "@prisma/get-platform": "5.11.0" + } + }, + "node_modules/@prisma/engines-version": { + "version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@prisma/fetch-engine": { + "version": "5.11.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.11.0", + "@prisma/engines-version": "5.11.0-15.efd2449663b3d73d637ea1fd226bafbcf45b3102", + "@prisma/get-platform": "5.11.0" + } + }, + "node_modules/@prisma/get-platform": { + "version": "5.11.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/debug": "5.11.0" + } + }, + "node_modules/@sideway/address": { + "version": "4.1.5", + "license": "BSD-3-Clause", + "dependencies": { + "@hapi/hoek": "^9.0.0" + } + }, + "node_modules/@sideway/formula": { + "version": "3.0.1", + "license": "BSD-3-Clause" + }, + "node_modules/@sideway/pinpoint": { + "version": "2.0.0", + "license": "BSD-3-Clause" + }, + "node_modules/@sinonjs/commons": { + "version": "1.8.6", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "6.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.7.0" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/@tootallnate/quickjs-emscripten": { + "version": "0.23.0", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/express": { + "version": "4.17.21", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.43", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.12.2", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prettier": { + "version": "2.7.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/qs": { + "version": "6.9.14", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/send": { + "version": "0.17.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "15.0.19", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.33.0", + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/typescript-estree": "4.33.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-utils": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "4.33.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "@typescript-eslint/visitor-keys": "4.33.0", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "4.33.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "4.33.0", + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/abab": { + "version": "2.0.6", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/accepts": { + "version": "1.3.8", + "license": "MIT", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "7.4.1", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-globals": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/amp": { + "version": "0.3.1", + "license": "MIT" + }, + "node_modules/amp-message": { + "version": "0.1.2", + "license": "MIT", + "dependencies": { + "amp": "0.3.1" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes/node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat/node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap/node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice/node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/asn1": { + "version": "0.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ast-types": { + "version": "0.13.4", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ast-types/node_modules/tslib": { + "version": "2.6.2", + "license": "0BSD" + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.5", + "license": "MIT" + }, + "node_modules/async-listener": { + "version": "0.6.10", + "license": "BSD-2-Clause", + "dependencies": { + "semver": "^5.3.0", + "shimmer": "^1.1.0" + }, + "engines": { + "node": "<=0.11.8 || >0.11.10" + } + }, + "node_modules/async-listener/node_modules/semver": { + "version": "5.7.2", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/atob": { + "version": "2.1.2", + "dev": true, + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.12.0", + "dev": true, + "license": "MIT" + }, + "node_modules/babel-jest": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/babel__core": "^7.1.7", + "babel-plugin-istanbul": "^6.0.0", + "babel-preset-jest": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-istanbul/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.0.0", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.8.3", + "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-top-level-await": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/babel-preset-jest": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "babel-plugin-jest-hoist": "^26.6.2", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base": { + "version": "0.11.2", + "dev": true, + "license": "MIT", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/basic-auth": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.1.2" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/basic-ftp": { + "version": "5.0.5", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/bcryptjs": { + "version": "2.4.3", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/blessed": { + "version": "0.1.81", + "license": "MIT", + "bin": { + "blessed": "bin/tput.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/bodec": { + "version": "0.1.0", + "license": "MIT" + }, + "node_modules/body-parser": { + "version": "1.20.2", + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-process-hrtime": { + "version": "1.0.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/browserslist": { + "version": "4.23.0", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "license": "BSD-3-Clause" + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001603", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/capture-exit": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "rsvp": "^4.8.4" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/char-regex": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/charm": { + "version": "0.1.2", + "license": "MIT/X11" + }, + "node_modules/chokidar": { + "version": "3.6.0", + "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" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/ci-info": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cjs-module-lexer": { + "version": "0.6.0", + "dev": true, + "license": "MIT" + }, + "node_modules/class-utils": { + "version": "0.3.6", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/is-descriptor": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-tableau": { + "version": "2.0.1", + "dependencies": { + "chalk": "3.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/cli-tableau/node_modules/chalk": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-truncate": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "slice-ansi": "^3.0.0", + "string-width": "^4.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cliui": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/co": { + "version": "4.6.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/collect-v8-coverage": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/colorette": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/colorspace": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "color": "^3.1.3", + "text-hex": "1.0.x" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "8.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12" + } + }, + "node_modules/component-emitter": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "license": "MIT", + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/confusing-browser-globals": { + "version": "1.0.11", + "dev": true, + "license": "MIT" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "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/content-type": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/continuation-local-storage": { + "version": "3.2.1", + "license": "BSD-2-Clause", + "dependencies": { + "async-listener": "^0.6.0", + "emitter-listener": "^1.1.1" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cookie": { + "version": "0.6.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "license": "MIT" + }, + "node_modules/cookiejar": { + "version": "2.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/core-util-is": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/cors": { + "version": "2.8.5", + "license": "MIT", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "7.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/coveralls": { + "version": "3.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.5", + "request": "^2.88.2" + }, + "bin": { + "coveralls": "bin/coveralls.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/croner": { + "version": "4.1.97", + "license": "MIT" + }, + "node_modules/cross-env": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" + }, + "engines": { + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssom": { + "version": "0.4.4", + "dev": true, + "license": "MIT" + }, + "node_modules/cssstyle": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cssom": "~0.3.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cssstyle/node_modules/cssom": { + "version": "0.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/culvert": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/dashdash": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/data-uri-to-buffer": { + "version": "6.0.2", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/data-urls": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.3", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dayjs": { + "version": "1.11.10", + "license": "MIT" + }, + "node_modules/debug": { + "version": "2.6.9", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.4.3", + "dev": true, + "license": "MIT" + }, + "node_modules/decode-uri-component": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/degenerator": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "ast-types": "^0.13.4", + "escodegen": "^2.1.0", + "esprima": "^4.0.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-newline": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff-sequences": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/domexception": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "webidl-conversions": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/domexception/node_modules/webidl-conversions": { + "version": "5.0.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "10.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=10" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/ecc-jsbn/node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.723", + "dev": true, + "license": "ISC" + }, + "node_modules/emitter-listener": { + "version": "1.1.2", + "license": "BSD-2-Clause", + "dependencies": { + "shimmer": "^1.2.0" + } + }, + "node_modules/emittery": { + "version": "0.7.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/emittery?sponsor=1" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enquirer": { + "version": "2.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "license": "BSD-2-Clause", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "7.32.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-airbnb-base": { + "version": "14.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "confusing-browser-globals": "^1.0.10", + "object.assign": "^4.1.2", + "object.entries": "^1.1.2" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "eslint": "^5.16.0 || ^6.8.0 || ^7.2.0", + "eslint-plugin-import": "^2.22.1" + } + }, + "node_modules/eslint-config-prettier": { + "version": "8.10.0", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-module-utils": { + "version": "2.8.1", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-import/node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-import/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jest": { + "version": "24.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/experimental-utils": "^4.0.1" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@typescript-eslint/eslint-plugin": ">= 4", + "eslint": ">=5" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-prettier": { + "version": "3.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "eslint": ">=5.0.0", + "prettier": ">=1.13.0" + }, + "peerDependenciesMeta": { + "eslint-config-prettier": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-security": { + "version": "1.7.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-regex": "^2.1.1" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/espree": { + "version": "7.3.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter2": { + "version": "5.0.1", + "license": "MIT" + }, + "node_modules/exec-sh": { + "version": "0.3.6", + "dev": true, + "license": "MIT" + }, + "node_modules/execa": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exit": { + "version": "0.1.2", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/expand-brackets/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-styles": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-regex-util": "^26.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/express": { + "version": "4.19.2", + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express-rate-limit": { + "version": "5.5.1", + "license": "MIT" + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "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/extend": { + "version": "3.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extrareqp2": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.14.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT" + }, + "node_modules/faker": { + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/faker/-/faker-5.5.3.tgz", + "integrity": "sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-patch": { + "version": "3.1.1", + "license": "MIT" + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/fclone": { + "version": "1.0.11", + "license": "MIT" + }, + "node_modules/fecha": { + "version": "4.2.3", + "license": "MIT" + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "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/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/formidable": { + "version": "2.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "dezalgo": "^1.0.4", + "hexoid": "^1.0.0", + "once": "^1.4.0", + "qs": "^6.11.0" + }, + "funding": { + "url": "https://ko-fi.com/tunnckoCore/commissions" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name/node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-uri": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "basic-ftp": "^5.0.2", + "data-uri-to-buffer": "^6.0.2", + "debug": "^4.3.4", + "fs-extra": "^11.2.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/get-uri/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/get-uri/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/get-value": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-node-fs": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/git-sha1": { + "version": "0.1.2", + "license": "MIT" + }, + "node_modules/glob": { + "version": "7.2.3", + "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", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "5.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/growly": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/har-schema": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-value": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/helmet": { + "version": "4.6.0", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/hexoid": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/html-encoding-sniffer": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^1.0.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/http-errors": { + "version": "2.0.0", + "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/http-proxy-agent": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/http-signature": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/http-status": { + "version": "1.7.4", + "license": "BSD-3-Clause", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/human-signals": { + "version": "1.1.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/husky": { + "version": "7.0.4", + "dev": true, + "license": "MIT", + "bin": { + "husky": "lib/bin.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-local": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "license": "ISC" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ip-address": { + "version": "9.0.5", + "license": "MIT", + "dependencies": { + "jsbn": "1.1.0", + "sprintf-js": "^1.1.3" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/ip-address/node_modules/sprintf-js": { + "version": "1.1.3", + "license": "BSD-3-Clause" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "dev": true, + "license": "MIT" + }, + "node_modules/is-callable": { + "version": "1.2.7", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-ci": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-descriptor": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-descriptor": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extendable": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-windows": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "4.0.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.7.5", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.0.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/istanbul-reports": { + "version": "3.1.7", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^26.6.3", + "import-local": "^3.0.2", + "jest-cli": "^26.6.3" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-changed-files": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "execa": "^4.0.0", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-cli": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^26.6.3", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "import-local": "^3.0.2", + "is-ci": "^2.0.0", + "jest-config": "^26.6.3", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "prompts": "^2.0.1", + "yargs": "^15.4.1" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-config": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.1.0", + "@jest/test-sequencer": "^26.6.3", + "@jest/types": "^26.6.2", + "babel-jest": "^26.6.3", + "chalk": "^4.0.0", + "deepmerge": "^4.2.2", + "glob": "^7.1.1", + "graceful-fs": "^4.2.4", + "jest-environment-jsdom": "^26.6.2", + "jest-environment-node": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-jasmine2": "^26.6.3", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + }, + "peerDependencies": { + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "ts-node": { + "optional": true + } + } + }, + "node_modules/jest-diff": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "diff-sequences": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-docblock": { + "version": "26.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "detect-newline": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-each": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-jsdom": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2", + "jsdom": "^16.4.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-environment-node": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "jest-mock": "^26.6.2", + "jest-util": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-get-type": { + "version": "26.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-haste-map": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@types/graceful-fs": "^4.1.2", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.4", + "jest-regex-util": "^26.0.0", + "jest-serializer": "^26.6.2", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "micromatch": "^4.0.2", + "sane": "^4.0.3", + "walker": "^1.0.7" + }, + "engines": { + "node": ">= 10.14.2" + }, + "optionalDependencies": { + "fsevents": "^2.1.2" + } + }, + "node_modules/jest-haste-map/node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/jest-jasmine2": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/traverse": "^7.1.0", + "@jest/environment": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "co": "^4.6.0", + "expect": "^26.6.2", + "is-generator-fn": "^2.0.0", + "jest-each": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "pretty-format": "^26.6.2", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-leak-detector": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-matcher-utils": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.0.0", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-message-util": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "micromatch": "^4.0.2", + "pretty-format": "^26.6.2", + "slash": "^3.0.0", + "stack-utils": "^2.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-mock": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-pnp-resolver": { + "version": "1.2.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "jest-resolve": "*" + }, + "peerDependenciesMeta": { + "jest-resolve": { + "optional": true + } + } + }, + "node_modules/jest-regex-util": { + "version": "26.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "jest-pnp-resolver": "^1.2.2", + "jest-util": "^26.6.2", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-resolve-dependencies": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-snapshot": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runner": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "emittery": "^0.7.1", + "exit": "^0.1.2", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-docblock": "^26.0.0", + "jest-haste-map": "^26.6.2", + "jest-leak-detector": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "jest-runtime": "^26.6.3", + "jest-util": "^26.6.2", + "jest-worker": "^26.6.2", + "source-map-support": "^0.5.6", + "throat": "^5.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-runtime": { + "version": "26.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^26.6.2", + "@jest/environment": "^26.6.2", + "@jest/fake-timers": "^26.6.2", + "@jest/globals": "^26.6.2", + "@jest/source-map": "^26.6.2", + "@jest/test-result": "^26.6.2", + "@jest/transform": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/yargs": "^15.0.0", + "chalk": "^4.0.0", + "cjs-module-lexer": "^0.6.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.4", + "jest-config": "^26.6.3", + "jest-haste-map": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-mock": "^26.6.2", + "jest-regex-util": "^26.0.0", + "jest-resolve": "^26.6.2", + "jest-snapshot": "^26.6.2", + "jest-util": "^26.6.2", + "jest-validate": "^26.6.2", + "slash": "^3.0.0", + "strip-bom": "^4.0.0", + "yargs": "^15.4.1" + }, + "bin": { + "jest-runtime": "bin/jest-runtime.js" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-serializer": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "graceful-fs": "^4.2.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-snapshot": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/types": "^7.0.0", + "@jest/types": "^26.6.2", + "@types/babel__traverse": "^7.0.4", + "@types/prettier": "^2.0.0", + "chalk": "^4.0.0", + "expect": "^26.6.2", + "graceful-fs": "^4.2.4", + "jest-diff": "^26.6.2", + "jest-get-type": "^26.3.0", + "jest-haste-map": "^26.6.2", + "jest-matcher-utils": "^26.6.2", + "jest-message-util": "^26.6.2", + "jest-resolve": "^26.6.2", + "natural-compare": "^1.4.0", + "pretty-format": "^26.6.2", + "semver": "^7.3.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-util": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "@types/node": "*", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.4", + "is-ci": "^2.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "camelcase": "^6.0.0", + "chalk": "^4.0.0", + "jest-get-type": "^26.3.0", + "leven": "^3.1.0", + "pretty-format": "^26.6.2" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-watcher": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/test-result": "^26.6.2", + "@jest/types": "^26.6.2", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "jest-util": "^26.6.2", + "string-length": "^4.0.1" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/jest-worker": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/joi": { + "version": "17.12.2", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.12.2.tgz", + "integrity": "sha512-RonXAIzCiHLc8ss3Ibuz45u28GOsWE1UpfDXLbN/9NKbL4tCJf8TWYVKsoYuuh+sAUt7fsSNpA+r2+TBA6Wjmw==", + "dependencies": { + "@hapi/hoek": "^9.3.0", + "@hapi/topo": "^5.1.0", + "@sideway/address": "^4.1.5", + "@sideway/formula": "^3.0.1", + "@sideway/pinpoint": "^2.0.0" + } + }, + "node_modules/js-git": { + "version": "0.7.8", + "license": "MIT", + "dependencies": { + "bodec": "^0.1.0", + "culvert": "^0.1.2", + "git-sha1": "^0.1.2", + "pako": "^0.2.5" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/jsdom": { + "version": "16.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.5", + "acorn": "^8.2.4", + "acorn-globals": "^6.0.0", + "cssom": "^0.4.4", + "cssstyle": "^2.3.0", + "data-urls": "^2.0.0", + "decimal.js": "^10.2.1", + "domexception": "^2.0.1", + "escodegen": "^2.0.0", + "form-data": "^3.0.0", + "html-encoding-sniffer": "^2.0.1", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.0", + "parse5": "6.0.1", + "saxes": "^5.0.1", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.0.0", + "w3c-hr-time": "^1.0.2", + "w3c-xmlserializer": "^2.0.0", + "webidl-conversions": "^6.1.0", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^8.5.0", + "ws": "^7.4.6", + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "canvas": "^2.5.0" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/acorn": { + "version": "8.11.3", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "dev": true, + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "devOptional": true, + "license": "ISC" + }, + "node_modules/json5": { + "version": "2.2.3", + "dev": true, + "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonwebtoken": { + "version": "8.5.1", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=4", + "npm": ">=1.4.28" + } + }, + "node_modules/jsonwebtoken/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/jsonwebtoken/node_modules/semver": { + "version": "5.7.2", + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "license": "MIT", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "license": "MIT", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/lazy": { + "version": "1.0.11", + "license": "MIT", + "engines": { + "node": ">=0.2.0" + } + }, + "node_modules/lcov-parse": { + "version": "1.0.0", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "lcov-parse": "bin/cli.js" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "11.2.6", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "2.1.0", + "colorette": "^1.4.0", + "commander": "^8.2.0", + "cosmiconfig": "^7.0.1", + "debug": "^4.3.2", + "enquirer": "^2.3.6", + "execa": "^5.1.1", + "listr2": "^3.12.2", + "micromatch": "^4.0.4", + "normalize-path": "^3.0.0", + "please-upgrade-node": "^3.2.0", + "string-argv": "0.3.1", + "stringify-object": "3.3.0", + "supports-color": "8.1.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/lint-staged/node_modules/execa": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lint-staged/node_modules/human-signals": { + "version": "2.1.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/lint-staged/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lint-staged/node_modules/supports-color": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/listr2": { + "version": "3.14.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cli-truncate": "^2.1.0", + "colorette": "^2.0.16", + "log-update": "^4.0.0", + "p-map": "^4.0.0", + "rfdc": "^1.3.0", + "rxjs": "^7.5.1", + "through": "^2.3.8", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } + } + }, + "node_modules/listr2/node_modules/colorette": { + "version": "2.0.20", + "dev": true, + "license": "MIT" + }, + "node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.get": { + "version": "4.4.2", + "license": "MIT" + }, + "node_modules/lodash.includes": { + "version": "4.3.0", + "license": "MIT" + }, + "node_modules/lodash.isboolean": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lodash.isinteger": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/lodash.isnumber": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "license": "MIT" + }, + "node_modules/lodash.isstring": { + "version": "4.0.1", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.mergewith": { + "version": "4.6.2", + "license": "MIT" + }, + "node_modules/lodash.once": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/lodash.truncate": { + "version": "4.4.2", + "dev": true, + "license": "MIT" + }, + "node_modules/log-driver": { + "version": "1.2.7", + "license": "ISC", + "engines": { + "node": ">=0.8.6" + } + }, + "node_modules/log-update": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.0", + "cli-cursor": "^3.1.0", + "slice-ansi": "^4.0.0", + "wrap-ansi": "^6.2.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/logform": { + "version": "2.6.0", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/logform/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/makeerror": { + "version": "1.0.12", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/map-cache": { + "version": "0.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/module-details-from-path": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/moment": { + "version": "2.30.1", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/morgan": { + "version": "1.10.0", + "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/on-finished": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "license": "ISC" + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/needle": { + "version": "2.4.0", + "license": "MIT", + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netmask": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/nice-try": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/node-int64": { + "version": "0.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/node-mocks-http": { + "version": "1.14.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/express": "^4.17.21", + "@types/node": "^20.10.6", + "accepts": "^1.3.7", + "content-disposition": "^0.5.3", + "depd": "^1.1.0", + "fresh": "^0.5.2", + "merge-descriptors": "^1.0.1", + "methods": "^1.1.2", + "mime": "^1.3.4", + "parseurl": "^1.3.3", + "range-parser": "^1.2.0", + "type-is": "^1.6.18" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/node-mocks-http/node_modules/depd": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-notifier": { + "version": "8.0.2", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "dev": true, + "license": "MIT" + }, + "node_modules/nodemailer": { + "version": "6.9.13", + "license": "MIT-0", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/nodemon": { + "version": "2.0.22", + "dev": true, + "license": "MIT", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "3.2.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/nodemon/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nssocket": { + "version": "0.6.0", + "license": "MIT", + "dependencies": { + "eventemitter2": "~0.4.14", + "lazy": "~1.0.11" + }, + "engines": { + "node": ">= 0.10.x" + } + }, + "node_modules/nssocket/node_modules/eventemitter2": { + "version": "0.4.14", + "license": "MIT" + }, + "node_modules/nwsapi": { + "version": "2.2.7", + "dev": true, + "license": "MIT" + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/is-descriptor": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.fromentries/node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.groupby/node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "license": "MIT", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-each-series": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pac-proxy-agent": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "@tootallnate/quickjs-emscripten": "^0.23.0", + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "get-uri": "^6.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "pac-resolver": "^7.0.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pac-proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.4", + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pac-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/pac-resolver": { + "version": "7.0.1", + "license": "MIT", + "dependencies": { + "degenerator": "^5.0.0", + "netmask": "^2.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/pako": { + "version": "0.2.9", + "license": "MIT" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse5": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/parseurl": { + "version": "1.3.3", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/passport": { + "version": "0.4.1", + "license": "MIT", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-jwt": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "jsonwebtoken": "^9.0.0", + "passport-strategy": "^1.0.0" + } + }, + "node_modules/passport-jwt/node_modules/jsonwebtoken": { + "version": "9.0.2", + "license": "MIT", + "dependencies": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/passport-jwt/node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "license": "MIT" + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pause": { + "version": "0.0.1" + }, + "node_modules/performance-now": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidusage": { + "version": "3.0.2", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pidusage/node_modules/safe-buffer": { + "version": "5.2.1", + "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/pirates": { + "version": "4.0.6", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/pm2": { + "version": "5.3.1", + "license": "AGPL-3.0", + "dependencies": { + "@pm2/agent": "~2.0.0", + "@pm2/io": "~5.0.0", + "@pm2/js-api": "~0.8.0", + "@pm2/pm2-version-check": "latest", + "async": "~3.2.0", + "blessed": "0.1.81", + "chalk": "3.0.0", + "chokidar": "^3.5.3", + "cli-tableau": "^2.0.0", + "commander": "2.15.1", + "croner": "~4.1.92", + "dayjs": "~1.11.5", + "debug": "^4.3.1", + "enquirer": "2.3.6", + "eventemitter2": "5.0.1", + "fclone": "1.0.11", + "mkdirp": "1.0.4", + "needle": "2.4.0", + "pidusage": "~3.0", + "pm2-axon": "~4.0.1", + "pm2-axon-rpc": "~0.7.1", + "pm2-deploy": "~1.0.2", + "pm2-multimeter": "^0.1.2", + "promptly": "^2", + "semver": "^7.2", + "source-map-support": "0.5.21", + "sprintf-js": "1.1.2", + "vizion": "~2.2.1", + "yamljs": "0.3.0" + }, + "bin": { + "pm2": "bin/pm2", + "pm2-dev": "bin/pm2-dev", + "pm2-docker": "bin/pm2-docker", + "pm2-runtime": "bin/pm2-runtime" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "pm2-sysmonit": "^1.2.8" + } + }, + "node_modules/pm2-axon": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "amp": "~0.3.1", + "amp-message": "~0.1.1", + "debug": "^4.3.1", + "escape-string-regexp": "^4.0.0" + }, + "engines": { + "node": ">=5" + } + }, + "node_modules/pm2-axon-rpc": { + "version": "0.7.1", + "license": "MIT", + "dependencies": { + "debug": "^4.3.1" + }, + "engines": { + "node": ">=5" + } + }, + "node_modules/pm2-axon-rpc/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pm2-axon-rpc/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/pm2-axon/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pm2-axon/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/pm2-deploy": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "run-series": "^1.1.8", + "tv4": "^1.3.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pm2-multimeter": { + "version": "0.1.2", + "license": "MIT/X11", + "dependencies": { + "charm": "~0.1.1" + } + }, + "node_modules/pm2-sysmonit": { + "version": "1.2.8", + "license": "Apache", + "optional": true, + "dependencies": { + "async": "^3.2.0", + "debug": "^4.3.1", + "pidusage": "^2.0.21", + "systeminformation": "^5.7", + "tx2": "~1.0.4" + } + }, + "node_modules/pm2-sysmonit/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pm2-sysmonit/node_modules/ms": { + "version": "2.1.2", + "license": "MIT", + "optional": true + }, + "node_modules/pm2-sysmonit/node_modules/pidusage": { + "version": "2.0.21", + "license": "MIT", + "optional": true, + "dependencies": { + "safe-buffer": "^5.2.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pm2-sysmonit/node_modules/safe-buffer": { + "version": "5.2.1", + "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", + "optional": true + }, + "node_modules/pm2/node_modules/chalk": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pm2/node_modules/commander": { + "version": "2.15.1", + "license": "MIT" + }, + "node_modules/pm2/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/pm2/node_modules/enquirer": { + "version": "2.3.6", + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pm2/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/pm2/node_modules/sprintf-js": { + "version": "1.1.2", + "license": "BSD-3-Clause" + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "2.8.8", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/pretty-format": { + "version": "26.6.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^26.6.2", + "ansi-regex": "^5.0.0", + "ansi-styles": "^4.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/prisma": { + "version": "5.11.0", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@prisma/engines": "5.11.0" + }, + "bin": { + "prisma": "build/index.js" + }, + "engines": { + "node": ">=16.13" + } + }, + "node_modules/progress": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promptly": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "read": "^1.0.4" + } + }, + "node_modules/prompts": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "kleur": "^3.0.3", + "sisteransi": "^1.0.5" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "license": "MIT", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-agent": { + "version": "6.3.1", + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "^4.3.4", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "lru-cache": "^7.14.1", + "pac-proxy-agent": "^7.0.1", + "proxy-from-env": "^1.1.0", + "socks-proxy-agent": "^8.0.2" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/proxy-agent/node_modules/http-proxy-agent": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/https-proxy-agent": { + "version": "7.0.4", + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/proxy-agent/node_modules/lru-cache": { + "version": "7.18.3", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/proxy-agent/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/psl": { + "version": "1.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "dev": true, + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "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/range-parser": { + "version": "1.2.1", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "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/raw-body/node_modules/bytes": { + "version": "3.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/read": { + "version": "1.0.7", + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not/node_modules/safe-regex": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "dev": true, + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexpp": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "dev": true, + "license": "ISC" + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/request": { + "version": "2.88.2", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request/node_modules/form-data": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/request/node_modules/tough-cookie": { + "version": "2.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/request/node_modules/uuid": { + "version": "3.4.0", + "dev": true, + "license": "MIT", + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "5.2.0", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/require-in-the-middle/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/require-in-the-middle/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve": { + "version": "1.22.8", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-cwd": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rsvp": { + "version": "4.8.5", + "dev": true, + "license": "MIT", + "engines": { + "node": "6.* || >= 7.*" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "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": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-series": { + "version": "1.1.9", + "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/rxjs": { + "version": "7.8.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "2.6.2", + "dev": true, + "license": "0BSD" + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "license": "MIT" + }, + "node_modules/safe-regex": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "regexp-tree": "~0.1.1" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.4.3", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/sane": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@cnakazawa/watch": "^1.0.3", + "anymatch": "^2.0.0", + "capture-exit": "^2.0.0", + "exec-sh": "^0.3.2", + "execa": "^1.0.0", + "fb-watchman": "^2.0.0", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5" + }, + "bin": { + "sane": "src/cli.js" + }, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/sane/node_modules/anymatch": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/sane/node_modules/braces": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/cross-spawn": { + "version": "6.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/sane/node_modules/execa": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/fill-range": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/get-stream": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sane/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/is-stream": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/micromatch": { + "version": "3.1.10", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/normalize-path": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/npm-run-path": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/sane/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/sane/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/to-regex-range": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sane/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/sax": { + "version": "1.3.0", + "license": "ISC" + }, + "node_modules/saxes": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.6.0", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" + }, + "node_modules/send": { + "version": "0.18.0", + "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/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "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/set-blocking": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "license": "ISC" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shellwords": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "optional": true + }, + "node_modules/shimmer": { + "version": "1.2.1", + "license": "BSD-2-Clause" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "license": "MIT" + }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slice-ansi": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "license": "MIT", + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/is-descriptor": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/snapdragon/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/source-map": { + "version": "0.5.7", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/socks": { + "version": "2.8.1", + "license": "MIT", + "dependencies": { + "ip-address": "^9.0.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.3", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.1", + "debug": "^4.3.4", + "socks": "^2.7.1" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/agent-base": { + "version": "7.1.1", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/source-map": { + "version": "0.6.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "dev": true, + "license": "MIT", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.17", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/split-string": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "license": "BSD-3-Clause" + }, + "node_modules/sshpk": { + "version": "1.18.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sshpk/node_modules/jsbn": { + "version": "0.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/is-descriptor": { + "version": "0.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.2.1", + "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/string-argv": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-length": { + "version": "4.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "char-regex": "^1.0.2", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trim/node_modules/es-abstract": { + "version": "1.23.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", + "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "dev": true, + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/superagent": { + "version": "8.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.4", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.1.2", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.11.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=6.4.0 <13 || >=14" + } + }, + "node_modules/superagent/node_modules/debug": { + "version": "4.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/superagent/node_modules/form-data": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/superagent/node_modules/ms": { + "version": "2.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/supertest": { + "version": "6.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "methods": "^1.1.2", + "superagent": "^8.1.2" + }, + "engines": { + "node": ">=6.4.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/swagger-jsdoc": { + "version": "6.2.8", + "license": "MIT", + "dependencies": { + "commander": "6.2.0", + "doctrine": "3.0.0", + "glob": "7.1.6", + "lodash.mergewith": "^4.6.2", + "swagger-parser": "^10.0.3", + "yaml": "2.0.0-1" + }, + "bin": { + "swagger-jsdoc": "bin/swagger-jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/swagger-jsdoc/node_modules/commander": { + "version": "6.2.0", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/swagger-jsdoc/node_modules/glob": { + "version": "7.1.6", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/swagger-jsdoc/node_modules/yaml": { + "version": "2.0.0-1", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/swagger-parser": { + "version": "10.0.3", + "license": "MIT", + "dependencies": { + "@apidevtools/swagger-parser": "10.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/swagger-ui-dist": { + "version": "5.13.0", + "license": "Apache-2.0" + }, + "node_modules/swagger-ui-express": { + "version": "4.6.3", + "license": "MIT", + "dependencies": { + "swagger-ui-dist": ">=4.11.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0 || >=5.0.0-beta" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "dev": true, + "license": "MIT" + }, + "node_modules/systeminformation": { + "version": "5.22.6", + "license": "MIT", + "optional": true, + "os": [ + "darwin", + "linux", + "win32", + "freebsd", + "openbsd", + "netbsd", + "sunos", + "android" + ], + "bin": { + "systeminformation": "lib/cli.js" + }, + "engines": { + "node": ">=8.0.0" + }, + "funding": { + "type": "Buy me a coffee", + "url": "https://www.buymeacoffee.com/systeminfo" + } + }, + "node_modules/table": { + "version": "6.8.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "8.12.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/table/node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/text-hex": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/throat": { + "version": "5.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/through": { + "version": "2.3.8", + "dev": true, + "license": "MIT" + }, + "node_modules/tmpl": { + "version": "1.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/to-regex/node_modules/safe-regex": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/tslib": { + "version": "1.9.3", + "license": "Apache-2.0" + }, + "node_modules/tsutils": { + "version": "3.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tv4": { + "version": "1.3.0", + "license": [ + { + "type": "Public Domain", + "url": "http://geraintluff.github.io/tv4/LICENSE.txt" + }, + { + "type": "MIT", + "url": "http://jsonary.com/LICENSE.txt" + } + ], + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "dev": true, + "license": "Unlicense" + }, + "node_modules/tx2": { + "version": "1.0.5", + "license": "MIT", + "optional": true, + "dependencies": { + "json-stringify-safe": "^5.0.1" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "license": "MIT", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "5.26.5", + "dev": true, + "license": "MIT" + }, + "node_modules/union-value": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/union-value/node_modules/is-extendable": { + "version": "0.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unset-value": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/url-parse": { + "version": "1.5.10", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/use": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "dev": true, + "license": "MIT", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validator": { + "version": "13.11.0", + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/verror": { + "version": "1.10.0", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/vizion": { + "version": "2.2.1", + "license": "Apache-2.0", + "dependencies": { + "async": "^2.6.3", + "git-node-fs": "^1.0.0", + "ini": "^1.3.5", + "js-git": "^0.7.8" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/vizion/node_modules/async": { + "version": "2.6.4", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/w3c-hr-time": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-process-hrtime": "^1.0.0" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "xml-name-validator": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/walker": { + "version": "1.0.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=10.4" + } + }, + "node_modules/whatwg-encoding": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "iconv-lite": "0.4.24" + } + }, + "node_modules/whatwg-mimetype": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/winston": { + "version": "3.13.0", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.2", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.4.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.7.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.7.0", + "license": "MIT", + "dependencies": { + "logform": "^2.3.2", + "readable-stream": "^3.6.0", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "license": "MIT", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml-name-validator": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/xss-clean": { + "version": "0.1.4", + "license": "MIT", + "dependencies": { + "xss-filters": "1.2.7" + } + }, + "node_modules/xss-filters": { + "version": "1.2.7" + }, + "node_modules/y18n": { + "version": "4.0.3", + "dev": true, + "license": "ISC" + }, + "node_modules/yallist": { + "version": "3.1.1", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "1.10.2", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, + "node_modules/yamljs": { + "version": "0.3.0", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "glob": "^7.0.5" + }, + "bin": { + "json2yaml": "bin/json2yaml", + "yaml2json": "bin/yaml2json" + } + }, + "node_modules/yargs": { + "version": "15.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs-parser": { + "version": "18.1.3", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/z-schema": { + "version": "5.0.5", + "license": "MIT", + "dependencies": { + "lodash.get": "^4.4.2", + "lodash.isequal": "^4.5.0", + "validator": "^13.7.0" + }, + "bin": { + "z-schema": "bin/z-schema" + }, + "engines": { + "node": ">=8.0.0" + }, + "optionalDependencies": { + "commander": "^9.4.1" + } + }, + "node_modules/z-schema/node_modules/commander": { + "version": "9.5.0", + "license": "MIT", + "optional": true, + "engines": { + "node": "^12.20.0 || >=14" + } + } + } +} diff --git a/inventory-system/package.json b/inventory-system/package.json new file mode 100644 index 000000000..21628e930 --- /dev/null +++ b/inventory-system/package.json @@ -0,0 +1,84 @@ +{ + "name": "inventory-system", + "version": "1.7.0", + "description": "Inventory System Backend", + "bin": "bin/createNodejsApp.js", + "main": "src/index.js", + "repository": "URL Repo kalian", + "author": "Faisal Firdani ", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "scripts": { + "start": "pm2 start ecosystem.config.json --no-daemon", + "dev": "cross-env NODE_ENV=development nodemon src/index.js", + "lint": "eslint .", + "lint:fix": "eslint . --fix", + "prettier": "prettier --check **/*.js", + "prettier:fix": "prettier --write **/*.js" + }, + "keywords": [ + "node", + "node.js", + "boilerplate", + "generator", + "express", + "rest", + "api", + "es6", + "es7", + "es8", + "es9", + "travis", + "docker", + "passport", + "joi", + "eslint", + "prettier" + ], + "dependencies": { + "@prisma/client": "^5.3.1", + "bcryptjs": "^2.4.3", + "compression": "^1.7.4", + "cors": "^2.8.5", + "cross-env": "^7.0.0", + "dotenv": "^10.0.0", + "express": "^4.17.1", + "express-rate-limit": "^5.0.0", + "helmet": "^4.1.0", + "http-status": "^1.4.0", + "joi": "^17.12.2", + "jsonwebtoken": "^8.5.1", + "moment": "^2.24.0", + "morgan": "^1.9.1", + "nodemailer": "^6.3.1", + "passport": "^0.4.0", + "passport-jwt": "^4.0.0", + "pm2": "^5.1.0", + "swagger-jsdoc": "^6.0.8", + "swagger-ui-express": "^4.1.6", + "validator": "^13.0.0", + "winston": "^3.2.1", + "xss-clean": "^0.1.1" + }, + "devDependencies": { + "coveralls": "^3.0.7", + "eslint": "^7.0.0", + "eslint-config-airbnb-base": "^14.0.0", + "eslint-config-prettier": "^8.1.0", + "eslint-plugin-import": "^2.18.2", + "eslint-plugin-jest": "^24.0.1", + "eslint-plugin-prettier": "^3.1.1", + "eslint-plugin-security": "^1.4.0", + "faker": "^5.1.0", + "husky": "^7.0.0", + "jest": "^26.0.1", + "lint-staged": "^11.0.0", + "node-mocks-http": "^1.8.0", + "nodemon": "^2.0.0", + "prettier": "^2.0.5", + "prisma": "^5.3.1", + "supertest": "^6.0.1" + } +} diff --git a/inventory-system/prisma/client.js b/inventory-system/prisma/client.js new file mode 100644 index 000000000..0dbc8022c --- /dev/null +++ b/inventory-system/prisma/client.js @@ -0,0 +1,5 @@ +const { PrismaClient } = require('@prisma/client'); + +const prisma = new PrismaClient(); + +module.exports = prisma; diff --git a/inventory-system/prisma/schema.prisma b/inventory-system/prisma/schema.prisma new file mode 100644 index 000000000..d28713d8d --- /dev/null +++ b/inventory-system/prisma/schema.prisma @@ -0,0 +1,82 @@ +generator client { + provider = "prisma-client-js" +} + +datasource db { + provider = "mysql" + url = env("DATABASE_URL") +} + +model User { + id String @id @default(uuid()) + name String + email String? @unique + password String + role String @default("user") + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt + isEmailVerified Boolean @default(false) + tokens Token[] + products Product[] + orders Order[] +} + +model Token { + id String @id @default(uuid()) + token String @db.VarChar(400) + userId String + User User @relation(fields: [userId], references: [id], onDelete: Cascade) + type String + expires DateTime + blacklisted Boolean @default(false) + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Product { + id String @id @default(uuid()) + name String + description String + price Float + quantityInStock Int + categoryId String + category Category @relation(fields: [categoryId], references: [id]) + userId String + user User @relation(fields: [userId], references: [id]) + orderItems OrderItem[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Category { + id String @id @default(uuid()) + name String + products Product[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model Order { + id String @id @default(uuid()) + date DateTime + totalPrice Float + customerName String + customerEmail String + userId String + user User @relation(fields: [userId], references: [id]) + orderItems OrderItem[] + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} + +model OrderItem { + id String @id @default(uuid()) + orderId String + order Order @relation(fields: [orderId], references: [id]) + productId String + product Product @relation(fields: [productId], references: [id]) + quantity Int + unitPrice Float + createdAt DateTime @default(now()) + updatedAt DateTime @updatedAt +} diff --git a/inventory-system/src/app.js b/inventory-system/src/app.js new file mode 100644 index 000000000..7f8c6918e --- /dev/null +++ b/inventory-system/src/app.js @@ -0,0 +1,18 @@ +const express = require('express'); +// const router = require('./routes'); + +const app = express(); + +// aktifin parsing json +app.use(express.json()); + +// aktifin urlencoded +app.use(express.urlencoded({ extended: true })); + +app.get('/', (req, res) => { + res.send('hello world'); +}); + +// app.use(router) + +module.exports = app; diff --git a/inventory-system/src/config/config.js b/inventory-system/src/config/config.js new file mode 100644 index 000000000..db684f853 --- /dev/null +++ b/inventory-system/src/config/config.js @@ -0,0 +1,17 @@ +const dotenv = require('dotenv'); +const path = require('path'); + +dotenv.config({ path: path.join(__dirname, '../../.env') }); + +module.exports = { + env: process.env.NODE_ENV, + port: process.env.PORT, + database: { + url: process.env.DATABASE_URL, + }, + jwt: { + secret: process.env.JWT_SECRET, + accessExpirationMinutes: process.env.JWT_ACCESS_EXPIRATION_MINUTES, + refreshExpirationDays: process.env.JWT_REFRESH_EXPIRATION_DAYS, + }, +}; diff --git a/inventory-system/src/config/logger.js b/inventory-system/src/config/logger.js new file mode 100644 index 000000000..bba9a7cec --- /dev/null +++ b/inventory-system/src/config/logger.js @@ -0,0 +1,26 @@ +const winston = require('winston'); +const config = require('./config'); + +const enumerateErrorFormat = winston.format((info) => { + if (info instanceof Error) { + Object.assign(info, { message: info.stack }); + } + return info; +}); + +const logger = winston.createLogger({ + level: config.env === 'development' ? 'debug' : 'info', + format: winston.format.combine( + enumerateErrorFormat(), + config.env === 'development' ? winston.format.colorize() : winston.format.uncolorize(), + winston.format.splat(), + winston.format.printf(({ level, message }) => `${level}: ${message}`) + ), + transports: [ + new winston.transports.Console({ + stderrLevels: ['error'], + }), + ], +}); + +module.exports = logger; diff --git a/inventory-system/src/config/morgan.js b/inventory-system/src/config/morgan.js new file mode 100644 index 000000000..523925220 --- /dev/null +++ b/inventory-system/src/config/morgan.js @@ -0,0 +1,24 @@ +const morgan = require('morgan'); +const config = require('./config'); +const logger = require('./logger'); + +morgan.token('message', (req, res) => res.locals.errorMessage || ''); + +const getIpFormat = () => (config.env === 'production' ? ':remote-addr - ' : ''); +const successResponseFormat = `${getIpFormat()}:method :url :status - :response-time ms`; +const errorResponseFormat = `${getIpFormat()}:method :url :status - :response-time ms - message: :message`; + +const successHandler = morgan(successResponseFormat, { + skip: (req, res) => res.statusCode >= 400, + stream: { write: (message) => logger.info(message.trim()) }, +}); + +const errorHandler = morgan(errorResponseFormat, { + skip: (req, res) => res.statusCode < 400, + stream: { write: (message) => logger.error(message.trim()) }, +}); + +module.exports = { + successHandler, + errorHandler, +}; diff --git a/inventory-system/src/config/passport.js b/inventory-system/src/config/passport.js new file mode 100644 index 000000000..3cefd8fad --- /dev/null +++ b/inventory-system/src/config/passport.js @@ -0,0 +1,30 @@ +const { Strategy: JwtStrategy, ExtractJwt } = require('passport-jwt'); +const config = require('./config'); +const { tokenTypes } = require('./tokens'); +const prisma = require('../../prisma/client') + +const jwtOptions = { + secretOrKey: config.jwt.secret, + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), +}; + +const jwtVerify = async (payload, done) => { + try { + if (payload.type !== tokenTypes.ACCESS) { + throw new Error('Invalid token type'); + } + const user = await prisma.user.findFirst({where: {id: payload.sub}}); + if (!user) { + return done(null, false); + } + done(null, user); + } catch (error) { + done(error, false); + } +}; + +const jwtStrategy = new JwtStrategy(jwtOptions, jwtVerify); + +module.exports = { + jwtStrategy, +}; diff --git a/inventory-system/src/config/tokens.js b/inventory-system/src/config/tokens.js new file mode 100644 index 000000000..77a9976fd --- /dev/null +++ b/inventory-system/src/config/tokens.js @@ -0,0 +1,10 @@ +const tokenTypes = { + ACCESS: 'access', + REFRESH: 'refresh', + RESET_PASSWORD: 'resetPassword', + VERIFY_EMAIL: 'verifyEmail', +}; + +module.exports = { + tokenTypes, +}; diff --git a/inventory-system/src/controllers/auth.controller.js b/inventory-system/src/controllers/auth.controller.js new file mode 100644 index 000000000..72e353035 --- /dev/null +++ b/inventory-system/src/controllers/auth.controller.js @@ -0,0 +1,28 @@ +const httpStatus = require('http-status'); +const catchAsync = require('../utils/catchAsync'); +const { authService, userService, tokenService } = require('../services'); +const ApiError = require('../utils/ApiError'); + +const register = catchAsync(async (req, res) => { + const existingUser = await userService.getUserByEmail(req.body.email); + + if (existingUser) { + throw new ApiError(httpStatus.BAD_REQUEST, 'Email already taken'); + } + + const userCreated = await userService.createUser(req.body); + const tokens = await tokenService.generateAuthTokens(userCreated); + res.status(httpStatus.CREATED).send({ userCreated, tokens }); +}); + +const login = catchAsync(async (req, res) => { + const { email, password } = req.body; + const user = await authService.loginUserWithEmailAndPassword(email, password); + const tokens = await tokenService.generateAuthTokens(user); + res.send({ user, tokens }); +}); + +module.exports = { + register, + login, +}; diff --git a/inventory-system/src/controllers/user.controller.js b/inventory-system/src/controllers/user.controller.js new file mode 100644 index 000000000..7df94c2c2 --- /dev/null +++ b/inventory-system/src/controllers/user.controller.js @@ -0,0 +1,63 @@ +const userService = require('../services/user.service'); + +const createUserController = async (req, res) => { + try { + const newUser = await userService.createUser(req.body); + res.status(201).json(newUser); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const getAllUsersController = async (req, res) => { + try { + const users = await userService.getAllUsers(); + res.status(200).json(users); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const getUserByIdController = async (req, res) => { + try { + const user = await userService.getUserById(req.params.id); + if (user) { + res.status(200).json(user); + } else { + res.status(404).send('User not found'); + } + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const updateUserController = async (req, res) => { + try { + const updatedUser = await userService.updateUser(req.params.id, req.body); + res.status(200).json(updatedUser); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +const deleteUserController = async (req, res) => { + const userId = req.params.id; + + try { + const deletedUser = await userService.deleteUser(userId); + res.status(200).json({ + message: 'User has been deleted successfully', + deletedUser: deletedUser // Include deleted user's data in the response + }); + } catch (error) { + res.status(500).json({ error: error.message }); + } +}; + +module.exports = { + createUserController, + getAllUsersController, + getUserByIdController, + updateUserController, + deleteUserController, +}; diff --git a/inventory-system/src/index.js b/inventory-system/src/index.js new file mode 100644 index 000000000..2a59655e2 --- /dev/null +++ b/inventory-system/src/index.js @@ -0,0 +1,45 @@ +const app = require('./app'); +const prisma = require('../prisma/client'); +const config = require('./config/config'); + +let server; + +const port = process.env.PORT || 4000; + +server = app.listen(port, () => { + console.log(`Server is running on http://localhost:${port}`); +}); + + +if (prisma) { + console.log('Connected to Database'); + server = app.listen(config.port, () => { + console.log(`Server is running on http://localhost:${port}`); + }); +} + +const exitHandler = () => { + if (server) { + server.close(() => { + console.log('Server closed'); + process.exit(1); + }); + } else { + process.exit(1); + } +}; + +const unexpectedErrorHandler = (error) => { + console.log(error); + exitHandler(); +}; + +process.on('uncaughtException', unexpectedErrorHandler); +process.on('unhandledRejection', unexpectedErrorHandler); + +process.on('SIGTERM', () => { + console.log('SIGTERM received'); + if (server) { + server.close(); + } +}); diff --git a/inventory-system/src/routes/index.js b/inventory-system/src/routes/index.js new file mode 100644 index 000000000..71b5156ab --- /dev/null +++ b/inventory-system/src/routes/index.js @@ -0,0 +1,17 @@ +const express = require('express'); +const authRoute = require('./auth.route'); + +const router = express.Router(); + +const defaultRoutes = [ + { + path: '/auth', + route: authRoute, + }, +]; + +defaultRoutes.forEach((route) => { + router.use(route.path, route.route); +}); + +module.exports = router; diff --git a/inventory-system/src/routes/user.route.js b/inventory-system/src/routes/user.route.js new file mode 100644 index 000000000..c67f8624c --- /dev/null +++ b/inventory-system/src/routes/user.route.js @@ -0,0 +1,19 @@ +// src/routes/user.route.js +const express = require('express'); +const { + createUserController, + getAllUsersController, + getUserByIdController, + updateUserController, + deleteUserController, +} = require('../controllers/user.controller'); + +const router = express.Router(); + +router.post('/', createUserController); +router.get('/', getAllUsersController); +router.get('/:id', getUserByIdController); +router.put('/:id', updateUserController); +router.delete('/:id', deleteUserController); + +module.exports = router; diff --git a/inventory-system/src/services/user.service.js b/inventory-system/src/services/user.service.js new file mode 100644 index 000000000..0fad9b35a --- /dev/null +++ b/inventory-system/src/services/user.service.js @@ -0,0 +1,35 @@ +const httpStatus = require('http-status'); +const prisma = require('../../prisma/client') +const ApiError = require('../utils/ApiError'); +const bcrypt = require('bcryptjs'); + +/** + * Create a user + * @param {Object} userBody + * @returns {Promise} + */ +const createUser = async (userBody) => { + userBody.password = bcrypt.hashSync(userBody.password, 8); + + return prisma.user.create({ + data: userBody + }); +}; + + +/** + * Get user by email + * @param {string} email + * @returns {Promise} + */ +const getUserByEmail = async (email) => { + return prisma.user.findUnique({ + where: { email } + }); +}; + + +module.exports = { + createUser, + getUserByEmail +}; From dfa94e5ed6664554fcb4841c86892ed46a404115 Mon Sep 17 00:00:00 2001 From: AronIpeka Date: Tue, 2 Apr 2024 13:35:05 +0700 Subject: [PATCH 07/10] Logging System (Winston) --- inventory-system/src/config/config.js | 5 ----- inventory-system/src/index.js | 21 ++++++++------------- 2 files changed, 8 insertions(+), 18 deletions(-) diff --git a/inventory-system/src/config/config.js b/inventory-system/src/config/config.js index db684f853..c698b5e03 100644 --- a/inventory-system/src/config/config.js +++ b/inventory-system/src/config/config.js @@ -9,9 +9,4 @@ module.exports = { database: { url: process.env.DATABASE_URL, }, - jwt: { - secret: process.env.JWT_SECRET, - accessExpirationMinutes: process.env.JWT_ACCESS_EXPIRATION_MINUTES, - refreshExpirationDays: process.env.JWT_REFRESH_EXPIRATION_DAYS, - }, }; diff --git a/inventory-system/src/index.js b/inventory-system/src/index.js index 2a59655e2..7a066caf0 100644 --- a/inventory-system/src/index.js +++ b/inventory-system/src/index.js @@ -1,27 +1,22 @@ const app = require('./app'); -const prisma = require('../prisma/client'); const config = require('./config/config'); +const logger = require('./config/logger'); +const prisma = require('../prisma/client'); let server; - const port = process.env.PORT || 4000; -server = app.listen(port, () => { - console.log(`Server is running on http://localhost:${port}`); -}); - - -if (prisma) { - console.log('Connected to Database'); +if(prisma){ + logger.info('Connected to Database'); server = app.listen(config.port, () => { - console.log(`Server is running on http://localhost:${port}`); + logger.info(`Listening to port ${config.port} or http://localhost:${port}`); }); } const exitHandler = () => { if (server) { server.close(() => { - console.log('Server closed'); + logger.info('Server closed'); process.exit(1); }); } else { @@ -30,7 +25,7 @@ const exitHandler = () => { }; const unexpectedErrorHandler = (error) => { - console.log(error); + logger.error(error); exitHandler(); }; @@ -38,7 +33,7 @@ process.on('uncaughtException', unexpectedErrorHandler); process.on('unhandledRejection', unexpectedErrorHandler); process.on('SIGTERM', () => { - console.log('SIGTERM received'); + logger.info('SIGTERM received'); if (server) { server.close(); } From bb26a16a9774e9985cae6ce34c5152866e6d13e5 Mon Sep 17 00:00:00 2001 From: AronIpeka Date: Tue, 2 Apr 2024 13:36:37 +0700 Subject: [PATCH 08/10] test --- fancy-todo-mongoose-odm/.gitignore | 2 + .../fancy-todo-odm.postman_collection.json | 257 ++++ fancy-todo-mongoose-odm/package-lock.json | 1276 +++++++++++++++++ fancy-todo-mongoose-odm/package.json | 20 + fancy-todo-mongoose-odm/src/app.js | 10 + .../src/controllers/todo.controller.js | 94 ++ .../src/controllers/user.controller.js | 94 ++ fancy-todo-mongoose-odm/src/index.js | 40 + .../src/models/todo.model.js | 24 + .../src/models/user.model.js | 22 + .../src/routes/todo.route.js | 14 + .../src/routes/user.route.js | 15 + .../src/services/todo.service.js | 33 + .../src/services/user.service.js | 62 + 14 files changed, 1963 insertions(+) create mode 100644 fancy-todo-mongoose-odm/.gitignore create mode 100644 fancy-todo-mongoose-odm/fancy-todo-odm.postman_collection.json create mode 100644 fancy-todo-mongoose-odm/package-lock.json create mode 100644 fancy-todo-mongoose-odm/package.json create mode 100644 fancy-todo-mongoose-odm/src/app.js create mode 100644 fancy-todo-mongoose-odm/src/controllers/todo.controller.js create mode 100644 fancy-todo-mongoose-odm/src/controllers/user.controller.js create mode 100644 fancy-todo-mongoose-odm/src/index.js create mode 100644 fancy-todo-mongoose-odm/src/models/todo.model.js create mode 100644 fancy-todo-mongoose-odm/src/models/user.model.js create mode 100644 fancy-todo-mongoose-odm/src/routes/todo.route.js create mode 100644 fancy-todo-mongoose-odm/src/routes/user.route.js create mode 100644 fancy-todo-mongoose-odm/src/services/todo.service.js create mode 100644 fancy-todo-mongoose-odm/src/services/user.service.js diff --git a/fancy-todo-mongoose-odm/.gitignore b/fancy-todo-mongoose-odm/.gitignore new file mode 100644 index 000000000..13dfa3637 --- /dev/null +++ b/fancy-todo-mongoose-odm/.gitignore @@ -0,0 +1,2 @@ +.env +node_modules/ \ No newline at end of file diff --git a/fancy-todo-mongoose-odm/fancy-todo-odm.postman_collection.json b/fancy-todo-mongoose-odm/fancy-todo-odm.postman_collection.json new file mode 100644 index 000000000..f9bf870e1 --- /dev/null +++ b/fancy-todo-mongoose-odm/fancy-todo-odm.postman_collection.json @@ -0,0 +1,257 @@ +{ + "info": { + "_postman_id": "c53be2ea-645c-41bf-bfc7-a24d59327496", + "name": "fancy-todo-odm", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", + "_exporter_id": "28737688" + }, + "item": [ + { + "name": "get all user", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:3001/user", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "user" + ] + } + }, + "response": [] + }, + { + "name": "create user", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Riska Veli\",\r\n \"email\": \"riska.veli@example.com\",\r\n \"phone\": 1234567890\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3001/user", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "user" + ] + } + }, + "response": [] + }, + { + "name": "update user by /user/:id", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"name\": \"Jane Doe Updated\",\r\n \"email\": \"jane.doe.updated@example.com\",\r\n \"phone\": 9876543210\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3001/user/65fa8f2d77d7fd1cd28dd27d", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "user", + "65fa8f2d77d7fd1cd28dd27d" + ] + } + }, + "response": [] + }, + { + "name": "delete user by /user/:id", + "request": { + "method": "DELETE", + "header": [], + "body": { + "mode": "raw", + "raw": "", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3001/user/65fa8f2d77d7fd1cd28dd27d", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "user", + "65fa8f2d77d7fd1cd28dd27d" + ] + } + }, + "response": [] + }, + { + "name": "get user by /user/:id", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:3001/user/66011a361c5c31bdd4f7a8d3", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "user", + "66011a361c5c31bdd4f7a8d3" + ] + } + }, + "response": [] + }, + { + "name": "create todo /user/:id", + "request": { + "method": "POST", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"title\": \"Sample Todo\",\r\n \"description\": \"This is a sample todo item\",\r\n \"status\": \"pending\",\r\n \"userId\": \"66011a361c5c31bdd4f7a8d3\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3001/todo", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "todo" + ] + } + }, + "response": [] + }, + { + "name": "get all todo", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:3001/todo", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "todo" + ] + } + }, + "response": [] + }, + { + "name": "update /todo/:id", + "request": { + "method": "PUT", + "header": [], + "body": { + "mode": "raw", + "raw": "{\r\n \"title\": \"Updated Sample Todo\",\r\n \"status\": \"completed\"\r\n}", + "options": { + "raw": { + "language": "json" + } + } + }, + "url": { + "raw": "http://localhost:3001/todo/66011d681b180073e00e7f74", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "todo", + "66011d681b180073e00e7f74" + ] + } + }, + "response": [] + }, + { + "name": "delete /todo/:id", + "request": { + "method": "DELETE", + "header": [], + "url": { + "raw": "http://localhost:3001/todo/66011d681b180073e00e7f74", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "todo", + "66011d681b180073e00e7f74" + ] + } + }, + "response": [] + }, + { + "name": "get /todo/:id", + "request": { + "method": "GET", + "header": [], + "url": { + "raw": "http://localhost:3001/todo/:id", + "protocol": "http", + "host": [ + "localhost" + ], + "port": "3001", + "path": [ + "todo", + ":id" + ], + "variable": [ + { + "key": "id", + "value": "" + } + ] + } + }, + "response": [] + } + ] +} \ No newline at end of file diff --git a/fancy-todo-mongoose-odm/package-lock.json b/fancy-todo-mongoose-odm/package-lock.json new file mode 100644 index 000000000..b94dc4886 --- /dev/null +++ b/fancy-todo-mongoose-odm/package-lock.json @@ -0,0 +1,1276 @@ +{ + "name": "fancy-todo-odm", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "fancy-todo-odm", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "dotenv": "^16.4.5", + "express": "^4.18.3", + "mongoose": "^8.2.2", + "nodemon": "^3.1.0" + } + }, + "node_modules/@mongodb-js/saslprep": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", + "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==", + "dependencies": { + "sparse-bitfield": "^3.0.3" + } + }, + "node_modules/@types/webidl-conversions": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", + "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" + }, + "node_modules/@types/whatwg-url": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.4.tgz", + "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==", + "dependencies": { + "@types/webidl-conversions": "*" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bson": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/bson/-/bson-6.5.0.tgz", + "integrity": "sha512-DXf1BTAS8vKyR90BO4x5v3rKVarmkdkzwOrnYDFdjAY694ILNDkmA3uRh1xXJEl+C1DAh8XCvAQ+Gh3kzubtpg==", + "engines": { + "node": ">=16.20.1" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express": { + "version": "4.18.3", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", + "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/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==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-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==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "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==", + "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==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/kareem": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", + "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-pager": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", + "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mongodb-connection-string-url": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz", + "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==", + "dependencies": { + "@types/whatwg-url": "^11.0.2", + "whatwg-url": "^13.0.0" + } + }, + "node_modules/mongoose": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.2.2.tgz", + "integrity": "sha512-6sMxe1d3k/dBjiOX4ExNTNOP0g1x0iq8eXyg+ttgIXM3HLnQ0IUyXRwVVAPFFY6O4/8uYN5dB0Ec72FrexbPpw==", + "dependencies": { + "bson": "^6.2.0", + "kareem": "2.5.1", + "mongodb": "6.3.0", + "mpath": "0.9.0", + "mquery": "5.0.0", + "ms": "2.1.3", + "sift": "16.0.1" + }, + "engines": { + "node": ">=16.20.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/mongoose" + } + }, + "node_modules/mongoose/node_modules/mongodb": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.3.0.tgz", + "integrity": "sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==", + "dependencies": { + "@mongodb-js/saslprep": "^1.1.0", + "bson": "^6.2.0", + "mongodb-connection-string-url": "^3.0.0" + }, + "engines": { + "node": ">=16.20.1" + }, + "peerDependencies": { + "@aws-sdk/credential-providers": "^3.188.0", + "@mongodb-js/zstd": "^1.1.0", + "gcp-metadata": "^5.2.0", + "kerberos": "^2.0.1", + "mongodb-client-encryption": ">=6.0.0 <7", + "snappy": "^7.2.2", + "socks": "^2.7.1" + }, + "peerDependenciesMeta": { + "@aws-sdk/credential-providers": { + "optional": true + }, + "@mongodb-js/zstd": { + "optional": true + }, + "gcp-metadata": { + "optional": true + }, + "kerberos": { + "optional": true + }, + "mongodb-client-encryption": { + "optional": true + }, + "snappy": { + "optional": true + }, + "socks": { + "optional": true + } + } + }, + "node_modules/mongoose/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/mpath": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", + "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mquery": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", + "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", + "dependencies": { + "debug": "4.x" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/mquery/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/mquery/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/nodemon": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", + "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^4", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^7.5.3", + "simple-update-notifier": "^2.0.0", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/nodemon/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "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==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sift": { + "version": "16.0.1", + "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", + "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" + }, + "node_modules/simple-update-notifier": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", + "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", + "dependencies": { + "semver": "^7.5.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sparse-bitfield": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", + "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", + "dependencies": { + "memory-pager": "^1.0.2" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tr46": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", + "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", + "dependencies": { + "punycode": "^2.3.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-url": { + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", + "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", + "dependencies": { + "tr46": "^4.1.1", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } +} diff --git a/fancy-todo-mongoose-odm/package.json b/fancy-todo-mongoose-odm/package.json new file mode 100644 index 000000000..11a7212c0 --- /dev/null +++ b/fancy-todo-mongoose-odm/package.json @@ -0,0 +1,20 @@ +{ + "name": "fancy-todo-mongoose-odm", + "version": "1.0.0", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "dev": "npx nodemon src/index.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "dotenv": "^16.4.5", + "express": "^4.18.3", + "mongoose": "^8.2.2", + "nodemon": "^3.1.0" + }, + "devDependencies": {}, + "description": "" +} diff --git a/fancy-todo-mongoose-odm/src/app.js b/fancy-todo-mongoose-odm/src/app.js new file mode 100644 index 000000000..2a6f83235 --- /dev/null +++ b/fancy-todo-mongoose-odm/src/app.js @@ -0,0 +1,10 @@ +const express = require("express"); +const app = express(); +const router = require("../src/routes"); + +app.use(express.json()); +app.use(express.urlencoded({ extended: true })); + +app.use(router); + +module.exports = app; diff --git a/fancy-todo-mongoose-odm/src/controllers/todo.controller.js b/fancy-todo-mongoose-odm/src/controllers/todo.controller.js new file mode 100644 index 000000000..6e8f44692 --- /dev/null +++ b/fancy-todo-mongoose-odm/src/controllers/todo.controller.js @@ -0,0 +1,94 @@ +const todoService = require('../services/todo.service') + +const showTodos = async(req, res) => { + try{ + const result = await todoService.showTodos() + res.status(200).send({ + status: 200, + message: "Get todos Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const createTodo = async (req, res) => { + try{ + const { title, description, status, userId } = req.body + const result = await todoService.createTodo(title, description, status, userId) + res.status(200).send({ + status: 200, + message: "Create todo Success", + data: result, + }) + + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const getTodoById = async(req, res) => { + try{ + const id = req.params.id + const result = await todoService.getTodoById(id) + res.status(200).send({ + status: 200, + message: "Get todo by id Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const updateTodo = async (req, res) => { + try{ + const id = req.params.id + const { title, description, status, userId} = req.body + const result = await todoService.updateTodo(id, title, description, status, userId) + res.status(200).send({ + status: 200, + message: "Update todo Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const deleteTodo = async (req, res) => { + try{ + const id = req.params.id + const result = await todoService.deleteTodo(id) + res.status(200).send({ + status: 200, + message: "Delete todo Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +module.exports = { createTodo, showTodos, getTodoById, updateTodo, deleteTodo} \ No newline at end of file diff --git a/fancy-todo-mongoose-odm/src/controllers/user.controller.js b/fancy-todo-mongoose-odm/src/controllers/user.controller.js new file mode 100644 index 000000000..f3bab58b3 --- /dev/null +++ b/fancy-todo-mongoose-odm/src/controllers/user.controller.js @@ -0,0 +1,94 @@ +const userService = require('../services/user.service') + +const showUsers = async(req, res) => { + try{ + const result = await userService.showUsers() + res.status(200).send({ + status: 200, + message: "Get users Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const createUser = async (req, res) => { + try{ + const { name, email, phone } = req.body + const result = await userService.createUser(name, email, phone) + res.status(200).send({ + status: 200, + message: "Create user Success", + data: result, + }) + + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const getUserById = async(req, res) => { + try{ + const id = req.params.id + const result = await userService.getUserById(id) + res.status(200).send({ + status: 200, + message: "Get user by id Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const updateUser = async (req, res) => { + try{ + const id = req.params.id + const { name, email, phone} = req.body + const result = await userService.updateUser(id, name, email, phone) + res.status(200).send({ + status: 200, + message: "Update user Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +const deleteUser = async (req, res) => { + try{ + const id = req.params.id + const result = await userService.deleteUser(id) + res.status(200).send({ + status: 200, + message: "Delete user Success", + data: result, + }) + }catch(err){ + res.status(500).send({ + status: 500, + message: "Internal Server Error", + error: err.message + }) + } +} + +module.exports = { createUser, showUsers, getUserById, updateUser, deleteUser} \ No newline at end of file diff --git a/fancy-todo-mongoose-odm/src/index.js b/fancy-todo-mongoose-odm/src/index.js new file mode 100644 index 000000000..017d1cf3f --- /dev/null +++ b/fancy-todo-mongoose-odm/src/index.js @@ -0,0 +1,40 @@ +require('dotenv').config() +const app = require('./app') +const mongoose = require('mongoose') + +let server; +const port = 3001 + +mongoose.connect(process.env.DATABASE_URL, { +}).then(() => { + console.log('Connected to MongoDB') + server = app.listen(port, ()=> { + console.log(`Connected to http://localhost:${port}`) + }) +}) + +const exitHandler = () => { + if(server){ + server.close(()=> { + console.log('Server closed') + process.exit(1) + }) + }else{ + process.exit(1) + } +} + +const unexpectedErrorHandler = (err) => { + console.log(err) + exitHandler() +} + +process.on('uncaughtException', unexpectedErrorHandler) +process.on('unhandledRejection', unexpectedErrorHandler) + +process.on('SIGTERM', () => { + console.log('SIGTERM Receiver') + if(server){ + server.close() + } +}) \ No newline at end of file diff --git a/fancy-todo-mongoose-odm/src/models/todo.model.js b/fancy-todo-mongoose-odm/src/models/todo.model.js new file mode 100644 index 000000000..54c63338a --- /dev/null +++ b/fancy-todo-mongoose-odm/src/models/todo.model.js @@ -0,0 +1,24 @@ +const mongoose = require("mongoose"); + +const todoSchema = new mongoose.Schema({ + title: { + type: String, + required: true, + }, + description: { + type: String, + required: true, + }, + status: { + type: String, + required: true, + }, + userId: { + type: mongoose.Schema.Types.ObjectId, + ref: "User" + } +}) + +const Todo = mongoose.model("Todo", todoSchema) + +module.exports = Todo \ No newline at end of file diff --git a/fancy-todo-mongoose-odm/src/models/user.model.js b/fancy-todo-mongoose-odm/src/models/user.model.js new file mode 100644 index 000000000..7892a4285 --- /dev/null +++ b/fancy-todo-mongoose-odm/src/models/user.model.js @@ -0,0 +1,22 @@ +const mongoose = require("mongoose"); + +const userSchema = new mongoose.Schema({ + name: { + type: String, + required: true, + }, + email: { + type: String, + required: true, + unique: true, + }, + phone: { + type: Number, + required: true, + unique: true, + }, +}); + +const User = mongoose.model("User", userSchema); + +module.exports = User; \ No newline at end of file diff --git a/fancy-todo-mongoose-odm/src/routes/todo.route.js b/fancy-todo-mongoose-odm/src/routes/todo.route.js new file mode 100644 index 000000000..f3ef5627f --- /dev/null +++ b/fancy-todo-mongoose-odm/src/routes/todo.route.js @@ -0,0 +1,14 @@ +const express = require('express') +const router = express.Router() +const todoController = require('../controllers/todo.controller') + +router.route('/') + .get(todoController.showTodos) + .post(todoController.createTodo) + +router.route('/:id') + .get(todoController.getTodoById) + .put(todoController.updateTodo) + .delete(todoController.deleteTodo) + +module.exports = router \ No newline at end of file diff --git a/fancy-todo-mongoose-odm/src/routes/user.route.js b/fancy-todo-mongoose-odm/src/routes/user.route.js new file mode 100644 index 000000000..cc00efa8a --- /dev/null +++ b/fancy-todo-mongoose-odm/src/routes/user.route.js @@ -0,0 +1,15 @@ +const express = require("express"); +const router = express.Router(); +const userController = require("../controllers/user.controller"); + +router +.route("/").get(userController.showUsers) +.post(userController.createUser); + +router + .route("/:id") + .get(userController.getUserById) + .put(userController.updateUser) + .delete(userController.deleteUser); + +module.exports = router; diff --git a/fancy-todo-mongoose-odm/src/services/todo.service.js b/fancy-todo-mongoose-odm/src/services/todo.service.js new file mode 100644 index 000000000..5e47aca45 --- /dev/null +++ b/fancy-todo-mongoose-odm/src/services/todo.service.js @@ -0,0 +1,33 @@ +const Todo = require('../models/todo.model') + +const showTodos = async () => { + const result = await Todo.find({}) + return result +} + +const getTodoById = async (id) => { + const result = await Todo.findOne({_id: id}) + + return result +} + +const createTodo = async (title, description, status, userId) => { + const result = await Todo.create({title, description, status, userId}) + + return result +} + +const updateTodo = async (id, title, description, status, userId) => { + const result = await Todo.updateOne({_id: id}, {title, description, status, userId}) + + return result +} + +const deleteTodo = async (id) => { + const result = await Todo.deleteOne({_id: id}) + + return result +} + + +module.exports = {createTodo, showTodos, getTodoById, updateTodo, deleteTodo} \ No newline at end of file diff --git a/fancy-todo-mongoose-odm/src/services/user.service.js b/fancy-todo-mongoose-odm/src/services/user.service.js new file mode 100644 index 000000000..59628c9c4 --- /dev/null +++ b/fancy-todo-mongoose-odm/src/services/user.service.js @@ -0,0 +1,62 @@ +const User = require('../models/user.model') +const mongoose = require('mongoose') +const showUsers = async () => { + const result = await User.aggregate([ + {$lookup: { + from: "todos", + localField: "_id", + foreignField: "userId", + as: "todos" + }} + ]) + return result +} + +const getUserById = async (id) => { + const objectId = new mongoose.Types.ObjectId(id); + const result = await User.aggregate([ + { + $match: { + _id: objectId + }, + }, + { + $lookup: { + from: "todos", + localField: "_id", + foreignField: "userId", + as: "todos", + }, + }, + { + $project: { + "todos.title": 1, + "todos.description": 1, + "todos.status": 1 + } + } + ]); + + return result +} + +const createUser = async (name, email, phone) => { + const user = await User.create({name, email, phone}) + + return user +} + +const updateUser = async (id, name, email, phone) => { + const result = await User.updateOne({_id: id}, {name, email, phone}) + + return result +} + +const deleteUser = async (id) => { + const result = await User.deleteOne({_id: id}) + + return result +} + + +module.exports = {createUser, showUsers, getUserById, updateUser, deleteUser} \ No newline at end of file From 0a788480015f767636345069dbad986b7072b541 Mon Sep 17 00:00:00 2001 From: AronIpeka Date: Tue, 2 Apr 2024 13:47:37 +0700 Subject: [PATCH 09/10] done --- fancy-todo-mongoose-odm/src/app.js | 14 ++++++++------ fancy-todo-mongoose-odm/src/routes/index.js | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 fancy-todo-mongoose-odm/src/routes/index.js diff --git a/fancy-todo-mongoose-odm/src/app.js b/fancy-todo-mongoose-odm/src/app.js index 2a6f83235..adefd69c9 100644 --- a/fancy-todo-mongoose-odm/src/app.js +++ b/fancy-todo-mongoose-odm/src/app.js @@ -1,10 +1,12 @@ -const express = require("express"); -const app = express(); -const router = require("../src/routes"); +const express = require('express'); +const userRoutes = require('./routes/user.route'); +const todoRoutes = require('./routes/todo.route'); +const app = express(); app.use(express.json()); -app.use(express.urlencoded({ extended: true })); -app.use(router); +// Use routes +app.use('/users', userRoutes); +app.use('/todos', todoRoutes); -module.exports = app; +module.exports = app; \ No newline at end of file diff --git a/fancy-todo-mongoose-odm/src/routes/index.js b/fancy-todo-mongoose-odm/src/routes/index.js new file mode 100644 index 000000000..834fe1b60 --- /dev/null +++ b/fancy-todo-mongoose-odm/src/routes/index.js @@ -0,0 +1,17 @@ +const express = require('express'); +const todoRoutes = require('./todo.route'); +const userRoutes = require('./user.route'); + +const router = express.Router(); + +router.get('/', (req, res) => { + res.send('Selamat datang di Fancy Todo API!'); + }); +// Gunakan todoRoutes untuk menangani semua rute yang berkaitan dengan todos +router.use('/todos', todoRoutes); + +// Gunakan userRoutes untuk menangani semua rute yang berkaitan dengan users +router.use('/users', userRoutes); + +// Export router utama +module.exports = router; \ No newline at end of file From 4e7182d36b76667a19c865f4ac46098353b8273d Mon Sep 17 00:00:00 2001 From: AronIpeka Date: Tue, 2 Apr 2024 13:49:05 +0700 Subject: [PATCH 10/10] res --- fancy-todo-odm/.gitignore | 2 - .../fancy-todo-odm.postman_collection.json | 257 ---- fancy-todo-odm/package-lock.json | 1276 ----------------- fancy-todo-odm/package.json | 19 - fancy-todo-odm/src/app.js | 10 - .../src/controllers/todo.controller.js | 94 -- .../src/controllers/user.controller.js | 94 -- fancy-todo-odm/src/models/todo.model.js | 24 - fancy-todo-odm/src/models/user.model.js | 22 - fancy-todo-odm/src/routes/todo.route.js | 14 - fancy-todo-odm/src/routes/user.route.js | 15 - fancy-todo-odm/src/services/todo.service.js | 33 - fancy-todo-odm/src/services/user.service.js | 62 - inventory-system/src/app.js | 8 + 14 files changed, 8 insertions(+), 1922 deletions(-) delete mode 100644 fancy-todo-odm/.gitignore delete mode 100644 fancy-todo-odm/fancy-todo-odm.postman_collection.json delete mode 100644 fancy-todo-odm/package-lock.json delete mode 100644 fancy-todo-odm/package.json delete mode 100644 fancy-todo-odm/src/app.js delete mode 100644 fancy-todo-odm/src/controllers/todo.controller.js delete mode 100644 fancy-todo-odm/src/controllers/user.controller.js delete mode 100644 fancy-todo-odm/src/models/todo.model.js delete mode 100644 fancy-todo-odm/src/models/user.model.js delete mode 100644 fancy-todo-odm/src/routes/todo.route.js delete mode 100644 fancy-todo-odm/src/routes/user.route.js delete mode 100644 fancy-todo-odm/src/services/todo.service.js delete mode 100644 fancy-todo-odm/src/services/user.service.js diff --git a/fancy-todo-odm/.gitignore b/fancy-todo-odm/.gitignore deleted file mode 100644 index 13dfa3637..000000000 --- a/fancy-todo-odm/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -.env -node_modules/ \ No newline at end of file diff --git a/fancy-todo-odm/fancy-todo-odm.postman_collection.json b/fancy-todo-odm/fancy-todo-odm.postman_collection.json deleted file mode 100644 index f9bf870e1..000000000 --- a/fancy-todo-odm/fancy-todo-odm.postman_collection.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "info": { - "_postman_id": "c53be2ea-645c-41bf-bfc7-a24d59327496", - "name": "fancy-todo-odm", - "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", - "_exporter_id": "28737688" - }, - "item": [ - { - "name": "get all user", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "http://localhost:3001/user", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "3001", - "path": [ - "user" - ] - } - }, - "response": [] - }, - { - "name": "create user", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Riska Veli\",\r\n \"email\": \"riska.veli@example.com\",\r\n \"phone\": 1234567890\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://localhost:3001/user", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "3001", - "path": [ - "user" - ] - } - }, - "response": [] - }, - { - "name": "update user by /user/:id", - "request": { - "method": "PUT", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"name\": \"Jane Doe Updated\",\r\n \"email\": \"jane.doe.updated@example.com\",\r\n \"phone\": 9876543210\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://localhost:3001/user/65fa8f2d77d7fd1cd28dd27d", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "3001", - "path": [ - "user", - "65fa8f2d77d7fd1cd28dd27d" - ] - } - }, - "response": [] - }, - { - "name": "delete user by /user/:id", - "request": { - "method": "DELETE", - "header": [], - "body": { - "mode": "raw", - "raw": "", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://localhost:3001/user/65fa8f2d77d7fd1cd28dd27d", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "3001", - "path": [ - "user", - "65fa8f2d77d7fd1cd28dd27d" - ] - } - }, - "response": [] - }, - { - "name": "get user by /user/:id", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "http://localhost:3001/user/66011a361c5c31bdd4f7a8d3", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "3001", - "path": [ - "user", - "66011a361c5c31bdd4f7a8d3" - ] - } - }, - "response": [] - }, - { - "name": "create todo /user/:id", - "request": { - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"title\": \"Sample Todo\",\r\n \"description\": \"This is a sample todo item\",\r\n \"status\": \"pending\",\r\n \"userId\": \"66011a361c5c31bdd4f7a8d3\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://localhost:3001/todo", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "3001", - "path": [ - "todo" - ] - } - }, - "response": [] - }, - { - "name": "get all todo", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "http://localhost:3001/todo", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "3001", - "path": [ - "todo" - ] - } - }, - "response": [] - }, - { - "name": "update /todo/:id", - "request": { - "method": "PUT", - "header": [], - "body": { - "mode": "raw", - "raw": "{\r\n \"title\": \"Updated Sample Todo\",\r\n \"status\": \"completed\"\r\n}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "http://localhost:3001/todo/66011d681b180073e00e7f74", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "3001", - "path": [ - "todo", - "66011d681b180073e00e7f74" - ] - } - }, - "response": [] - }, - { - "name": "delete /todo/:id", - "request": { - "method": "DELETE", - "header": [], - "url": { - "raw": "http://localhost:3001/todo/66011d681b180073e00e7f74", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "3001", - "path": [ - "todo", - "66011d681b180073e00e7f74" - ] - } - }, - "response": [] - }, - { - "name": "get /todo/:id", - "request": { - "method": "GET", - "header": [], - "url": { - "raw": "http://localhost:3001/todo/:id", - "protocol": "http", - "host": [ - "localhost" - ], - "port": "3001", - "path": [ - "todo", - ":id" - ], - "variable": [ - { - "key": "id", - "value": "" - } - ] - } - }, - "response": [] - } - ] -} \ No newline at end of file diff --git a/fancy-todo-odm/package-lock.json b/fancy-todo-odm/package-lock.json deleted file mode 100644 index b94dc4886..000000000 --- a/fancy-todo-odm/package-lock.json +++ /dev/null @@ -1,1276 +0,0 @@ -{ - "name": "fancy-todo-odm", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "fancy-todo-odm", - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "express": "^4.18.3", - "mongoose": "^8.2.2", - "nodemon": "^3.1.0" - } - }, - "node_modules/@mongodb-js/saslprep": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.5.tgz", - "integrity": "sha512-XLNOMH66KhJzUJNwT/qlMnS4WsNDWD5ASdyaSH3EtK+F4r/CFGa3jT4GNi4mfOitGvWXtdLgQJkQjxSVrio+jA==", - "dependencies": { - "sparse-bitfield": "^3.0.3" - } - }, - "node_modules/@types/webidl-conversions": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz", - "integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==" - }, - "node_modules/@types/whatwg-url": { - "version": "11.0.4", - "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.4.tgz", - "integrity": "sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==", - "dependencies": { - "@types/webidl-conversions": "*" - } - }, - "node_modules/abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "node_modules/accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "dependencies": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", - "dependencies": { - "bytes": "3.1.2", - "content-type": "~1.0.5", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.11.0", - "raw-body": "2.5.2", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/bson": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/bson/-/bson-6.5.0.tgz", - "integrity": "sha512-DXf1BTAS8vKyR90BO4x5v3rKVarmkdkzwOrnYDFdjAY694ILNDkmA3uRh1xXJEl+C1DAh8XCvAQ+Gh3kzubtpg==", - "engines": { - "node": ">=16.20.1" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, - "node_modules/dotenv": { - "version": "16.4.5", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", - "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" - }, - "node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express": { - "version": "4.18.3", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.3.tgz", - "integrity": "sha512-6VyCijWQ+9O7WuVMTRBTl+cjNNIzD5cY5mQ1WM8r/LEkI2u8EYpOotESNwzNlyCn3g+dmjKYI6BmNneSr/FSRw==", - "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.2", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.11.0", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/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==", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "dependencies": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "engines": { - "node": ">=4" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==" - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-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==", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "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==", - "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==", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/kareem": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz", - "integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/memory-pager": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", - "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==" - }, - "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/mongodb-connection-string-url": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.0.tgz", - "integrity": "sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==", - "dependencies": { - "@types/whatwg-url": "^11.0.2", - "whatwg-url": "^13.0.0" - } - }, - "node_modules/mongoose": { - "version": "8.2.2", - "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.2.2.tgz", - "integrity": "sha512-6sMxe1d3k/dBjiOX4ExNTNOP0g1x0iq8eXyg+ttgIXM3HLnQ0IUyXRwVVAPFFY6O4/8uYN5dB0Ec72FrexbPpw==", - "dependencies": { - "bson": "^6.2.0", - "kareem": "2.5.1", - "mongodb": "6.3.0", - "mpath": "0.9.0", - "mquery": "5.0.0", - "ms": "2.1.3", - "sift": "16.0.1" - }, - "engines": { - "node": ">=16.20.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mongoose" - } - }, - "node_modules/mongoose/node_modules/mongodb": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.3.0.tgz", - "integrity": "sha512-tt0KuGjGtLUhLoU263+xvQmPHEGTw5LbcNC73EoFRYgSHwZt5tsoJC110hDyO1kjQzpgNrpdcSza9PknWN4LrA==", - "dependencies": { - "@mongodb-js/saslprep": "^1.1.0", - "bson": "^6.2.0", - "mongodb-connection-string-url": "^3.0.0" - }, - "engines": { - "node": ">=16.20.1" - }, - "peerDependencies": { - "@aws-sdk/credential-providers": "^3.188.0", - "@mongodb-js/zstd": "^1.1.0", - "gcp-metadata": "^5.2.0", - "kerberos": "^2.0.1", - "mongodb-client-encryption": ">=6.0.0 <7", - "snappy": "^7.2.2", - "socks": "^2.7.1" - }, - "peerDependenciesMeta": { - "@aws-sdk/credential-providers": { - "optional": true - }, - "@mongodb-js/zstd": { - "optional": true - }, - "gcp-metadata": { - "optional": true - }, - "kerberos": { - "optional": true - }, - "mongodb-client-encryption": { - "optional": true - }, - "snappy": { - "optional": true - }, - "socks": { - "optional": true - } - } - }, - "node_modules/mongoose/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/mpath": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.9.0.tgz", - "integrity": "sha512-ikJRQTk8hw5DEoFVxHG1Gn9T/xcjtdnOKIU1JTmGjZZlg9LST2mBLmcX3/ICIbgJydT2GOc15RnNy5mHmzfSew==", - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/mquery": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/mquery/-/mquery-5.0.0.tgz", - "integrity": "sha512-iQMncpmEK8R8ncT8HJGsGc9Dsp8xcgYMVSbs5jgnm1lFHTZqMJTUWTDx1LBO8+mK3tPNZWFLBghQEIOULSTHZg==", - "dependencies": { - "debug": "4.x" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/mquery/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/mquery/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" - }, - "node_modules/negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/nodemon": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.0.tgz", - "integrity": "sha512-xqlktYlDMCepBJd43ZQhjWwMw2obW/JRvkrLxq5RCNcuDDX1DbcPT+qT1IlIIdf+DhnWs90JpTMe+Y5KxOchvA==", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - }, - "node_modules/nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", - "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" - }, - "engines": { - "node": "*" - } - }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "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==", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==" - }, - "node_modules/punycode": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", - "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "dependencies": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "dependencies": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.4", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", - "dependencies": { - "call-bind": "^1.0.7", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/sift": { - "version": "16.0.1", - "resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz", - "integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ==" - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sparse-bitfield": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", - "integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==", - "dependencies": { - "memory-pager": "^1.0.2" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/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==", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dependencies": { - "nopt": "~1.0.10" - }, - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tr46": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-4.1.1.tgz", - "integrity": "sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==", - "dependencies": { - "punycode": "^2.3.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "dependencies": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-url": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-13.0.0.tgz", - "integrity": "sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==", - "dependencies": { - "tr46": "^4.1.1", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - } - } -} diff --git a/fancy-todo-odm/package.json b/fancy-todo-odm/package.json deleted file mode 100644 index 32da5b500..000000000 --- a/fancy-todo-odm/package.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "name": "fancy-todo-odm", - "version": "1.0.0", - "description": "", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "dev": "npx nodemon src/index.js" - }, - "keywords": [], - "author": "", - "license": "ISC", - "dependencies": { - "dotenv": "^16.4.5", - "express": "^4.18.3", - "mongoose": "^8.2.2", - "nodemon": "^3.1.0" - } -} diff --git a/fancy-todo-odm/src/app.js b/fancy-todo-odm/src/app.js deleted file mode 100644 index 2a6f83235..000000000 --- a/fancy-todo-odm/src/app.js +++ /dev/null @@ -1,10 +0,0 @@ -const express = require("express"); -const app = express(); -const router = require("../src/routes"); - -app.use(express.json()); -app.use(express.urlencoded({ extended: true })); - -app.use(router); - -module.exports = app; diff --git a/fancy-todo-odm/src/controllers/todo.controller.js b/fancy-todo-odm/src/controllers/todo.controller.js deleted file mode 100644 index 6e8f44692..000000000 --- a/fancy-todo-odm/src/controllers/todo.controller.js +++ /dev/null @@ -1,94 +0,0 @@ -const todoService = require('../services/todo.service') - -const showTodos = async(req, res) => { - try{ - const result = await todoService.showTodos() - res.status(200).send({ - status: 200, - message: "Get todos Success", - data: result, - }) - }catch(err){ - res.status(500).send({ - status: 500, - message: "Internal Server Error", - error: err.message - }) - } -} - -const createTodo = async (req, res) => { - try{ - const { title, description, status, userId } = req.body - const result = await todoService.createTodo(title, description, status, userId) - res.status(200).send({ - status: 200, - message: "Create todo Success", - data: result, - }) - - }catch(err){ - res.status(500).send({ - status: 500, - message: "Internal Server Error", - error: err.message - }) - } -} - -const getTodoById = async(req, res) => { - try{ - const id = req.params.id - const result = await todoService.getTodoById(id) - res.status(200).send({ - status: 200, - message: "Get todo by id Success", - data: result, - }) - }catch(err){ - res.status(500).send({ - status: 500, - message: "Internal Server Error", - error: err.message - }) - } -} - -const updateTodo = async (req, res) => { - try{ - const id = req.params.id - const { title, description, status, userId} = req.body - const result = await todoService.updateTodo(id, title, description, status, userId) - res.status(200).send({ - status: 200, - message: "Update todo Success", - data: result, - }) - }catch(err){ - res.status(500).send({ - status: 500, - message: "Internal Server Error", - error: err.message - }) - } -} - -const deleteTodo = async (req, res) => { - try{ - const id = req.params.id - const result = await todoService.deleteTodo(id) - res.status(200).send({ - status: 200, - message: "Delete todo Success", - data: result, - }) - }catch(err){ - res.status(500).send({ - status: 500, - message: "Internal Server Error", - error: err.message - }) - } -} - -module.exports = { createTodo, showTodos, getTodoById, updateTodo, deleteTodo} \ No newline at end of file diff --git a/fancy-todo-odm/src/controllers/user.controller.js b/fancy-todo-odm/src/controllers/user.controller.js deleted file mode 100644 index f3bab58b3..000000000 --- a/fancy-todo-odm/src/controllers/user.controller.js +++ /dev/null @@ -1,94 +0,0 @@ -const userService = require('../services/user.service') - -const showUsers = async(req, res) => { - try{ - const result = await userService.showUsers() - res.status(200).send({ - status: 200, - message: "Get users Success", - data: result, - }) - }catch(err){ - res.status(500).send({ - status: 500, - message: "Internal Server Error", - error: err.message - }) - } -} - -const createUser = async (req, res) => { - try{ - const { name, email, phone } = req.body - const result = await userService.createUser(name, email, phone) - res.status(200).send({ - status: 200, - message: "Create user Success", - data: result, - }) - - }catch(err){ - res.status(500).send({ - status: 500, - message: "Internal Server Error", - error: err.message - }) - } -} - -const getUserById = async(req, res) => { - try{ - const id = req.params.id - const result = await userService.getUserById(id) - res.status(200).send({ - status: 200, - message: "Get user by id Success", - data: result, - }) - }catch(err){ - res.status(500).send({ - status: 500, - message: "Internal Server Error", - error: err.message - }) - } -} - -const updateUser = async (req, res) => { - try{ - const id = req.params.id - const { name, email, phone} = req.body - const result = await userService.updateUser(id, name, email, phone) - res.status(200).send({ - status: 200, - message: "Update user Success", - data: result, - }) - }catch(err){ - res.status(500).send({ - status: 500, - message: "Internal Server Error", - error: err.message - }) - } -} - -const deleteUser = async (req, res) => { - try{ - const id = req.params.id - const result = await userService.deleteUser(id) - res.status(200).send({ - status: 200, - message: "Delete user Success", - data: result, - }) - }catch(err){ - res.status(500).send({ - status: 500, - message: "Internal Server Error", - error: err.message - }) - } -} - -module.exports = { createUser, showUsers, getUserById, updateUser, deleteUser} \ No newline at end of file diff --git a/fancy-todo-odm/src/models/todo.model.js b/fancy-todo-odm/src/models/todo.model.js deleted file mode 100644 index 54c63338a..000000000 --- a/fancy-todo-odm/src/models/todo.model.js +++ /dev/null @@ -1,24 +0,0 @@ -const mongoose = require("mongoose"); - -const todoSchema = new mongoose.Schema({ - title: { - type: String, - required: true, - }, - description: { - type: String, - required: true, - }, - status: { - type: String, - required: true, - }, - userId: { - type: mongoose.Schema.Types.ObjectId, - ref: "User" - } -}) - -const Todo = mongoose.model("Todo", todoSchema) - -module.exports = Todo \ No newline at end of file diff --git a/fancy-todo-odm/src/models/user.model.js b/fancy-todo-odm/src/models/user.model.js deleted file mode 100644 index 7892a4285..000000000 --- a/fancy-todo-odm/src/models/user.model.js +++ /dev/null @@ -1,22 +0,0 @@ -const mongoose = require("mongoose"); - -const userSchema = new mongoose.Schema({ - name: { - type: String, - required: true, - }, - email: { - type: String, - required: true, - unique: true, - }, - phone: { - type: Number, - required: true, - unique: true, - }, -}); - -const User = mongoose.model("User", userSchema); - -module.exports = User; \ No newline at end of file diff --git a/fancy-todo-odm/src/routes/todo.route.js b/fancy-todo-odm/src/routes/todo.route.js deleted file mode 100644 index f3ef5627f..000000000 --- a/fancy-todo-odm/src/routes/todo.route.js +++ /dev/null @@ -1,14 +0,0 @@ -const express = require('express') -const router = express.Router() -const todoController = require('../controllers/todo.controller') - -router.route('/') - .get(todoController.showTodos) - .post(todoController.createTodo) - -router.route('/:id') - .get(todoController.getTodoById) - .put(todoController.updateTodo) - .delete(todoController.deleteTodo) - -module.exports = router \ No newline at end of file diff --git a/fancy-todo-odm/src/routes/user.route.js b/fancy-todo-odm/src/routes/user.route.js deleted file mode 100644 index cc00efa8a..000000000 --- a/fancy-todo-odm/src/routes/user.route.js +++ /dev/null @@ -1,15 +0,0 @@ -const express = require("express"); -const router = express.Router(); -const userController = require("../controllers/user.controller"); - -router -.route("/").get(userController.showUsers) -.post(userController.createUser); - -router - .route("/:id") - .get(userController.getUserById) - .put(userController.updateUser) - .delete(userController.deleteUser); - -module.exports = router; diff --git a/fancy-todo-odm/src/services/todo.service.js b/fancy-todo-odm/src/services/todo.service.js deleted file mode 100644 index 5e47aca45..000000000 --- a/fancy-todo-odm/src/services/todo.service.js +++ /dev/null @@ -1,33 +0,0 @@ -const Todo = require('../models/todo.model') - -const showTodos = async () => { - const result = await Todo.find({}) - return result -} - -const getTodoById = async (id) => { - const result = await Todo.findOne({_id: id}) - - return result -} - -const createTodo = async (title, description, status, userId) => { - const result = await Todo.create({title, description, status, userId}) - - return result -} - -const updateTodo = async (id, title, description, status, userId) => { - const result = await Todo.updateOne({_id: id}, {title, description, status, userId}) - - return result -} - -const deleteTodo = async (id) => { - const result = await Todo.deleteOne({_id: id}) - - return result -} - - -module.exports = {createTodo, showTodos, getTodoById, updateTodo, deleteTodo} \ No newline at end of file diff --git a/fancy-todo-odm/src/services/user.service.js b/fancy-todo-odm/src/services/user.service.js deleted file mode 100644 index 59628c9c4..000000000 --- a/fancy-todo-odm/src/services/user.service.js +++ /dev/null @@ -1,62 +0,0 @@ -const User = require('../models/user.model') -const mongoose = require('mongoose') -const showUsers = async () => { - const result = await User.aggregate([ - {$lookup: { - from: "todos", - localField: "_id", - foreignField: "userId", - as: "todos" - }} - ]) - return result -} - -const getUserById = async (id) => { - const objectId = new mongoose.Types.ObjectId(id); - const result = await User.aggregate([ - { - $match: { - _id: objectId - }, - }, - { - $lookup: { - from: "todos", - localField: "_id", - foreignField: "userId", - as: "todos", - }, - }, - { - $project: { - "todos.title": 1, - "todos.description": 1, - "todos.status": 1 - } - } - ]); - - return result -} - -const createUser = async (name, email, phone) => { - const user = await User.create({name, email, phone}) - - return user -} - -const updateUser = async (id, name, email, phone) => { - const result = await User.updateOne({_id: id}, {name, email, phone}) - - return result -} - -const deleteUser = async (id) => { - const result = await User.deleteOne({_id: id}) - - return result -} - - -module.exports = {createUser, showUsers, getUserById, updateUser, deleteUser} \ No newline at end of file diff --git a/inventory-system/src/app.js b/inventory-system/src/app.js index 7f8c6918e..731045eda 100644 --- a/inventory-system/src/app.js +++ b/inventory-system/src/app.js @@ -1,8 +1,16 @@ const express = require('express'); // const router = require('./routes'); +const config = require('./config/config') +const morgan = require('./config/morgan'); const app = express(); + +if (config.env !== 'test') { + app.use(morgan.successHandler); + app.use(morgan.errorHandler); +} + // aktifin parsing json app.use(express.json());