diff --git a/package-lock.json b/package-lock.json index 07d1f68..088d837 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,20 +17,22 @@ "express-async-handler": "^1.2.0", "http-status-codes": "^2.3.0", "jsonwebtoken": "^9.0.2", + "multer": "^1.4.5-lts.1", "mysql2": "^3.10.3", "sequelize": "^6.37.3", + "swagger-ui-dist": "^5.17.14", "yamljs": "^0.3.0" }, "devDependencies": { "@babel/cli": "^7.24.8", - "@babel/core": "^7.24.8", + "@babel/core": "^7.24.9", "@babel/node": "^7.24.8", "@babel/preset-env": "^7.24.8", - "eslint": "^9.6.0", + "eslint": "^9.7.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-prettier": "^5.2.1", "nodemon": "^3.1.4", - "prettier": "^3.3.2", + "prettier": "^3.3.3", "swagger-cli": "^4.0.4", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1" @@ -2400,6 +2402,12 @@ "node": ">= 8" } }, + "node_modules/append-field": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==", + "license": "MIT" + }, "node_modules/aproba": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", @@ -2672,13 +2680,24 @@ "node_modules/buffer-equal-constant-time": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", - "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==", + "license": "BSD-3-Clause" }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } }, "node_modules/bytes": { "version": "3.1.2", @@ -2864,6 +2883,57 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/concat-stream/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/concat-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/concat-stream/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -2943,10 +3013,17 @@ "url": "https://opencollective.com/core-js" } }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" + }, "node_modules/cors": { "version": "2.8.5", "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "license": "MIT", "dependencies": { "object-assign": "^4", "vary": "^1" @@ -3138,6 +3215,7 @@ "version": "16.4.5", "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, @@ -3154,6 +3232,7 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "license": "Apache-2.0", "dependencies": { "safe-buffer": "^5.0.1" } @@ -4697,6 +4776,7 @@ "version": "9.0.2", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz", "integrity": "sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==", + "license": "MIT", "dependencies": { "jws": "^3.2.2", "lodash.includes": "^4.3.0", @@ -4718,6 +4798,7 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4729,6 +4810,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "license": "MIT", "dependencies": { "buffer-equal-constant-time": "1.0.1", "ecdsa-sig-formatter": "1.0.11", @@ -4739,6 +4821,7 @@ "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "license": "MIT", "dependencies": { "jwa": "^1.4.1", "safe-buffer": "^5.0.1" @@ -4810,12 +4893,14 @@ "node_modules/lodash.includes": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==" + "integrity": "sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==", + "license": "MIT" }, "node_modules/lodash.isboolean": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" + "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", + "license": "MIT" }, "node_modules/lodash.isequal": { "version": "4.5.0", @@ -4826,22 +4911,26 @@ "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" + "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==", + "license": "MIT" }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==" + "integrity": "sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==", + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==" + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" + "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==", + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -4858,7 +4947,8 @@ "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==" + "integrity": "sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==", + "license": "MIT" }, "node_modules/long": { "version": "5.2.3", @@ -4958,6 +5048,15 @@ "node": "*" } }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -5029,6 +5128,36 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/multer": { + "version": "1.4.5-lts.1", + "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.5-lts.1.tgz", + "integrity": "sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==", + "license": "MIT", + "dependencies": { + "append-field": "^1.0.0", + "busboy": "^1.0.0", + "concat-stream": "^1.5.2", + "mkdirp": "^0.5.4", + "object-assign": "^4.1.1", + "type-is": "^1.6.4", + "xtend": "^4.0.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/multer/node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, "node_modules/mysql2": { "version": "3.11.0", "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.0.tgz", @@ -5598,6 +5727,12 @@ "node": ">=6.0.0" } }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -6275,6 +6410,14 @@ "node": ">= 0.8" } }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -6397,6 +6540,7 @@ "resolved": "https://registry.npmjs.org/swagger-cli/-/swagger-cli-4.0.4.tgz", "integrity": "sha512-Cp8YYuLny3RJFQ4CvOBTaqmOOgYsem52dPx1xM5S4EUWFblIh2Q8atppMZvXKUr1e9xH5RwipYpmdUzdPcxWcA==", "dev": true, + "license": "MIT", "dependencies": { "@apidevtools/swagger-cli": "4.0.4" }, @@ -6412,6 +6556,7 @@ "resolved": "https://registry.npmjs.org/swagger-jsdoc/-/swagger-jsdoc-6.2.8.tgz", "integrity": "sha512-VPvil1+JRpmJ55CgAtn8DIcpBs0bL5L3q5bVQvF4tAW/k/9JYSj7dCpaYCAv5rufe0vcCbBRQXGvzpkWjvLklQ==", "dev": true, + "license": "MIT", "dependencies": { "commander": "6.2.0", "doctrine": "3.0.0", @@ -6489,14 +6634,14 @@ "node_modules/swagger-ui-dist": { "version": "5.17.14", "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.17.14.tgz", - "integrity": "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==", - "dev": true + "integrity": "sha512-CVbSfaLpstV65OnSjbXfVd6Sta3q3F7Cj/yYuvHMp1P90LztOLs6PfUnKEVAeiIVQt9u2SaPwv0LiH/OyMjHRw==" }, "node_modules/swagger-ui-express": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz", "integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==", "dev": true, + "license": "MIT", "dependencies": { "swagger-ui-dist": ">=5.0.0" }, @@ -6701,6 +6846,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -7010,6 +7161,15 @@ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", + "engines": { + "node": ">=0.4" + } + }, "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", diff --git a/package.json b/package.json index b5df2c4..02122e1 100644 --- a/package.json +++ b/package.json @@ -17,14 +17,14 @@ "license": "ISC", "devDependencies": { "@babel/cli": "^7.24.8", - "@babel/core": "^7.24.8", + "@babel/core": "^7.24.9", "@babel/node": "^7.24.8", "@babel/preset-env": "^7.24.8", - "eslint": "^9.6.0", + "eslint": "^9.7.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-prettier": "^5.2.1", "nodemon": "^3.1.4", - "prettier": "^3.3.2", + "prettier": "^3.3.3", "swagger-cli": "^4.0.4", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.1" @@ -38,8 +38,10 @@ "express-async-handler": "^1.2.0", "http-status-codes": "^2.3.0", "jsonwebtoken": "^9.0.2", + "multer": "1.4.5-lts.1", "mysql2": "^3.10.3", "sequelize": "^6.37.3", + "swagger-ui-dist": "^5.17.14", "yamljs": "^0.3.0" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 49d9b01..d2aa57c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,12 @@ importers: .: dependencies: + bcrypt: + specifier: ^5.1.1 + version: 5.1.1 + cookie-parser: + specifier: ^1.4.6 + version: 1.4.6 cors: specifier: ^2.8.5 version: 2.8.5 @@ -23,43 +29,52 @@ importers: http-status-codes: specifier: ^2.3.0 version: 2.3.0 + jsonwebtoken: + specifier: ^9.0.2 + version: 9.0.2 + multer: + specifier: 1.4.5-lts.1 + version: 1.4.5-lts.1 mysql2: specifier: ^3.10.3 version: 3.10.3 sequelize: specifier: ^6.37.3 version: 6.37.3(mysql2@3.10.3) + swagger-ui-dist: + specifier: ^5.17.14 + version: 5.17.14 yamljs: specifier: ^0.3.0 version: 0.3.0 devDependencies: '@babel/cli': specifier: ^7.24.8 - version: 7.24.8(@babel/core@7.24.8) + version: 7.24.8(@babel/core@7.24.9) '@babel/core': - specifier: ^7.24.8 - version: 7.24.8 + specifier: ^7.24.9 + version: 7.24.9 '@babel/node': specifier: ^7.24.8 - version: 7.24.8(@babel/core@7.24.8) + version: 7.24.8(@babel/core@7.24.9) '@babel/preset-env': specifier: ^7.24.8 - version: 7.24.8(@babel/core@7.24.8) + version: 7.24.8(@babel/core@7.24.9) eslint: - specifier: ^9.6.0 - version: 9.6.0 + specifier: ^9.7.0 + version: 9.7.0 eslint-config-prettier: specifier: ^9.1.0 - version: 9.1.0(eslint@9.6.0) + version: 9.1.0(eslint@9.7.0) eslint-plugin-prettier: - specifier: ^5.1.3 - version: 5.1.3(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(prettier@3.3.2) + specifier: ^5.2.1 + version: 5.2.1(eslint-config-prettier@9.1.0(eslint@9.7.0))(eslint@9.7.0)(prettier@3.3.3) nodemon: specifier: ^3.1.4 version: 3.1.4 prettier: - specifier: ^3.3.2 - version: 3.3.2 + specifier: ^3.3.3 + version: 3.3.3 swagger-cli: specifier: ^4.0.4 version: 4.0.4(openapi-types@12.1.3) @@ -116,16 +131,16 @@ packages: resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.8': - resolution: {integrity: sha512-c4IM7OTg6k1Q+AJ153e2mc2QVTezTwnb4VzquwcyiEzGnW0Kedv4do/TrkU98qPeC5LNiMt/QXwIjzYXLBpyZg==} + '@babel/compat-data@7.24.9': + resolution: {integrity: sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.8': - resolution: {integrity: sha512-6AWcmZC/MZCO0yKys4uhg5NlxL0ESF3K6IAaoQ+xSXvPyPyxNWRafP+GDbI88Oh68O7QkJgmEtedWPM9U0pZNg==} + '@babel/core@7.24.9': + resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.8': - resolution: {integrity: sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==} + '@babel/generator@7.24.10': + resolution: {integrity: sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.24.7': @@ -177,8 +192,8 @@ packages: resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.24.8': - resolution: {integrity: sha512-m4vWKVqvkVAWLXfHCCfff2luJj86U+J0/x+0N3ArG/tP0Fq7zky2dYwMbtPmkc/oulkkbjdL3uWzuoBwQ8R00Q==} + '@babel/helper-module-transforms@7.24.9': + resolution: {integrity: sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -697,8 +712,8 @@ packages: resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.8': - resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + '@babel/types@7.24.9': + resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} engines: {node: '>=6.9.0'} '@eslint-community/eslint-utils@4.4.0': @@ -711,16 +726,16 @@ packages: resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.17.0': - resolution: {integrity: sha512-A68TBu6/1mHHuc5YJL0U0VVeGNiklLAL6rRmhTCP2B5XjWLMnrX+HkO+IAXyHvks5cyyY1jjK5ITPQ1HGS2EVA==} + '@eslint/config-array@0.17.1': + resolution: {integrity: sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.1.0': resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.6.0': - resolution: {integrity: sha512-D9B0/3vNg44ZeWbYMpBoXqNP4j6eQD5vNwIlGAuFRRzK/WtT/jvDQW3Bi9kkf3PMDMlM7Yi+73VLUsn5bJcl8A==} + '@eslint/js@9.7.0': + resolution: {integrity: sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': @@ -756,6 +771,10 @@ packages: '@jsdevtools/ono@7.1.3': resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + '@mapbox/node-pre-gyp@1.0.11': + resolution: {integrity: sha512-Yhlar6v9WQgUp/He7BdgzOz8lqMQ8sU+jkCq7Wx8Myc5YFJLbEe7lgui/V7G1qB1DJykHSGwreceSaD60Y0PUQ==} + hasBin: true + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': resolution: {integrity: sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ==} @@ -784,12 +803,15 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node@20.14.11': - resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} + '@types/node@20.14.12': + resolution: {integrity: sha512-r7wNXakLeSsGT0H1AU863vS2wa5wBOK4bWMjZz2wj+8nBx+m5PeIn0k8AloSLpRuiwdRQZwarZqHE4FNArPuJQ==} '@types/validator@13.12.0': resolution: {integrity: sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==} + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -804,6 +826,10 @@ packages: engines: {node: '>=0.4.0'} hasBin: true + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + ajv-draft-04@1.0.0: resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} peerDependencies: @@ -834,6 +860,17 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + append-field@1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + are-we-there-yet@2.0.0: + resolution: {integrity: sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} @@ -881,6 +918,10 @@ packages: balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + bcrypt@5.1.1: + resolution: {integrity: sha512-AGBHOG5hPYZ5Xl9KXzU5iKq9516yEmvCKDg3ecP5kX2aB6UqTeXZxk2ELnDgDm6BQSMlLt9rDB4LoSMx0rYwww==} + engines: {node: '>= 10.0.0'} + binary-extensions@2.3.0: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} @@ -901,9 +942,16 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} @@ -923,8 +971,8 @@ packages: resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} engines: {node: '>=6'} - caniuse-lite@1.0.30001641: - resolution: {integrity: sha512-Phv5thgl67bHYo1TtMY/MurjkHhV4EDaCosezRXgZ8jzA/Ub+wjxAvbGvjoFENStinwi5kCyOYV3mi5tOGykwA==} + caniuse-lite@1.0.30001643: + resolution: {integrity: sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==} chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} @@ -938,6 +986,10 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} @@ -958,6 +1010,10 @@ packages: color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + commander@6.2.0: resolution: {integrity: sha512-zP4jEKbe8SHzKJYQmq8Y9gYjtO/POJLgIdKgV7B9qNmABVFVc+ctqSX6iXh4mCpJfRBOabiZ2YKPg8ciDw6C+Q==} engines: {node: '>= 6'} @@ -976,6 +1032,13 @@ packages: concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -987,9 +1050,17 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + cookie-parser@1.4.6: + resolution: {integrity: sha512-z3IzaNjdwUC2olLIB5/ITd0/setiaFMLYiZJle7xg5Fe9KWAceil7xszYfHHBtDFYLSgJduS2Ty0P1uJdPDJeA==} + engines: {node: '>= 0.8.0'} + cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + cookie@0.4.1: + resolution: {integrity: sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==} + engines: {node: '>= 0.6'} + cookie@0.6.0: resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} engines: {node: '>= 0.6'} @@ -1000,6 +1071,9 @@ packages: core-js@3.37.1: resolution: {integrity: sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw==} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} @@ -1052,6 +1126,9 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + denque@2.1.0: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} @@ -1064,6 +1141,10 @@ packages: resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-libc@2.0.3: + resolution: {integrity: sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==} + engines: {node: '>=8'} + doctrine@3.0.0: resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} engines: {node: '>=6.0.0'} @@ -1075,11 +1156,14 @@ packages: dottie@2.0.6: resolution: {integrity: sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==} + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.4.827: - resolution: {integrity: sha512-VY+J0e4SFcNfQy19MEoMdaIcZLmDCprqvBtkii1WTCTQHpRvf5N8+3kTYCgL/PcntvwQvmMJWTuDPsq+IlhWKQ==} + electron-to-chromium@1.5.1: + resolution: {integrity: sha512-FKbOCOQ5QRB3VlIbl1LZQefWIYwszlBloaXcY2rbfpu9ioJnNh3TK03YtIDKDo3WKBi8u+YV4+Fn2CkEozgf4w==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1136,8 +1220,8 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-plugin-prettier@5.1.3: - resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} + eslint-plugin-prettier@5.2.1: + resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -1150,8 +1234,8 @@ packages: eslint-config-prettier: optional: true - eslint-scope@8.0.1: - resolution: {integrity: sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==} + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: @@ -1162,8 +1246,8 @@ packages: resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.6.0: - resolution: {integrity: sha512-ElQkdLMEEqQNM9Njff+2Y4q2afHk7JpkPvrd7Xh7xefwgQynqPxwf55J7di9+MEibWUGdNjFF9ITG9Pck5M84w==} + eslint@9.7.0: + resolution: {integrity: sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -1267,6 +1351,10 @@ packages: resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + fs-readdir-recursive@1.1.0: resolution: {integrity: sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA==} @@ -1288,6 +1376,11 @@ packages: functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + gauge@3.0.2: + resolution: {integrity: sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==} + engines: {node: '>=10'} + deprecated: This package is no longer supported. + generate-function@2.3.1: resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} @@ -1364,6 +1457,9 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -1379,6 +1475,10 @@ packages: http-status-codes@2.3.0: resolution: {integrity: sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA==} + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -1440,8 +1540,8 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} engines: {node: '>= 0.4'} is-data-view@1.0.1: @@ -1510,6 +1610,9 @@ packages: is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -1557,6 +1660,16 @@ packages: engines: {node: '>=6'} hasBin: true + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -1586,15 +1699,36 @@ packages: lodash.get@4.4.2: resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + lodash.isequal@4.5.0: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} lodash.mergewith@4.6.2: resolution: {integrity: sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==} + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} @@ -1616,6 +1750,10 @@ packages: resolution: {integrity: sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==} engines: {node: '>=6'} + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -1643,6 +1781,30 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + moment-timezone@0.5.45: resolution: {integrity: sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==} @@ -1658,6 +1820,10 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + multer@1.4.5-lts.1: + resolution: {integrity: sha512-ywPWvcDMeH+z9gQq5qYHCCy+ethsk4goepZ45GLD63fOu0YcNecQxi64nDs3qluZB+murG3/D4dJ7+dGctcCQQ==} + engines: {node: '>= 6.0.0'} + mysql2@3.10.3: resolution: {integrity: sha512-k43gmH9i79rZD4hGPdj7pDuT0UBiFjs4UzXEy1cJrV0QqcSABomoLwvejqdbcXN+Vd7gi999CVM6o9vCPKq29g==} engines: {node: '>= 8.0'} @@ -1673,21 +1839,42 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + node-addon-api@5.1.0: + resolution: {integrity: sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==} + node-environment-flags@1.0.6: resolution: {integrity: sha512-5Evy2epuL+6TM0lCQGpFIj6KwiEsGh1SrHUhTbNX+sLbBtjidPZFAnVK9y5yU1+h//RitLbRHTIMyxQPtxMdHw==} - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} nodemon@3.1.4: resolution: {integrity: sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==} engines: {node: '>=10'} hasBin: true + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + npmlog@5.0.1: + resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==} + deprecated: This package is no longer supported. + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -1814,11 +2001,14 @@ packages: resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} engines: {node: '>=6.0.0'} - prettier@3.3.2: - resolution: {integrity: sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==} + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} engines: {node: '>=14'} hasBin: true + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -1845,6 +2035,13 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -1900,6 +2097,11 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -1907,6 +2109,9 @@ packages: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -1925,8 +2130,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.2: - resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true @@ -2008,6 +2213,9 @@ packages: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + simple-update-notifier@2.0.0: resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} engines: {node: '>=10'} @@ -2034,6 +2242,10 @@ packages: resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} engines: {node: '>= 0.8'} + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -2049,6 +2261,12 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2092,10 +2310,14 @@ packages: peerDependencies: express: '>=4.0.0 || >=5.0.0-beta' - synckit@0.8.8: - resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} + synckit@0.9.1: + resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} engines: {node: ^14.18.0 || >=16.0.0} + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} @@ -2118,6 +2340,9 @@ packages: resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} hasBin: true + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + tslib@2.6.3: resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} @@ -2145,6 +2370,9 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} @@ -2183,6 +2411,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -2203,6 +2434,12 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -2218,6 +2455,9 @@ packages: engines: {node: '>= 8'} hasBin: true + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + wkx@0.5.0: resolution: {integrity: sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==} @@ -2232,12 +2472,19 @@ packages: wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + y18n@4.0.3: resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml@2.0.0-1: resolution: {integrity: sha512-W7h5dEhywMKenDJh2iX/LABkbFnBxasD27oyXWDS/feDsxiw0dD5ncXdYXgkvAsXIY2MpW/ZKkr9IU30DBdMNQ==} engines: {node: '>= 6'} @@ -2317,9 +2564,9 @@ snapshots: call-me-maybe: 1.0.2 openapi-types: 12.1.3 - '@babel/cli@7.24.8(@babel/core@7.24.8)': + '@babel/cli@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@jridgewell/trace-mapping': 0.3.25 commander: 6.2.1 convert-source-map: 2.0.0 @@ -2336,20 +2583,20 @@ snapshots: '@babel/highlight': 7.24.7 picocolors: 1.0.1 - '@babel/compat-data@7.24.8': {} + '@babel/compat-data@7.24.9': {} - '@babel/core@7.24.8': + '@babel/core@7.24.9': dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.8 + '@babel/generator': 7.24.10 '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.8) + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) '@babel/helpers': 7.24.8 '@babel/parser': 7.24.8 '@babel/template': 7.24.7 '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 convert-source-map: 2.0.0 debug: 4.3.5(supports-color@5.5.0) gensync: 1.0.0-beta.2 @@ -2358,57 +2605,57 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.24.8': + '@babel/generator@7.24.10': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/helper-annotate-as-pure@7.24.7': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': dependencies: '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color '@babel/helper-compilation-targets@7.24.8': dependencies: - '@babel/compat-data': 7.24.8 + '@babel/compat-data': 7.24.9 '@babel/helper-validator-option': 7.24.8 browserslist: 4.23.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.8)': + '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-function-name': 7.24.7 '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.8) + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.8)': + '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.24.7 regexpu-core: 5.3.2 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.8)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-compilation-targets': 7.24.8 '@babel/helper-plugin-utils': 7.24.8 debug: 4.3.5(supports-color@5.5.0) @@ -2419,34 +2666,34 @@ snapshots: '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/helper-function-name@7.24.7': dependencies: '@babel/template': 7.24.7 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/helper-hoist-variables@7.24.7': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/helper-member-expression-to-functions@7.24.8': dependencies: '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.24.7': dependencies: '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.24.8(@babel/core@7.24.8)': + '@babel/helper-module-transforms@7.24.9(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.24.7 @@ -2457,22 +2704,22 @@ snapshots: '@babel/helper-optimise-call-expression@7.24.7': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/helper-plugin-utils@7.24.8': {} - '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.8)': + '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-wrap-function': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.8)': + '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-member-expression-to-functions': 7.24.8 '@babel/helper-optimise-call-expression': 7.24.7 @@ -2482,20 +2729,20 @@ snapshots: '@babel/helper-simple-access@7.24.7': dependencies: '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.24.7': dependencies: '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/helper-string-parser@7.24.8': {} @@ -2508,14 +2755,14 @@ snapshots: '@babel/helper-function-name': 7.24.7 '@babel/template': 7.24.7 '@babel/traverse': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 transitivePeerDependencies: - supports-color '@babel/helpers@7.24.8': dependencies: '@babel/template': 7.24.7 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/highlight@7.24.7': dependencies: @@ -2524,10 +2771,10 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.0.1 - '@babel/node@7.24.8(@babel/core@7.24.8)': + '@babel/node@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/register': 7.24.6(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/register': 7.24.6(@babel/core@7.24.9) commander: 6.2.1 core-js: 3.37.1 node-environment-flags: 1.0.6 @@ -2536,549 +2783,549 @@ snapshots: '@babel/parser@7.24.8': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.8) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.9) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.8)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.8)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.8)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.8)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.8)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.8)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.8)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.8)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.8)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.8)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.8)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.8)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.8)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.8)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.8)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.8)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.8)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-arrow-functions@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.8) + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.9) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-module-imports': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.8) + '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.9) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.8) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.9) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.24.8(@babel/core@7.24.8)': + '@babel/plugin-transform-classes@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.24.7 '@babel/helper-compilation-targets': 7.24.8 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-function-name': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.8) + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) '@babel/helper-split-export-declaration': 7.24.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 '@babel/template': 7.24.7 - '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.8)': + '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-duplicate-keys@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.8) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-exponentiation-operator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.8) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-for-of@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-compilation-targets': 7.24.8 '@babel/helper-function-name': 7.24.7 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.8) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-literals@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.8) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.8)': + '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-simple-access': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.8) + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-module-transforms': 7.24.8(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-new-target@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.8) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.8) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-compilation-targets': 7.24.8 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.8) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.8) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-object-super@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.8) + '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.8) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.8)': + '@babel/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.8) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.9) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.8) + '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.8) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.9) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.8)': + '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.8)': + '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) '@babel/helper-plugin-utils': 7.24.8 - '@babel/preset-env@7.24.8(@babel/core@7.24.8)': + '@babel/preset-env@7.24.8(@babel/core@7.24.9)': dependencies: - '@babel/compat-data': 7.24.8 - '@babel/core': 7.24.8 + '@babel/compat-data': 7.24.9 + '@babel/core': 7.24.9 '@babel/helper-compilation-targets': 7.24.8 '@babel/helper-plugin-utils': 7.24.8 '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.8) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.8) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.8) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.8) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.8) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.8) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.8) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.8) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.8) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.8) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.8) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.8) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.8) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.8) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.8) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.8) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.8) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-classes': 7.24.8(@babel/core@7.24.8) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.8) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.8) - '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.8) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.8) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.8) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.8) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.8) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.8) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.8) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.8) + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.9) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.9) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.9) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.9) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.9) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.9) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.9) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.9) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.9) + '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-classes': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.9) + '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.9) + '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.9) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.9) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.9) + babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.9) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.9) core-js-compat: 3.37.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.8)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 esutils: 2.0.3 - '@babel/register@7.24.6(@babel/core@7.24.8)': + '@babel/register@7.24.6(@babel/core@7.24.9)': dependencies: - '@babel/core': 7.24.8 + '@babel/core': 7.24.9 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -3095,37 +3342,37 @@ snapshots: dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 '@babel/traverse@7.24.8': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.8 + '@babel/generator': 7.24.10 '@babel/helper-environment-visitor': 7.24.7 '@babel/helper-function-name': 7.24.7 '@babel/helper-hoist-variables': 7.24.7 '@babel/helper-split-export-declaration': 7.24.7 '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.24.9 debug: 4.3.5(supports-color@5.5.0) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.8': + '@babel/types@7.24.9': dependencies: '@babel/helper-string-parser': 7.24.8 '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 - '@eslint-community/eslint-utils@4.4.0(eslint@9.6.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.7.0)': dependencies: - eslint: 9.6.0 + eslint: 9.7.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.0': {} - '@eslint/config-array@0.17.0': + '@eslint/config-array@0.17.1': dependencies: '@eslint/object-schema': 2.1.4 debug: 4.3.5(supports-color@5.5.0) @@ -3147,7 +3394,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.6.0': {} + '@eslint/js@9.7.0': {} '@eslint/object-schema@2.1.4': {} @@ -3174,6 +3421,21 @@ snapshots: '@jsdevtools/ono@7.1.3': {} + '@mapbox/node-pre-gyp@1.0.11': + dependencies: + detect-libc: 2.0.3 + https-proxy-agent: 5.0.1 + make-dir: 3.1.0 + node-fetch: 2.7.0 + nopt: 5.0.0 + npmlog: 5.0.1 + rimraf: 3.0.2 + semver: 7.6.3 + tar: 6.2.1 + transitivePeerDependencies: + - encoding + - supports-color + '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': optional: true @@ -3199,12 +3461,14 @@ snapshots: '@types/ms@0.7.34': {} - '@types/node@20.14.11': + '@types/node@20.14.12': dependencies: undici-types: 5.26.5 '@types/validator@13.12.0': {} + abbrev@1.1.1: {} + accepts@1.3.8: dependencies: mime-types: 2.1.35 @@ -3216,6 +3480,12 @@ snapshots: acorn@8.12.1: {} + agent-base@6.0.2: + dependencies: + debug: 4.3.5(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + ajv-draft-04@1.0.0(ajv@8.17.1): optionalDependencies: ajv: 8.17.1 @@ -3249,6 +3519,15 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 + append-field@1.0.0: {} + + aproba@2.0.0: {} + + are-we-there-yet@2.0.0: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.2 + argparse@1.0.10: dependencies: sprintf-js: 1.0.3 @@ -3289,32 +3568,40 @@ snapshots: aws-ssl-profiles@1.1.1: {} - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.8): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.9): dependencies: - '@babel/compat-data': 7.24.8 - '@babel/core': 7.24.8 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.8) + '@babel/compat-data': 7.24.9 + '@babel/core': 7.24.9 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.8): + babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.9): dependencies: - '@babel/core': 7.24.8 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) core-js-compat: 3.37.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.8): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.9): dependencies: - '@babel/core': 7.24.8 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.8) + '@babel/core': 7.24.9 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) transitivePeerDependencies: - supports-color balanced-match@1.0.2: {} + bcrypt@5.1.1: + dependencies: + '@mapbox/node-pre-gyp': 1.0.11 + node-addon-api: 5.1.0 + transitivePeerDependencies: + - encoding + - supports-color + binary-extensions@2.3.0: {} body-parser@1.20.2: @@ -3345,13 +3632,19 @@ snapshots: browserslist@4.23.2: dependencies: - caniuse-lite: 1.0.30001641 - electron-to-chromium: 1.4.827 - node-releases: 2.0.14 + caniuse-lite: 1.0.30001643 + electron-to-chromium: 1.5.1 + node-releases: 2.0.18 update-browserslist-db: 1.1.0(browserslist@4.23.2) + buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + bytes@3.1.2: {} call-bind@1.0.7: @@ -3368,7 +3661,7 @@ snapshots: camelcase@5.3.1: {} - caniuse-lite@1.0.30001641: {} + caniuse-lite@1.0.30001643: {} chalk@2.4.2: dependencies: @@ -3393,6 +3686,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chownr@2.0.0: {} + cliui@6.0.0: dependencies: string-width: 4.2.3 @@ -3417,6 +3712,8 @@ snapshots: color-name@1.1.4: {} + color-support@1.1.3: {} + commander@6.2.0: {} commander@6.2.1: {} @@ -3428,6 +3725,15 @@ snapshots: concat-map@0.0.1: {} + concat-stream@1.6.2: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 2.3.8 + typedarray: 0.0.6 + + console-control-strings@1.1.0: {} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -3436,8 +3742,15 @@ snapshots: convert-source-map@2.0.0: {} + cookie-parser@1.4.6: + dependencies: + cookie: 0.4.1 + cookie-signature: 1.0.6 + cookie-signature@1.0.6: {} + cookie@0.4.1: {} + cookie@0.6.0: {} core-js-compat@3.37.1: @@ -3446,6 +3759,8 @@ snapshots: core-js@3.37.1: {} + core-util-is@1.0.3: {} + cors@2.8.5: dependencies: object-assign: 4.1.1 @@ -3501,12 +3816,16 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + delegates@1.0.0: {} + denque@2.1.0: {} depd@2.0.0: {} destroy@1.2.0: {} + detect-libc@2.0.3: {} + doctrine@3.0.0: dependencies: esutils: 2.0.3 @@ -3515,9 +3834,13 @@ snapshots: dottie@2.0.6: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + ee-first@1.1.1: {} - electron-to-chromium@1.4.827: {} + electron-to-chromium@1.5.1: {} emoji-regex@8.0.0: {} @@ -3604,20 +3927,20 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@9.1.0(eslint@9.6.0): + eslint-config-prettier@9.1.0(eslint@9.7.0): dependencies: - eslint: 9.6.0 + eslint: 9.7.0 - eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0(eslint@9.6.0))(eslint@9.6.0)(prettier@3.3.2): + eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@9.7.0))(eslint@9.7.0)(prettier@3.3.3): dependencies: - eslint: 9.6.0 - prettier: 3.3.2 + eslint: 9.7.0 + prettier: 3.3.3 prettier-linter-helpers: 1.0.0 - synckit: 0.8.8 + synckit: 0.9.1 optionalDependencies: - eslint-config-prettier: 9.1.0(eslint@9.6.0) + eslint-config-prettier: 9.1.0(eslint@9.7.0) - eslint-scope@8.0.1: + eslint-scope@8.0.2: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -3626,13 +3949,13 @@ snapshots: eslint-visitor-keys@4.0.0: {} - eslint@9.6.0: + eslint@9.7.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.6.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.7.0) '@eslint-community/regexpp': 4.11.0 - '@eslint/config-array': 0.17.0 + '@eslint/config-array': 0.17.1 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.6.0 + '@eslint/js': 9.7.0 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 @@ -3641,7 +3964,7 @@ snapshots: cross-spawn: 7.0.3 debug: 4.3.5(supports-color@5.5.0) escape-string-regexp: 4.0.0 - eslint-scope: 8.0.1 + eslint-scope: 8.0.2 eslint-visitor-keys: 4.0.0 espree: 10.1.0 esquery: 1.6.0 @@ -3794,6 +4117,10 @@ snapshots: fresh@0.5.2: {} + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + fs-readdir-recursive@1.1.0: {} fs.realpath@1.0.0: {} @@ -3812,6 +4139,18 @@ snapshots: functions-have-names@1.2.3: {} + gauge@3.0.2: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + object-assign: 4.1.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + generate-function@2.3.1: dependencies: is-property: 1.0.2 @@ -3891,6 +4230,8 @@ snapshots: dependencies: has-symbols: 1.0.3 + has-unicode@2.0.1: {} + hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -3909,6 +4250,13 @@ snapshots: http-status-codes@2.3.0: {} + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.3.5(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 @@ -3965,7 +4313,7 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.14.0: + is-core-module@2.15.0: dependencies: hasown: 2.0.2 @@ -4026,6 +4374,8 @@ snapshots: dependencies: call-bind: 1.0.7 + isarray@1.0.0: {} + isarray@2.0.5: {} isexe@2.0.0: {} @@ -4057,6 +4407,30 @@ snapshots: json5@2.2.3: {} + jsonwebtoken@9.0.2: + 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.1.1 + ms: 2.1.3 + semver: 7.6.3 + + jwa@1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -4085,12 +4459,26 @@ snapshots: lodash.get@4.4.2: {} + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + lodash.isequal@4.5.0: {} + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + lodash.merge@4.6.2: {} lodash.mergewith@4.6.2: {} + lodash.once@4.1.1: {} + lodash@4.17.21: {} long@5.2.3: {} @@ -4108,6 +4496,10 @@ snapshots: pify: 4.0.1 semver: 5.7.2 + make-dir@3.1.0: + dependencies: + semver: 6.3.1 + media-typer@0.3.0: {} merge-descriptors@1.0.1: {} @@ -4126,6 +4518,25 @@ snapshots: dependencies: brace-expansion: 1.1.11 + minimist@1.2.8: {} + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + moment-timezone@0.5.45: dependencies: moment: 2.30.1 @@ -4138,6 +4549,16 @@ snapshots: ms@2.1.3: {} + multer@1.4.5-lts.1: + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 1.6.2 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + mysql2@3.10.3: dependencies: aws-ssl-profiles: 1.1.1 @@ -4158,12 +4579,18 @@ snapshots: negotiator@0.6.3: {} + node-addon-api@5.1.0: {} + node-environment-flags@1.0.6: dependencies: object.getownpropertydescriptors: 2.1.8 semver: 5.7.2 - node-releases@2.0.14: {} + node-fetch@2.7.0: + dependencies: + whatwg-url: 5.0.0 + + node-releases@2.0.18: {} nodemon@3.1.4: dependencies: @@ -4172,14 +4599,25 @@ snapshots: ignore-by-default: 1.0.1 minimatch: 3.1.2 pstree.remy: 1.1.8 - semver: 7.6.2 + semver: 7.6.3 simple-update-notifier: 2.0.0 supports-color: 5.5.0 touch: 3.1.1 undefsafe: 2.0.5 + nopt@5.0.0: + dependencies: + abbrev: 1.1.1 + normalize-path@3.0.0: {} + npmlog@5.0.1: + dependencies: + are-we-there-yet: 2.0.0 + console-control-strings: 1.1.0 + gauge: 3.0.2 + set-blocking: 2.0.0 + object-assign@4.1.1: {} object-inspect@1.13.2: {} @@ -4286,7 +4724,9 @@ snapshots: dependencies: fast-diff: 1.3.0 - prettier@3.3.2: {} + prettier@3.3.3: {} + + process-nextick-args@2.0.1: {} proxy-addr@2.0.7: dependencies: @@ -4312,6 +4752,22 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -4358,7 +4814,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -4366,6 +4822,10 @@ snapshots: reusify@1.0.4: {} + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -4377,6 +4837,8 @@ snapshots: has-symbols: 1.0.3 isarray: 2.0.5 + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} safe-regex-test@1.0.3: @@ -4391,7 +4853,7 @@ snapshots: semver@6.3.1: {} - semver@7.6.2: {} + semver@7.6.3: {} send@0.18.0: dependencies: @@ -4427,7 +4889,7 @@ snapshots: moment-timezone: 0.5.45 pg-connection-string: 2.6.4 retry-as-promised: 7.0.4 - semver: 7.6.2 + semver: 7.6.3 sequelize-pool: 7.1.0 toposort-class: 1.0.1 uuid: 8.3.2 @@ -4484,9 +4946,11 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.2 + signal-exit@3.0.7: {} + simple-update-notifier@2.0.0: dependencies: - semver: 7.6.2 + semver: 7.6.3 slash@2.0.0: {} @@ -4503,6 +4967,8 @@ snapshots: statuses@2.0.1: {} + streamsearch@1.1.0: {} + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -4528,6 +4994,14 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.0.0 + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + strip-ansi@6.0.1: dependencies: ansi-regex: 5.0.1 @@ -4574,11 +5048,20 @@ snapshots: express: 4.19.2 swagger-ui-dist: 5.17.14 - synckit@0.8.8: + synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 tslib: 2.6.3 + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + text-table@0.2.0: {} to-fast-properties@2.0.0: {} @@ -4593,6 +5076,8 @@ snapshots: touch@3.1.1: {} + tr46@0.0.3: {} + tslib@2.6.3: {} type-check@0.4.0: @@ -4636,6 +5121,8 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 + typedarray@0.0.6: {} + unbox-primitive@1.0.2: dependencies: call-bind: 1.0.7 @@ -4670,6 +5157,8 @@ snapshots: dependencies: punycode: 2.3.1 + util-deprecate@1.0.2: {} + utils-merge@1.0.1: {} uuid@8.3.2: {} @@ -4682,6 +5171,13 @@ snapshots: vary@1.1.2: {} + webidl-conversions@3.0.1: {} + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + which-boxed-primitive@1.0.2: dependencies: is-bigint: 1.0.4 @@ -4704,9 +5200,13 @@ snapshots: dependencies: isexe: 2.0.0 + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + wkx@0.5.0: dependencies: - '@types/node': 20.14.11 + '@types/node': 20.14.12 word-wrap@1.2.5: {} @@ -4718,10 +5218,14 @@ snapshots: wrappy@1.0.2: {} + xtend@4.0.2: {} + y18n@4.0.3: {} yallist@3.1.1: {} + yallist@4.0.0: {} + yaml@2.0.0-1: {} yamljs@0.3.0: diff --git "a/private/uploads/1723180160809-\353\254\264\354\213\240\354\202\2541.png" "b/private/uploads/1723180160809-\353\254\264\354\213\240\354\202\2541.png" new file mode 100644 index 0000000..123abde Binary files /dev/null and "b/private/uploads/1723180160809-\353\254\264\354\213\240\354\202\2541.png" differ diff --git "a/private/uploads/1723180165246-\353\254\264\354\213\240\354\202\2541.png" "b/private/uploads/1723180165246-\353\254\264\354\213\240\354\202\2541.png" new file mode 100644 index 0000000..123abde Binary files /dev/null and "b/private/uploads/1723180165246-\353\254\264\354\213\240\354\202\2541.png" differ diff --git "a/private/uploads/1723180185135-\353\254\264\354\213\240\354\202\2541.png" "b/private/uploads/1723180185135-\353\254\264\354\213\240\354\202\2541.png" new file mode 100644 index 0000000..123abde Binary files /dev/null and "b/private/uploads/1723180185135-\353\254\264\354\213\240\354\202\2541.png" differ diff --git "a/private/uploads/1723180197525-\353\254\264\354\213\240\354\202\2541.png" "b/private/uploads/1723180197525-\353\254\264\354\213\240\354\202\2541.png" new file mode 100644 index 0000000..123abde Binary files /dev/null and "b/private/uploads/1723180197525-\353\254\264\354\213\240\354\202\2541.png" differ diff --git "a/private/uploads/1723180198725-\353\254\264\354\213\240\354\202\2541.png" "b/private/uploads/1723180198725-\353\254\264\354\213\240\354\202\2541.png" new file mode 100644 index 0000000..123abde Binary files /dev/null and "b/private/uploads/1723180198725-\353\254\264\354\213\240\354\202\2541.png" differ diff --git "a/private/uploads/1723180200048-\353\254\264\354\213\240\354\202\2541.png" "b/private/uploads/1723180200048-\353\254\264\354\213\240\354\202\2541.png" new file mode 100644 index 0000000..123abde Binary files /dev/null and "b/private/uploads/1723180200048-\353\254\264\354\213\240\354\202\2541.png" differ diff --git "a/private/uploads/1723180490374-\353\254\264\354\213\240\354\202\2541.png" "b/private/uploads/1723180490374-\353\254\264\354\213\240\354\202\2541.png" new file mode 100644 index 0000000..123abde Binary files /dev/null and "b/private/uploads/1723180490374-\353\254\264\354\213\240\354\202\2541.png" differ diff --git "a/private/uploads/1723180632184-\353\254\264\354\213\240\354\202\2541.png" "b/private/uploads/1723180632184-\353\254\264\354\213\240\354\202\2541.png" new file mode 100644 index 0000000..123abde Binary files /dev/null and "b/private/uploads/1723180632184-\353\254\264\354\213\240\354\202\2541.png" differ diff --git "a/private/uploads/1723181125376-\353\254\264\354\213\240\354\202\2541.png" "b/private/uploads/1723181125376-\353\254\264\354\213\240\354\202\2541.png" new file mode 100644 index 0000000..123abde Binary files /dev/null and "b/private/uploads/1723181125376-\353\254\264\354\213\240\354\202\2541.png" differ diff --git a/src/config/db.config.js b/src/config/db.config.js index 81de2ea..7f21465 100644 --- a/src/config/db.config.js +++ b/src/config/db.config.js @@ -1,5 +1,7 @@ // Import the dotenv module to load environment variables from the .env file import dotenv from 'dotenv'; +import mysql from 'mysql2/promise'; + // Configure dotenv to load variables dotenv.config(); @@ -27,4 +29,16 @@ export const config = { host: process.env.DB_HOST, dialect: process.env.DB_DIALECT } -}; \ No newline at end of file +}; + + + +export const pool = mysql.createPool({ + host: process.env.DB_HOST, + user: process.env.DB_USERNAME, + database: process.env.DB_DATABASE, + password: process.env.DB_PASSWORD, + waitForConnections: true, + connectionLimit: 10, + queueLimit: 0 +}); diff --git a/src/domains/search/search.controller.js b/src/domains/search/search.controller.js new file mode 100644 index 0000000..6ff64b0 --- /dev/null +++ b/src/domains/search/search.controller.js @@ -0,0 +1,23 @@ +import { response } from "../../config/response.js"; +import { status } from "../../config/response.status.js"; +import { getSearch, getCloth, getSearchResult, getSearchBrand } from "./search.provider.js"; + +export const searchPreview = async (req, res, next) => { + console.log("검색 메인화면을 조회합니다"); + res.send(response(status.SUCCESS, await getSearch(req.query))); +} + +export const clothView = async (req, res, next) => { + console.log("아이템 상세정보를 조회합니다"); + res.send(response(status.SUCCESS, await getCloth(req.params.clothId))); +} + +export const searchView = async (req, res, next) => { + console.log("검색 결과를 조회합니다"); + res.send(response(status.SUCCESS, await getSearchResult(req.query))); +} + +export const brandView = async (req, res, next) => { + console.log("브랜드 검색 결과를 조회합니다"); + res.send(response(status.SUCCESS, await getSearchBrand(req.params.brandId, req.query))); +} diff --git a/src/domains/search/search.dao.js b/src/domains/search/search.dao.js new file mode 100644 index 0000000..6a1adc1 --- /dev/null +++ b/src/domains/search/search.dao.js @@ -0,0 +1,199 @@ +import { query } from "express"; +import { pool } from "../../config/db.config.js"; +import { BaseError } from "../../config/error.js"; +import { status } from "../../config/response.status.js"; +import { UserNicknameToClothIdAtFirst, UserNicknameToClothId, UserCategoryToClothIdAtFirst, UserCategoryToClothId, + getClothByClothId, getUserIdToClothId, getUser, getFitToUserId, getStyleToUserId, + UserNicknameToClothNameAtFirst, UserNicknameToClothName, UserCategoryToClothNameAtFirst, UserCategoryToClothName, + brandToBrandName, userIdToNickname, userToNickname, getBrandToBrandId, UserNicknameToBrand } from "./search.sql.js"; + +// nickname+cloth 반환 + export const getNicknameToClothId = async (category, size, cursorId) => { + try { + const conn = await pool.getConnection(); + + console.log("카테고리 : ", category); + console.log("옷 id : ", cursorId); + if(category == "undefined" || typeof category == "undefined" || category == null){ + if(cursorId == "undefined" || typeof cursorId == "undefined" || cursorId == null){ + const [data] = await pool.query(UserNicknameToClothIdAtFirst, [size]); + conn.release(); + console.log("dao1", data); + return data; + }else{ + const [data] = await pool.query(UserNicknameToClothId, [cursorId, size]); + conn.release(); + console.log("dao2", data); + return data; + } + }else{ + if(cursorId == "undefined" || typeof cursorId == "undefined" || cursorId == null){ + const [data] = await pool.query(UserCategoryToClothIdAtFirst, [category, size]); + conn.release(); + console.log("dao1", data); + return data; + }else{ + const [data] = await pool.query(UserCategoryToClothId, [category, cursorId, size]); + conn.release(); + console.log("dao2", data); + return data; + } + } + } catch (err) { + throw new BaseError(status.PARAMETER_IS_WRONG); + } +} + +export const getPreviewCloth = async (clothId) => { + try { + console.log("dao getPreviewCloth"); + const conn = await pool.getConnection(); + const cloth = await pool.query(getClothByClothId, clothId); + + conn.release(); + + return cloth; + } catch (err) { + throw new BaseError(status.PARAMETER_IS_WRONG); + } +} + +// user 정보 반환 +export const getUserToClothId = async (clothId) => { + try { + console.log("dao getUserToClothId"); + const conn = await pool.getConnection(); + const userData =await pool.query(getUserIdToClothId, clothId); + + const userId = userData[0][0].uuid; + const user = await pool.query(getUser, userId); + const fit = await pool.query(getFitToUserId, userId); + const style = await pool.query(getStyleToUserId, userId); + + if(user.length == 0){ + return -1; + } + + conn.release(); + return [ user, fit, style ]; + + } catch (err) { + throw new BaseError(status.PARAMETER_IS_WRONG); + } +} + + +// nickname+cloth 반환 +export const getNicknameToClothName = async (clothName, category, size, cursorId) => { + try { + const conn = await pool.getConnection(); + + if(typeof category == "undefined" || category == null){ + if(typeof cursorId == "undefined" || cursorId == null){ + const [data] = await pool.query(UserNicknameToClothNameAtFirst, [clothName, size]); + conn.release(); + return data; + }else{ + const [data] = await pool.query(UserNicknameToClothName, [clothName, cursorId, size]); + conn.release(); + return data; + } + }else{ + if(typeof cursorId == "undefined" || cursorId == null){ + const [data] = await pool.query(UserCategoryToClothNameAtFirst, [clothName, category, size]); + conn.release(); + return data; + }else{ + const [data] = await pool.query(UserCategoryToClothName, [clothName, category, cursorId, size]); + conn.release(); + return data; + } + } + } catch (err) { + throw new BaseError(status.PARAMETER_IS_WRONG); + } +} + +// 통합검색 brand 조회 +export const getPreviewBrand = async (brandName) => { + try { + const conn = await pool.getConnection(); + console.log("\ndao brand", brandName); + const [data] = await pool.query(brandToBrandName, brandName); + console.log(data); + conn.release(); + return data; + } catch (err) { + throw new BaseError(status.PARAMETER_IS_WRONG); + } +} + +// 통합검색 user 조회 +export const getPreviewUser = async (userName) => { + try { + const conn = await pool.getConnection(); + const [userData] = await pool.query(userIdToNickname, userName); + console.log("\nuser :", userData); + + const result = []; + for (let i = 0; i < userData.length; i++) { + const userId = userData[i].uuid; + console.log("userId ", userId); + const [user] = await pool.query(userToNickname, userId); + const [fit] = await pool.query(getFitToUserId, userId); + const [style] = await pool.query(getStyleToUserId, userId); + console.log(user, fit, style); + result.push({user, fit, style}); + } + conn.release(); + return result; + } catch (err) { + throw new BaseError(status.PARAMETER_IS_WRONG); + } +} + + +// brand 상세 조회 +export const getBrand = async (brandId) => { + try { + const conn = await pool.getConnection(); + const [brand] = await pool.query(getBrandToBrandId, brandId); + + conn.release(); + return brand; + } catch (err) { + throw new BaseError(status.PARAMETER_IS_WRONG); + } +} + +// brand cloth 조회 +export const getNicknameToBrand = async (brandId, clothName, category, size) => { + try { + const conn = await pool.getConnection(); + let query = UserNicknameToBrand; + + if(typeof clothName == "undefined" && typeof category == "undefined"){ + query += "ORDER BY c.id DESC LIMIT ? ;"; + const [data] = await pool.query(query, [brandId, size]); + conn.release(); + return data; + }else if(typeof clothName == "undefined"){ + query += "WHERE c.category_id = ? ORDER BY c.id DESC LIMIT ? ;" + const [data] = await pool.query(query, [brandId, category, size]); + conn.release(); + return data; + }else if(typeof category == "undefined"){ + query += "WHERE c.name REGEXP ? ORDER BY c.id DESC LIMIT ? ;" + const [data] = await pool.query(query, [brandId, clothName, size]); + conn.release(); + return data; + }else{ + query += "WHERE c.name REGEXP ? AND c.category_id = ? ORDER BY c.id DESC LIMIT ? ;" + const [data] = await pool.query(query, [brandId, clothName, category, size]); + conn.release(); + return data; + } + } catch (err) { + throw new BaseError(status.PARAMETER_IS_WRONG); + } +} \ No newline at end of file diff --git a/src/domains/search/search.dto.js b/src/domains/search/search.dto.js new file mode 100644 index 0000000..5bfd23c --- /dev/null +++ b/src/domains/search/search.dto.js @@ -0,0 +1,133 @@ +// preview search response DTO +export const previewSearchResponseDTO = (data) => { + + const cloth = []; + + if(data.length == 0){ + cloth.push("해당 제품은 등록되어 있지 않아요."); + return {"clothData": cloth} + }else{ + for (let i = 0; i < data.length; i++) { + cloth.push({ + "nickname": data[i].nickname, + "brand": data[i].brand_name, + "cloth_name": data[i].name, + "size": data[i].size, + "fit": data[i].fit + }) + } + } + return {"clothData": cloth, "cursorId": data[data.length-1].id}; +} + +// preview cloth response DTO +export const previewClothResponseDTO = (data, userData) => { + + const cloth = []; + const user = []; + const fit = []; + const style = []; + + if(data.length == 0){ + cloth.push("해당 제품은 등록되어 있지 않아요."); + }else{ + cloth.push({ + "brand": data[0][0].brand_name, + "cloth_name": data[0][0].name, + "product_code": data[0][0].product_code, + "size": data[0][0].size, + "fit": data[0][0].fit, + "color": data[0][0].color, + "URL": data[0][0].url, + "memo": data[0][0].memo + }) + } + + if(userData.length == 0){ + user.push("해당 유저는 등록되어 있지 않아요."); + }else{ + user.push({ + "nickname": userData[0][0][0].nickname, + "height": userData[0][0][0].height, + "weight": userData[0][0][0].weight + }) + for (let i = 0; i < userData[1][0].length; i++) { + fit.push(userData[1][0][i].pf_name); + } + for (let i = 0; i < userData[2][0].length; i++) { + style.push(userData[2][0][i].style_name); + } + } + return {"clothData": cloth, "userData": user, "prefer_fit": fit, "prefer_style": style}; +} + +// search result response DTO +export const SearchResultResponseDTO = (clothData, brandData, userData) => { + + const cloth = []; + const brand = []; + const user = []; + + if(clothData.length == 0){ + cloth.push("해당 제품은 등록되어 있지 않아요."); + }else{ + for (let i = 0; i < clothData.length; i++) { + cloth.push({ + "nickname": clothData[i].nickname, + "brand": clothData[i].brand_name, + "cloth_name": clothData[i].name, + "size": clothData[i].size, + "fit": clothData[i].fit + }) + } + }console.log(cloth) + + if(brandData.length == 0){ + brand.push("해당 브랜드는 등록되어 있지 않아요."); + }else{ + for (let i = 0; i < brandData.length; i++) { + brand.push({ + "brand_id": brandData[i].id, + "brand_name": brandData[i].name, + "eng_name": brandData[i].eng_name + }) + } + }console.log(brand) + + if(userData.length == 0){ + user.push("해당 유저는 등록되어 있지 않아요.") + }else{ + for (let i = 0; i < userData.length; i++) { + user.push({ + "user_id": userData[i].user[0].uuid, + "nickname": userData[i].user[0].nickname, + "height": userData[i].user[0].height, + "weight": userData[i].user[0].weight, + "prefer_fit": userData[i].fit.map(fitItem => fitItem.pf_name), + "prefer_style": userData[i].style.map(styleItem => styleItem.style_name) + }) + } + } + return {"clothData": cloth, "brandData": brand, "userData": user}; +} + +// search result response DTO +export const SearchBrandResponseDTO = (brand, clothData) => { + + const cloth = []; + + if(clothData.length == 0){ + cloth.push("해당 제품은 등록되어 있지 않아요."); + }else{ + for (let i = 0; i < clothData.length; i++) { + cloth.push({ + "nickname": clothData[i].nickname, + "brand": clothData[i].brand_name, + "cloth_name": clothData[i].name, + "size": clothData[i].size, + "fit": clothData[i].fit + }) + } + } + return {"brand_name": brand[0].name, "eng_name": brand[0].eng_name, "clothData": cloth}; +} \ No newline at end of file diff --git a/src/domains/search/search.provider.js b/src/domains/search/search.provider.js new file mode 100644 index 0000000..cd162b9 --- /dev/null +++ b/src/domains/search/search.provider.js @@ -0,0 +1,29 @@ +import { previewSearchResponseDTO, previewClothResponseDTO, SearchResultResponseDTO, SearchBrandResponseDTO } from "./search.dto.js" +import { getNicknameToClothId, + getPreviewCloth, getUserToClothId, + getNicknameToClothName, getPreviewBrand, getPreviewUser, + getBrand, getNicknameToBrand } from "./search.dao.js"; + +export const getSearch = async (query) => { + const { category, size = 8, clothId } = query; + + return previewSearchResponseDTO(await getNicknameToClothId(category, size, clothId)); +} + +export const getCloth = async (clothId) => { + + return previewClothResponseDTO(await getPreviewCloth(clothId), await getUserToClothId(clothId)); +} + +export const getSearchResult = async (query) => { + const { name, category, size = 8, clothId } = query; + + return SearchResultResponseDTO(await getNicknameToClothName(name, category, size, clothId), await getPreviewBrand(name), await getPreviewUser(name)); +} + +export const getSearchBrand = async (brandId, query) => { + const { name, category, size = 8 } = query; + console.log("\nprovider", brandId); + + return SearchBrandResponseDTO(await getBrand(brandId), await getNicknameToBrand(brandId, name, category, size)); +} \ No newline at end of file diff --git a/src/domains/search/search.service.js b/src/domains/search/search.service.js new file mode 100644 index 0000000..e69de29 diff --git a/src/domains/search/search.sql.js b/src/domains/search/search.sql.js new file mode 100644 index 0000000..2392904 --- /dev/null +++ b/src/domains/search/search.sql.js @@ -0,0 +1,103 @@ +export const UserNicknameToClothIdAtFirst = +"SELECT m.nickname, c.brand_name, c.name, c.size, c.fit " ++ "FROM member m JOIN cloth c on c.uuid = m.uuid " ++ "ORDER BY c.id DESC LIMIT ? ;" + +export const UserNicknameToClothId = +"SELECT m.nickname, c.brand_name, c.name, c.size, c.fit, c.id " ++ "FROM member m JOIN cloth c on c.uuid = m.uuid " ++ "WHERE c.id < ? "; ++ "ORDER BY c.id DESC LIMIT ? ;" + +export const UserCategoryToClothIdAtFirst = +"SELECT m.nickname, c.brand_name, c.name, c.size, c.fit " ++ "FROM member m JOIN cloth c on c.uuid = m.uuid " ++ "WHERE c.category_id = ? " ++ "ORDER BY c.id DESC LIMIT ? ;" + +export const UserCategoryToClothId = +"SELECT m.nickname, c.brand_name, c.name, c.size, c.fit, c.id " ++ "FROM member m JOIN cloth c on c.uuid = m.uuid " ++ "WHERE c.category_id = ? AND c.id < ? "; ++ "ORDER BY c.id DESC LIMIT ? ;" + + +export const getClothByClothId = +"SELECT m.uuid, c.id, c.brand_name, c.name, c.product_code, c.size, c.fit, c.color, c.url, c.memo " ++ "FROM cloth c JOIN member m on c.uuid = m.uuid " ++ "WHERE c.id = ? ;" + +export const getUserIdToClothId = +"SELECT m.uuid " ++ "FROM cloth c JOIN member m on c.uuid = m.uuid " ++ "WHERE c.id = ? ;"; + +//user+body_info +export const getUser = +"SELECT m.nickname, m.one_line_info, b.height, b.weight " ++ "FROM body_info b JOIN member m on b.uuid = m.uuid " ++ "WHERE b.uuid = ? ;"; + +export const getFitToUserId = +"SELECT uf.uuid, uf.pf_name " ++ "FROM user_fit uf " ++ "WHERE uf.uuid = ? ;"; + +export const getStyleToUserId = +"SELECT us.uuid, us.style_name " ++ "FROM user_style us " ++ "WHERE us.uuid = ? ;" + + +export const UserNicknameToClothNameAtFirst = +"SELECT m.nickname, c.brand_name, c.name, c.size, c.fit " ++ "FROM member m JOIN cloth c on c.uuid = m.uuid " ++ "WHERE c.name REGEXP ? " ++ "ORDER BY c.id DESC LIMIT ? ;" + +export const UserNicknameToClothName = +"SELECT m.nickname, c.brand_name, c.name, c.size, c.fit, c.id " ++ "FROM member m JOIN cloth c on c.uuid = m.uuid " ++ "WHERE c.name REGEXP ? AND c.id < ? "; ++ "ORDER BY c.id DESC LIMIT ? ;" + +export const UserCategoryToClothNameAtFirst = +"SELECT m.nickname, c.brand_name, c.name, c.size, c.fit " ++ "FROM member m JOIN cloth c on c.uuid = m.uuid " ++ "WHERE c.name REGEXP ? AND c.category_id = ? " ++ "ORDER BY c.id DESC LIMIT ? ;" + +export const UserCategoryToClothName = +"SELECT m.nickname, c.brand_name, c.name, c.size, c.fit, c.id " ++ "FROM member m JOIN cloth c on c.uuid = m.uuid " ++ "WHERE c.name REGEXP ? AND c.category_id = ? AND c.id < ? "; ++ "ORDER BY c.id DESC LIMIT ? ;" + +export const brandToBrandName = +"SELECT b.id, b.name, b.eng_name " ++ "FROM brand b " ++ "WHERE b.name REGEXP ? " ++ "ORDER BY b.id ;" + +export const userIdToNickname = +"SELECT m.uuid " ++ "FROM member m " ++ "WHERE m.nickname REGEXP ? ;"; + +export const userToNickname = +"SELECT m.uuid, m.nickname, b.height, b.weight " ++ "FROM body_info b JOIN member m on b.uuid = m.uuid " ++ "WHERE m.uuid = ? " ++ "ORDER BY m.uuid ;" + + +export const getBrandToBrandId = +"SELECT b.id, b.name, b.eng_name " ++ "FROM brand b " ++ "WHERE b.id = ? ; " + +export const UserNicknameToBrand = +"SELECT m.nickname, c.id, c.brand_name, c.name, c.size, c.fit " ++ "FROM cloth c JOIN member m on c.uuid = m.uuid " ++ "JOIN brand b on c.brand_name = b.name " ++ "WHERE b.id = ? " \ No newline at end of file diff --git a/src/domains/size/uploadsize/uploadsize.controller.js b/src/domains/size/uploadsize/uploadsize.controller.js new file mode 100644 index 0000000..4d1552d --- /dev/null +++ b/src/domains/size/uploadsize/uploadsize.controller.js @@ -0,0 +1,33 @@ +// export const uploadSizeController = async (req, res) => { +// try { +// if (!req.file) { +// return res.status(400).json({ message: '파일이 업로드되지 않았습니다.' }); +// } +// const result = await uploadSizeImage(req.file); +// res.status(200).json({ message: '이미지 업로드 성공', imageUrl: result }); +// } catch (error) { +// res.status(500).json({ message: '업로드 실패', error: error.message }); +// } +// }; + + +import { uploadSizeImage } from './uploadsize.service.js'; +import { response } from "../../../config/response.js"; +import { status } from '../../../config/response.status.js'; + +export const uploadSizeController = async (req, res) => { + try { + if (!req.file) { + return res.status(400).json(response({ isSuccess: false, code: "400", message: '파일이 업로드되지 않았습니다.' }, null)); + } + const result = await uploadSizeImage(req.file); + + // 성공적으로 업로드 되었을 때의 응답 형식 + return res.status(200).json(response({ isSuccess: true, code: "200", message: '이미지 업로드 성공' }, { + imagePath: result.imagePath, + imageId: result.imageId + })); + } catch (error) { + return res.status(500).json(response({ isSuccess: false, code: "500", message: '업로드 실패' }, error.message)); + } +}; diff --git a/src/domains/size/uploadsize/uploadsize.dao.js b/src/domains/size/uploadsize/uploadsize.dao.js new file mode 100644 index 0000000..a31cd83 --- /dev/null +++ b/src/domains/size/uploadsize/uploadsize.dao.js @@ -0,0 +1,18 @@ +import mysql from 'mysql2/promise'; +import dotenv from 'dotenv'; + +dotenv.config(); // .env 파일의 환경 변수 로드 + +const pool = mysql.createPool({ + host: process.env.DB_HOST, // RDS 엔드포인트 + user: process.env.DB_USERNAME, // RDS 사용자 이름 + password: process.env.DB_PASSWORD, // RDS 비밀번호 + database: process.env.DB_DATABASE, // 데이터베이스 이름 +}); + +// 이미지 경로를 DB에 저장하는 로직 구현 +export const saveImageToDB = async (imagePath) => { + const sql = 'INSERT INTO images (path) VALUES (?)'; + const [result] = await pool.execute(sql, [imagePath]); + return result.insertId; // 저장된 이미지 경로의 ID 반환 +}; diff --git a/src/domains/size/uploadsize/uploadsize.dto.js b/src/domains/size/uploadsize/uploadsize.dto.js new file mode 100644 index 0000000..a8597f1 --- /dev/null +++ b/src/domains/size/uploadsize/uploadsize.dto.js @@ -0,0 +1,5 @@ +export class UploadSizeDto { + constructor(imageUrl) { + this.imageUrl = imageUrl; + } +} diff --git a/src/domains/size/uploadsize/uploadsize.service.js b/src/domains/size/uploadsize/uploadsize.service.js new file mode 100644 index 0000000..7ea96fc --- /dev/null +++ b/src/domains/size/uploadsize/uploadsize.service.js @@ -0,0 +1,16 @@ +import { saveImageToDB } from './uploadsize.dao.js'; + +// export const uploadSizeImage = async (file) => { +// const imagePath = file.path; // 업로드된 파일의 경로 +// await saveImageToDB(imagePath); // DB에 저장 +// return imagePath; // 이미지 경로 반환 +// }; + +export const uploadSizeImage = async (file) => { + if (!file || !file.path) { + throw new Error('Invalid file object'); + } + const imagePath = file.path; + const imageId = await saveImageToDB(imagePath); + return { imagePath, imageId }; +}; diff --git a/src/domains/size/uploadsize/uploadsize.sql.js b/src/domains/size/uploadsize/uploadsize.sql.js new file mode 100644 index 0000000..16ad0d5 --- /dev/null +++ b/src/domains/size/uploadsize/uploadsize.sql.js @@ -0,0 +1,5 @@ +export const createImagesTable = +"CREATE TABLE IF NOT EXISTS images ( " + +" id INT AUTO_INCREMENT PRIMARY KEY, " + +" path VARCHAR(255) NOT NULL " + +");"; diff --git a/src/index.js b/src/index.js index 75d1003..4039436 100644 --- a/src/index.js +++ b/src/index.js @@ -1,34 +1,50 @@ +import dotenv from 'dotenv'; import express from 'express'; import cors from 'cors'; import cookieParser from 'cookie-parser'; - import SwaggerUi from 'swagger-ui-express'; import { specs } from './swagger/swagger.config.js'; import { init } from './db/index.js'; -import { signupRouter } from './routes/signup.js'; -import { loginRouter } from './routes/login.js'; import { status } from './config/response.status.js'; import { BaseError } from './config/error.js'; import { response } from './config/response.js'; +import { signupRouter } from './routes/signup.js'; +import { loginRouter } from './routes/login.js'; +import { searchRouter } from './routes/search.js'; import { refreshTokenRouter } from './routes/refreshToken.js'; +import sizeUploadRoutes from './routes/uploadsize.routes.js'; +dotenv.config(); + +// require('dotenv').config(); const app = express(); const port = 3000; +app.get('/', (req, res) => { + res.send('환영합니다 핏플 백엔드!'); +}); + await init(); // 미들웨어 설정 +app.use(express.static('public')); app.use(cors()); app.use(express.json()); app.use(cookieParser()); app.use(express.urlencoded({ extended: true })); +// swagger app.use('/api-docs', SwaggerUi.serve, SwaggerUi.setup(specs)); +// router setting app.use("/FITple/signup",signupRouter); app.use("/FITple/login",loginRouter); +app.use('/FITple/search', searchRouter); +app.use('/FITple/uploadsize', sizeUploadRoutes); app.use("/FITple/refreshToken",refreshTokenRouter); + +// error handling app.use((req, res, next) => { const err = new BaseError(status.NOT_FOUND); next(err); @@ -37,9 +53,9 @@ app.use((req, res, next) => { app.use((err, req, res, next) => { res.locals.message = err.message; res.locals.error = process.env.NODE_ENV !== 'production' ? err : {}; - res.status(err.data.status).send(response(err.data)); + res.status(err.data.status || status.INTERNAL_SERVER_ERROR).send(response(err.data)); }); app.listen(port, () => { console.log(`Server is running at http://localhost:${port}`); -}); \ No newline at end of file +}); diff --git a/src/routes/search.js b/src/routes/search.js new file mode 100644 index 0000000..ee3a338 --- /dev/null +++ b/src/routes/search.js @@ -0,0 +1,17 @@ +import express from "express"; +import asyncHandler from 'express-async-handler'; +import { searchPreview, clothView, searchView, brandView } from "../domains/search/search.controller.js"; + +export const searchRouter = express.Router({mergeParams: true}); + +//검색-메인화면 +searchRouter.get('/main', asyncHandler(searchPreview)); + +//검색-아이템 상세정보 +searchRouter.get('/:clothId', asyncHandler(clothView)); + +//검색-통합 검색 +searchRouter.get('', asyncHandler(searchView)); + +//검색-브랜드 +searchRouter.get('/brand/:brandId', asyncHandler(brandView)); \ No newline at end of file diff --git a/src/routes/uploadsize.routes.js b/src/routes/uploadsize.routes.js new file mode 100644 index 0000000..5e76ec1 --- /dev/null +++ b/src/routes/uploadsize.routes.js @@ -0,0 +1,45 @@ +import express from 'express'; +import multer from 'multer'; +import { uploadSizeController } from '../domains/size/uploadsize/uploadsize.controller.js'; + +const router = express.Router(); +// const upload = multer({ dest: 'private/uploads/' }); // 업로드된 파일을 저장할 디렉토리 설정 + +// router.post('/', upload.single('sizeImage'), uploadSizeController); // POST 요청 라우팅 + +export default router; + +const storage = multer.diskStorage({ + destination: (req, file, cb) => { + cb(null, 'private/uploads/'); + }, + filename: (req, file, cb) => { + cb(null, `${Date.now()}-${file.originalname}`); + } + }); +// const upload = multer({ storage }); + + const upload = multer({ + storage: storage, + fileFilter: (req, file, cb) => { + if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png') { + cb(null, true); + } else { + cb(new Error('Only JPEG and PNG files are allowed.'), false); + } + } + }); + + + +router.post('/', upload.single('file'), (req, res, next) => { + console.log(req.file); // 파일 정보 로그 + if (!req.file) { + return res.status(400).json({ error: 'No file uploaded.' }); + } + + uploadSizeController(req, res, next); +}); + + + \ No newline at end of file diff --git a/src/swagger/login.swagger.yaml b/src/swagger/login.swagger.yaml index bdfb5fe..0307926 100644 --- a/src/swagger/login.swagger.yaml +++ b/src/swagger/login.swagger.yaml @@ -4,20 +4,24 @@ paths: tags: - Login summary: 로그인 - parameters: - - name: login - in: body + requestBody: required: true - schema: - properties: - user_id: - type: string - description: 유저 아이디 - example: swaggerTest - password: - type: string - description: 유저 비밀번호 - example: 1234567 + content: + application/json: + schema: + type: object + properties: + user_id: + type: string + description: 유저 아이디 + example: swaggerTest + password: + type: string + description: 유저 비밀번호 + example: 1234567 + required: + - user_id + - password responses: '200': description: 로그인 성공! diff --git a/src/swagger/search.swagger.yaml b/src/swagger/search.swagger.yaml new file mode 100644 index 0000000..e086914 --- /dev/null +++ b/src/swagger/search.swagger.yaml @@ -0,0 +1,407 @@ +paths: + /FITple/search/main: + get: + tags: + - Search + summary: 전체 옷장 조회 로직 + parameters: + - name: category + in: query + required: false + schema: + type: integer + - name: clothId + in: query + required: false + schema: + type: integer + - name: size + in: query + required: false + schema: + type: integer + responses: + '200': + description: 검색 메인화면 조회 성공 + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 2000 + message: + type: string + example: "success!" + data: + type: array + example: { + "closetData": [ + { + "nickname": "닉네임1", + "brand": "아디다스", + "cloth_name": "에센셜 풀집 후디", + "size": "S", + "fit": "레귤러" + }, + { + "brand": "아디다스", + "cloth_name": "에센셜 풀집 후디", + "size": "M", + "fit": "세미오버" + } + ], + "cursorId": 1 + } + + '400': + description: 잘못된 요청 + schema: + type: object + properties: + status: + type: integer + example: 400 + isSuccess: + type: boolean + example: false + code: + type: integer + example: COMMON001 + message: + type: string + example: 잘못된 요청입니다 + + '500': + description: 서버 에러 + schema: + type: object + properties: + status: + type: integer + example: 500 + isSuccess: + type: boolean + example: false + code: + type: integer + example: COMMON000 + message: + type: string + example: 서버 에러, 관리자에게 문의 바랍니다. + + /FITple/search/{clothId}: + get: + tags: + - Search + summary: 옷 상세 조회 로직 + parameters: + - name: clothId + in: path + required: true + schema: + type: integer + responses: + '200': + description: 옷 상세 조회 성공 + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 2000 + message: + type: string + example: "success!" + data: + type: array + example: { + "clothData": [ + { + "brand": "아디다스", + "cloth_name": "에센셜 풀업 후디", + "product_code": "IL2516", + "size": "M", + "fit": "세미오버", + "color": "그레이", + "URL": "https://adidas.co.kr/1245", + "memo": "길이는 딱 맞고, 팔이 조금 길다." + } + ], + "userData": [ + { + "nickname": "닉네임1", + "height": "161", + "weight": "51" + } + ], + "prefer_fit": [ + "슬림", + "레귤러" + ], + "prefer_style": [ + "러블리", + "모던시크" + ] + } + + '400': + description: 잘못된 요청 + schema: + type: object + properties: + status: + type: integer + example: 400 + isSuccess: + type: boolean + example: false + code: + type: integer + example: COMMON001 + message: + type: string + example: 잘못된 요청입니다 + + '500': + description: 서버 에러 + schema: + type: object + properties: + status: + type: integer + example: 500 + isSuccess: + type: boolean + example: false + code: + type: integer + example: COMMON000 + message: + type: string + example: 서버 에러, 관리자에게 문의 바랍니다. + + /FITple/search: + get: + tags: + - Search + summary: 통합 검색 조회 로직 + parameters: + - name: name + in: query + required: true + schema: + type: string + - name: category + in: query + required: false + schema: + type: integer + - name: clothId + in: query + required: false + schema: + type: integer + - name: size + in: query + required: false + schema: + type: integer + responses: + '200': + description: 통합 검색 조회 성공 + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 2000 + message: + type: string + example: "success!" + data: + type: array + example: { + "clothData": [ + { + "nickname": "닉네임1", + "brand": "아디다스", + "cloth_name": "아디다스 에센셜 후디", + "size": "XS", + "fit": "레귤러" + }, + { + "nickname": "닉네임2", + "brand": "아디다스", + "cloth_name": "아디다스 에센셜 후디", + "size": "XS", + "fit": "레귤러" + } + ], + "brandData": [ + { + "brand_id": 2, + "brand_name": "아디다스", + "eng_name": "ADIDAS" + } + ], + "userData": [ + "해당 유저는 등록되어 있지 않아요." + ] + } + + '400': + description: 잘못된 요청 + schema: + type: object + properties: + status: + type: integer + example: 400 + isSuccess: + type: boolean + example: false + code: + type: integer + example: COMMON001 + message: + type: string + example: 잘못된 요청입니다 + + '500': + description: 서버 에러 + schema: + type: object + properties: + status: + type: integer + example: 500 + isSuccess: + type: boolean + example: false + code: + type: integer + example: COMMON000 + message: + type: string + example: 서버 에러, 관리자에게 문의 바랍니다. + + /FITple/search/brand/{brandId}: + get: + tags: + - Search + summary: 브랜드 상세 조회 로직 + parameters: + - name: brandId + in: path + required: true + schema: + type: integer + - name: name + in: query + required: false + schema: + type: string + - name: category + in: query + required: false + schema: + type: integer + - name: size + in: query + required: false + schema: + type: integer + responses: + '200': + description: 브랜드 상세 조회 성공 + schema: + type: object + properties: + status: + type: integer + example: 200 + isSuccess: + type: boolean + example: true + code: + type: integer + example: 2000 + message: + type: string + example: "success!" + data: + type: array + example: { + "brand_name": "아디다스", + "eng_name": "ADIDAS", + "clothData": [ + { + "nickname": "닉네임1", + "brand": "아디다스", + "cloth_name": "에센셜 풀업 후디", + "size": "M", + "fit": "세미오버" + }, + { + "nickname": "닉네임1", + "brand": "아디다스", + "cloth_name": "아디다스 에센셜 후디", + "size": "XS", + "fit": "레귤러" + } + ] + } + + '400': + description: 잘못된 요청 + schema: + type: object + properties: + status: + type: integer + example: 400 + isSuccess: + type: boolean + example: false + code: + type: integer + example: COMMON001 + message: + type: string + example: 잘못된 요청입니다 + + '500': + description: 서버 에러 + schema: + type: object + properties: + status: + type: integer + example: 500 + isSuccess: + type: boolean + example: false + code: + type: integer + example: COMMON000 + message: + type: string + example: 서버 에러, 관리자에게 문의 바랍니다. \ No newline at end of file diff --git a/src/swagger/signup.swagger.yaml b/src/swagger/signup.swagger.yaml index 127de4a..4ee9290 100644 --- a/src/swagger/signup.swagger.yaml +++ b/src/swagger/signup.swagger.yaml @@ -4,24 +4,29 @@ paths: tags: - Signup summary: 회원가입 - parameters: - - name: signup - in: body + requestBody: required: true - schema: - properties: - user_id: - type: string - description: 유저 아이디 - example: swaggerTest - password: - type: string - description: 유저 비밀번호 - example: 1234567 - email: - type: string - description: 유저 이메일 - example: swaggerTest@naver.com + content: + application/json: + schema: + type: object + properties: + user_id: + type: string + description: 유저 아이디 + example: swaggerTest + password: + type: string + description: 유저 비밀번호 + example: 1234567 + email: + type: string + description: 유저 이메일 + example: swaggerTest@naver.com + required: + - user_id + - password + - email responses: '200': description: 회원 가입 성공! diff --git a/src/swagger/swagger.config.js b/src/swagger/swagger.config.js index 5f7d74c..3e9d4cd 100644 --- a/src/swagger/swagger.config.js +++ b/src/swagger/swagger.config.js @@ -9,9 +9,10 @@ const __dirname = path.dirname(__filename); // 현재 작업 디렉토리의 경로를 기준으로 설정 const options = { definition: { + openapi: "3.0.0", info: { title: '핏플 API', - version: '0.0.1', + version: '1.0.0', description: '핏플 API with express, API 설명' }, servers: [ @@ -19,7 +20,21 @@ const options = { url: 'http://localhost:3000/', description: 'Local server' } - ] + ], + components: { + securitySchemes: { + bearerAuth: { + type: 'http', + scheme: 'bearer', + bearerFormat: 'JWT', + }, + }, + }, + security: [ + { + bearerAuth: [] + } + ], }, apis: [path.join(__dirname, '../src/routes/*.js'), path.join(__dirname, './*.swagger.yaml')] }; diff --git a/src/swagger/uploadsize.swagger.yaml b/src/swagger/uploadsize.swagger.yaml new file mode 100644 index 0000000..9572f2d --- /dev/null +++ b/src/swagger/uploadsize.swagger.yaml @@ -0,0 +1,118 @@ +paths: + /FITple/uploadsize: + post: + tags: + - CompareSize + summary: 사이즈 이미지 업로드 + description: 사이즈 이미지를 서버에 업로드합니다. + consumes: + - multipart/form-data + parameters: + - name: file + in: formData + required: true + type: file + description: 업로드할 이미지 파일 + responses: + '200': + description: 이미지 업로드 성공 + schema: + type: object + properties: + isSuccess: + type: boolean + example: true + code: + type: string + example: "2000" + message: + type: string + example: "이미지 업로드 성공" + imageUrl: + type: object + properties: + imagePath: + type: string + example: "private/uploads/1723129674820-무신사1.png" + imageId: + type: integer + example: 1 + '400': + description: 잘못된 요청 + schema: + type: object + properties: + isSuccess: + type: boolean + example: false + code: + type: string + example: "400" + message: + type: string + example: "잘못된 요청입니다." + '401': + description: 인증 오류 + schema: + type: object + properties: + isSuccess: + type: boolean + example: false + code: + type: string + example: "401" + message: + type: string + example: "인증 정보가 올바르지 않습니다." + '402': + description: 비어있는 데이터 + schema: + type: object + properties: + isSuccess: + type: boolean + example: false + code: + type: string + example: "402" + message: + type: string + example: "데이터가 비어있습니다." + '403': + description: 이미지 업로드 중 오류 + schema: + type: object + properties: + isSuccess: + type: boolean + example: false + code: + type: string + example: "403" + message: + type: string + example: "이미지 업로드 중 오류" + '500': + description: 서버 에러 + schema: + type: object + properties: + isSuccess: + type: boolean + example: false + code: + type: string + example: "500" + message: + type: string + example: "서버 에러, 관리자에게 문의 바랍니다." + + x-postman-collection: + description: | + 파일 업로드 테스트 방법: + - POST 메서드 선택. + - URL 입력 (예: http://localhost:3000/FITple/uploadsize). + - Body -> form-data 선택. + - Key에 user_id, password, email, file 입력 (위에서 설정한 것과 일치해야 함). + - 파일 선택 후 Send 클릭.