From 2ab1c1590eaf7ec5ddac7d94da648c72a3ebadb0 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Fri, 27 Jan 2023 11:27:54 +0100 Subject: [PATCH 01/19] feat: display works --- FrontEnd/index.html | 47 +++------------------------------------------ FrontEnd/index.js | 13 +++++++++++++ 2 files changed, 16 insertions(+), 44 deletions(-) create mode 100644 FrontEnd/index.js diff --git a/FrontEnd/index.html b/FrontEnd/index.html index 3f4a16298..f84e06d2e 100644 --- a/FrontEnd/index.html +++ b/FrontEnd/index.html @@ -9,6 +9,7 @@ +
@@ -37,50 +38,7 @@

Designer d'espace

Mes Projets

@@ -105,5 +63,6 @@

Contact

+ diff --git a/FrontEnd/index.js b/FrontEnd/index.js new file mode 100644 index 000000000..5317db76d --- /dev/null +++ b/FrontEnd/index.js @@ -0,0 +1,13 @@ +async function getWorks () { + const reponse = await fetch("http://localhost:5678/api/works"); + const data = await reponse.json(); + + for(let work of data) { + document.querySelector(".gallery").innerHTML += `
+ Hotel First Arte - New Delhi +
${work.title}
+
` + } +} +getWorks (); + From e536b436fba366f525a05f7ba2c4b8688eee1985 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Fri, 27 Jan 2023 17:20:55 +0100 Subject: [PATCH 02/19] feat: filter button --- Backend/package-lock.json | 5496 +++++++++++++------------------------ Backend/package.json | 4 +- FrontEnd/assets/style.css | 25 + FrontEnd/index.html | 6 +- FrontEnd/index.js | 22 +- 5 files changed, 2020 insertions(+), 3533 deletions(-) diff --git a/Backend/package-lock.json b/Backend/package-lock.json index 3f8a11b02..521a54104 100644 --- a/Backend/package-lock.json +++ b/Backend/package-lock.json @@ -1,7 +1,7 @@ { "name": "dwf-projet6-backend", "version": "0.0.1", - "lockfileVersion": 2, + "lockfileVersion": 3, "requires": true, "packages": { "": { @@ -9,12 +9,14 @@ "version": "0.0.1", "license": "ISC", "dependencies": { + "@npmcli/fs": "^3.1.0", "bcrypt": "^5.0.1", "cors": "^2.8.5", "dotenv": "^16.0.0", "express": "^4.18.0", + "firebase-admin": "^11.5.0", "helmet": "^5.0.2", - "jsonwebtoken": "^8.5.1", + "jsonwebtoken": "^9.0.0", "multer": "^1.4.4", "sequelize": "^6.19.0", "sqlite3": "^5.0.5", @@ -25,16 +27,227 @@ "nodemon": "^2.0.15" } }, + "node_modules/@babel/parser": { + "version": "7.20.13", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.13.tgz", + "integrity": "sha512-gFDLKMfpiXCsjt4za2JA9oTMn70CeseCehb11kRZgvd7+F67Hih3OHOK24cRrWECJ/ljfPGac6ygXAs/C8kIvw==", + "optional": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@fastify/busboy": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-1.2.1.tgz", + "integrity": "sha512-7PQA7EH43S0CxcOa9OeAnaeA0oQ+e/DHNPZwSQM9CQHW76jle5+OvLdibRp/Aafs9KXbLhxyjOTkRjWUbQEd3Q==", + "dependencies": { + "text-decoding": "^1.0.0" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@firebase/app-types": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@firebase/app-types/-/app-types-0.9.0.tgz", + "integrity": "sha512-AeweANOIo0Mb8GiYm3xhTEBVCmPwTYAu9Hcd2qSkLuga/6+j9b1Jskl5bpiSQWy9eJ/j5pavxj6eYogmnuzm+Q==" + }, + "node_modules/@firebase/auth-interop-types": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@firebase/auth-interop-types/-/auth-interop-types-0.2.1.tgz", + "integrity": "sha512-VOaGzKp65MY6P5FI84TfYKBXEPi6LmOCSMMzys6o2BN2LOsqy7pCuZCup7NYnfbk5OkkQKzvIfHOzTm0UDpkyg==" + }, + "node_modules/@firebase/component": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/@firebase/component/-/component-0.6.1.tgz", + "integrity": "sha512-yvKthG0InjFx9aOPnh6gk0lVNfNVEtyq3LwXgZr+hOwD0x/CtXq33XCpqv0sQj5CA4FdMy8OO+y9edI+ZUw8LA==", + "dependencies": { + "@firebase/util": "1.9.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/@firebase/database/-/database-0.14.1.tgz", + "integrity": "sha512-iX6/p7hoxUMbYAGZD+D97L05xQgpkslF2+uJLZl46EdaEfjVMEwAdy7RS/grF96kcFZFg502LwPYTXoIdrZqOA==", + "dependencies": { + "@firebase/auth-interop-types": "0.2.1", + "@firebase/component": "0.6.1", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.0", + "faye-websocket": "0.11.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-compat": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@firebase/database-compat/-/database-compat-0.3.1.tgz", + "integrity": "sha512-sI7LNh0C8PCq9uUKjrBKLbZvqHTSjsf2LeZRxin+rHVegomjsOAYk9OzYwxETWh3URhpMkCM8KcTl7RVwAldog==", + "dependencies": { + "@firebase/component": "0.6.1", + "@firebase/database": "0.14.1", + "@firebase/database-types": "0.10.1", + "@firebase/logger": "0.4.0", + "@firebase/util": "1.9.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/database-types": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@firebase/database-types/-/database-types-0.10.1.tgz", + "integrity": "sha512-UgUx9VakTHbP2WrVUdYrUT2ofTFVfWjGW2O1fwuvvMyo6WSnuSyO5nB1u0cyoMPvO25dfMIUVerfK7qFfwGL3Q==", + "dependencies": { + "@firebase/app-types": "0.9.0", + "@firebase/util": "1.9.0" + } + }, + "node_modules/@firebase/logger": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@firebase/logger/-/logger-0.4.0.tgz", + "integrity": "sha512-eRKSeykumZ5+cJPdxxJRgAC3G5NknY2GwEbKfymdnXtnT0Ucm4pspfR6GT4MUQEDuJwRVbVcSx85kgJulMoFFA==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@firebase/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@firebase/util/-/util-1.9.0.tgz", + "integrity": "sha512-oeoq/6Sr9btbwUQs5HPfeww97bf7qgBbkknbDTXpRaph2LZ23O9XLCE5tJy856SBmGQfO4xBZP8dyryLLM2nSQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, "node_modules/@gar/promisify": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", "optional": true }, + "node_modules/@google-cloud/firestore": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/@google-cloud/firestore/-/firestore-6.4.2.tgz", + "integrity": "sha512-f7xFwINJveaqTFcgy0G4o2CBPm0Gv9lTGQ4dQt+7skwaHs3ytdue9ma8oQZYXKNoWcAoDIMQ929Dk0KOIocxFg==", + "optional": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "functional-red-black-tree": "^1.0.1", + "google-gax": "^3.5.2", + "protobufjs": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/paginator": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@google-cloud/paginator/-/paginator-3.0.7.tgz", + "integrity": "sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==", + "optional": true, + "dependencies": { + "arrify": "^2.0.0", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@google-cloud/projectify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@google-cloud/projectify/-/projectify-3.0.0.tgz", + "integrity": "sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==", + "optional": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@google-cloud/promisify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/promisify/-/promisify-3.0.1.tgz", + "integrity": "sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==", + "optional": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/storage": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-6.9.1.tgz", + "integrity": "sha512-mhbRfrDgV7qM8HGn12p3dpT87Azt94s9YRzr8qR+o/ptksAkCApspzlNS2mUEeoXUMmnpwcdF2GGNpd4+6NuVw==", + "optional": true, + "dependencies": { + "@google-cloud/paginator": "^3.0.7", + "@google-cloud/projectify": "^3.0.0", + "@google-cloud/promisify": "^3.0.0", + "abort-controller": "^3.0.0", + "async-retry": "^1.3.3", + "compressible": "^2.0.12", + "duplexify": "^4.0.0", + "ent": "^2.2.0", + "extend": "^3.0.2", + "gaxios": "^5.0.0", + "google-auth-library": "^8.0.1", + "mime": "^3.0.0", + "mime-types": "^2.0.8", + "p-limit": "^3.0.1", + "retry-request": "^5.0.0", + "teeny-request": "^8.0.0", + "uuid": "^8.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@google-cloud/storage/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@grpc/grpc-js": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.7.3.tgz", + "integrity": "sha512-H9l79u4kJ2PVSxUNA08HMYAnUBLj9v6KjYQ7SQ71hOZcEXhShE/y5iQCesP8+6/Ik/7i2O0a10bPquIcYfufog==", + "optional": true, + "dependencies": { + "@grpc/proto-loader": "^0.7.0", + "@types/node": ">=12.12.47" + }, + "engines": { + "node": "^8.13.0 || >=10.10.0" + } + }, + "node_modules/@grpc/proto-loader": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/@grpc/proto-loader/-/proto-loader-0.7.4.tgz", + "integrity": "sha512-MnWjkGwqQ3W8fx94/c1CwqLsNmHHv2t0CFn+9++6+cDphC1lolpg9M2OU0iebIjK//pBNX9e94ho+gjx6vz39w==", + "optional": true, + "dependencies": { + "@types/long": "^4.0.1", + "lodash.camelcase": "^4.3.0", + "long": "^4.0.0", + "protobufjs": "^7.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "proto-loader-gen-types": "build/bin/proto-loader-gen-types.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@mapbox/node-pre-gyp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", - "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", "dependencies": { "detect-libc": "^2.0.0", "https-proxy-agent": "^5.0.0", @@ -51,19 +264,21 @@ } }, "node_modules/@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", - "optional": true, + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", "dependencies": { - "@gar/promisify": "^1.0.1", "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/@npmcli/move-file": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "deprecated": "This functionality has been moved to @npmcli/fs", "optional": true, "dependencies": { "mkdirp": "^1.0.4", @@ -73,27 +288,82 @@ "node": ">=10" } }, - "node_modules/@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/@szmarczak/http-timer": { + "node_modules/@protobufjs/aspromise": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==", + "optional": true + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==", + "optional": true + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==", + "optional": true + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==", + "optional": true + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "optional": true, "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==", + "optional": true + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==", + "optional": true + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==", + "optional": true + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==", + "optional": true + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==", + "optional": true + }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -103,6 +373,23 @@ "node": ">= 6" } }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -111,26 +398,119 @@ "@types/ms": "*" } }, + "node_modules/@types/express": { + "version": "4.17.16", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.16.tgz", + "integrity": "sha512-LkKpqRZ7zqXJuvoELakaFYuETHjZkSol8EV6cNnyishutDBCCdv6+dsKPbKkCcIk57qRphOLY5sEgClw1bO3gA==", + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.31", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.33", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.33.tgz", + "integrity": "sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==", + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*" + } + }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.2.tgz", + "integrity": "sha512-HZQYqbiFVWufzCwexrvh694SOim8z2d+xJl5UNamcvQFejLY/2YUtzXHYi3cHdI7PMlS8ejH2slRAOJQ32aNbA==", + "optional": true + }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==", + "optional": true + }, + "node_modules/@types/markdown-it": { + "version": "12.2.3", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz", + "integrity": "sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==", + "optional": true, + "dependencies": { + "@types/linkify-it": "*", + "@types/mdurl": "*" + } + }, + "node_modules/@types/mdurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", + "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==", + "optional": true + }, + "node_modules/@types/mime": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", + "integrity": "sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==" + }, "node_modules/@types/ms": { "version": "0.7.31", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" }, "node_modules/@types/node": { - "version": "17.0.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.27.tgz", - "integrity": "sha512-4/Ke7bbWOasuT3kceBZFGakP1dYN2XFd8v2l9bqF2LNWrmeU07JLpp56aEeG6+Q3olqO5TvXpW0yaiYnZJ5CXg==" + "version": "18.11.18", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==" + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==" + }, + "node_modules/@types/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==", + "dependencies": { + "@types/mime": "*", + "@types/node": "*" + } }, "node_modules/@types/validator": { - "version": "13.7.2", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.2.tgz", - "integrity": "sha512-KFcchQ3h0OPQgFirBRPZr5F/sVjxZsOrQHedj3zi8AH3Zv/hOLx2OLR4hxR5HcfoU+33n69ZuOfzthKVdMoTiw==" + "version": "13.7.11", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.11.tgz", + "integrity": "sha512-WqTos+CnAKN64YwyBMhgUYhb5VsTNKwUY6AuzG5qu9/pFZJar/RJFMZBXwX7VS+uzYi+lIAr3WkvuWqEI9F2eg==" }, "node_modules/abbrev": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "optional": true, + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -143,6 +523,27 @@ "node": ">= 0.6" } }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "optional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "optional": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -209,7 +610,7 @@ "node_modules/agentkeepalive/node_modules/depd": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", "optional": true, "engines": { "node": ">= 0.6" @@ -234,15 +635,6 @@ "node": ">=8" } }, - "node_modules/ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "dependencies": { - "string-width": "^4.1.0" - } - }, "node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -255,7 +647,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, + "optional": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -267,9 +659,9 @@ } }, "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", "dev": true, "dependencies": { "normalize-path": "^3.0.0", @@ -282,7 +674,7 @@ "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" + "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" }, "node_modules/aproba": { "version": "2.0.0", @@ -301,6 +693,27 @@ "node": ">=10" } }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/are-we-there-yet/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -312,44 +725,101 @@ "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" }, - "node_modules/bcrypt": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", - "integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==", - "hasInstallScript": true, - "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.0", - "node-addon-api": "^3.1.0" - }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "optional": true, "engines": { - "node": ">= 10.0.0" + "node": ">=8" } }, - "node_modules/bcrypt/node_modules/node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + "node_modules/async-retry": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/async-retry/-/async-retry-1.3.3.tgz", + "integrity": "sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==", + "optional": true, + "dependencies": { + "retry": "0.13.1" + } }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, + "node_modules/async-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "optional": true, "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "optional": true + }, + "node_modules/bcrypt": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", + "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.10", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "optional": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "optional": true + }, + "node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -359,7 +829,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.10.3", + "qs": "6.11.0", "raw-body": "2.5.1", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -369,28 +839,6 @@ "npm": "1.2.8000 || >= 1.4.16" } }, - "node_modules/boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "dependencies": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -415,7 +863,7 @@ "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": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" }, "node_modules/buffer-from": { "version": "1.1.2", @@ -425,7 +873,7 @@ "node_modules/busboy": { "version": "0.2.14", "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", + "integrity": "sha512-InWFDomvlkEj+xWLBfU3AvnbVYqeTWmQopiW0tWWEy5yehYm2YkGEc59sUmw/4ty5Zj/b0WHGs1LgecuBSBGrg==", "dependencies": { "dicer": "0.2.5", "readable-stream": "1.1.x" @@ -434,22 +882,6 @@ "node": ">=0.8.0" } }, - "node_modules/busboy/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/busboy/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, "node_modules/bytes": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", @@ -487,46 +919,26 @@ "node": ">= 10" } }, - "node_modules/cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, + "node_modules/cacache/node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "optional": true, "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "engines": { - "node": ">=8" + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" } }, - "node_modules/cacheable-request/node_modules/get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=8" + "node_modules/cacache/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cacheable-request/node_modules/lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/call-bind": { @@ -541,23 +953,23 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "optional": true, + "dependencies": { + "lodash": "^4.17.15" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 10" } }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, + "optional": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -573,7 +985,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, + "optional": true, "engines": { "node": ">=8" } @@ -582,7 +994,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, + "optional": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -625,12 +1037,6 @@ "node": ">=10" } }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, "node_modules/clean-stack": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", @@ -640,32 +1046,22 @@ "node": ">=6" } }, - "node_modules/cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, + "node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "optional": true, "dependencies": { - "mimic-response": "^1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, + "optional": true, "dependencies": { "color-name": "~1.1.4" }, @@ -677,7 +1073,7 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "optional": true }, "node_modules/color-support": { "version": "1.1.3", @@ -687,10 +1083,22 @@ "color-support": "bin.js" } }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "optional": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -709,7 +1117,7 @@ "node_modules/concat-stream/node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" }, "node_modules/concat-stream/node_modules/readable-stream": { "version": "2.3.7", @@ -738,27 +1146,10 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "dependencies": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" }, "node_modules/content-disposition": { "version": "0.5.4", @@ -790,7 +1181,7 @@ "node_modules/cookie-signature": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" }, "node_modules/core-util-is": { "version": "1.0.3", @@ -809,15 +1200,6 @@ "node": ">= 0.10" } }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/debug": { "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", @@ -826,37 +1208,16 @@ "ms": "2.0.0" } }, - "node_modules/decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "optional": true }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, "node_modules/depd": { "version": "2.0.0", @@ -886,7 +1247,7 @@ "node_modules/dicer": { "version": "0.2.5", "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", + "integrity": "sha512-FDvbtnq7dzlPz0wyYlOExifDEZcu8h+rErEXgfxqmLfRfC/kJidEFh4+effJRO3P0xmfqyPbSMG0LveNRfTKVg==", "dependencies": { "readable-stream": "1.1.x", "streamsearch": "0.1.2" @@ -895,38 +1256,10 @@ "node": ">=0.8.0" } }, - "node_modules/dicer/node_modules/readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/dicer/node_modules/string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - }, - "node_modules/dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/dotenv": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", - "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==", + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", "engines": { "node": ">=12" } @@ -936,11 +1269,40 @@ "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true + "node_modules/duplexify": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.2.tgz", + "integrity": "sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==", + "optional": true, + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.0" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } }, "node_modules/ecdsa-sig-formatter": { "version": "1.0.11", @@ -953,7 +1315,7 @@ "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/emoji-regex": { "version": "8.0.0", @@ -963,7 +1325,7 @@ "node_modules/encodeurl": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", "engines": { "node": ">= 0.8" } @@ -993,11 +1355,26 @@ "version": "1.4.4", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, + "optional": true, "dependencies": { "once": "^1.4.0" } }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "optional": true + }, + "node_modules/entities": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz", + "integrity": "sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w==", + "optional": true, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/env-paths": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", @@ -1013,43 +1390,149 @@ "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "optional": true }, - "node_modules/escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "optional": true, "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "optional": true, "engines": { - "node": ">= 0.6" + "node": ">=8" } }, - "node_modules/express": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", - "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", + "node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "optional": true, "dependencies": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/escodegen/node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "optional": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "optional": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/espree": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.1.tgz", + "integrity": "sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==", + "optional": true, + "dependencies": { + "acorn": "^8.8.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "optional": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "optional": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", "escape-html": "~1.0.3", "etag": "~1.8.1", "finalhandler": "1.2.0", @@ -1061,7 +1544,7 @@ "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", "proxy-addr": "~2.0.7", - "qs": "6.10.3", + "qs": "6.11.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", "send": "0.18.0", @@ -1076,6 +1559,41 @@ "node": ">= 0.10.0" } }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "optional": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "optional": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "optional": true + }, + "node_modules/fast-text-encoding": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz", + "integrity": "sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==", + "optional": true + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/fill-range": { "version": "7.0.1", "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", @@ -1105,6 +1623,36 @@ "node": ">= 0.8" } }, + "node_modules/firebase-admin": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/firebase-admin/-/firebase-admin-11.5.0.tgz", + "integrity": "sha512-bBdlYtNvXx8yZGdCd00NrfZl1o1A0aXOw5h8q5PwC8RXikOLNXq8vYtSKW44dj8zIaafVP6jFdcUXZem/LMsHA==", + "dependencies": { + "@fastify/busboy": "^1.1.0", + "@firebase/database-compat": "^0.3.0", + "@firebase/database-types": "^0.10.0", + "@types/node": ">=12.12.47", + "jsonwebtoken": "^9.0.0", + "jwks-rsa": "^3.0.1", + "node-forge": "^1.3.1", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "@google-cloud/firestore": "^6.4.0", + "@google-cloud/storage": "^6.5.2" + } + }, + "node_modules/firebase-admin/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/forwarded": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", @@ -1116,7 +1664,7 @@ "node_modules/fresh": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", "engines": { "node": ">= 0.6" } @@ -1135,7 +1683,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -1156,6 +1704,12 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", + "optional": true + }, "node_modules/gauge": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", @@ -1175,40 +1729,65 @@ "node": ">=10" } }, - "node_modules/get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "node_modules/gaxios": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.0.2.tgz", + "integrity": "sha512-TjtV2AJOZoMQqRYoy5eM8cCQogYwazWNYLQ72QB0kwa6vHHruYkGmhhyrlzbmgNHK1dNnuP2WSH81urfzyN2Og==", + "optional": true, "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" + "extend": "^3.0.2", + "https-proxy-agent": "^5.0.0", + "is-stream": "^2.0.0", + "node-fetch": "^2.6.7" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=12" } }, - "node_modules/get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, + "node_modules/gcp-metadata": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-5.2.0.tgz", + "integrity": "sha512-aFhhvvNycky2QyhG+dcfEdHBF0FRbYcf39s6WNHUDysKSrbJ5vuFbjydxBcmewtXeV248GP8dWT3ByPNxsyHCw==", + "optional": true, "dependencies": { - "pump": "^3.0.0" + "gaxios": "^5.0.0", + "json-bigint": "^1.0.0" }, "engines": { - "node": ">=6" + "node": ">=12" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "optional": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^3.0.4", + "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, @@ -1231,48 +1810,161 @@ "node": ">= 6" } }, - "node_modules/global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, + "node_modules/google-auth-library": { + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-8.7.0.tgz", + "integrity": "sha512-1M0NG5VDIvJZEnstHbRdckLZESoJwguinwN8Dhae0j2ZKIQFIV63zxm6Fo6nM4xkgqUr2bbMtV5Dgo+Hy6oo0Q==", + "optional": true, "dependencies": { - "ini": "2.0.0" + "arrify": "^2.0.0", + "base64-js": "^1.3.0", + "ecdsa-sig-formatter": "^1.0.11", + "fast-text-encoding": "^1.0.0", + "gaxios": "^5.0.0", + "gcp-metadata": "^5.0.0", + "gtoken": "^6.1.0", + "jws": "^4.0.0", + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" + } + }, + "node_modules/google-auth-library/node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "optional": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/google-auth-library/node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "optional": true, + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/google-gax": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-3.5.2.tgz", + "integrity": "sha512-AyP53w0gHcWlzxm+jSgqCR3Xu4Ld7EpSjhtNBnNhzwwWaIUyphH9kBGNIEH+i4UGkTUXOY29K/Re8EiAvkBRGw==", + "optional": true, + "dependencies": { + "@grpc/grpc-js": "~1.7.0", + "@grpc/proto-loader": "^0.7.0", + "@types/long": "^4.0.0", + "abort-controller": "^3.0.0", + "duplexify": "^4.0.0", + "fast-text-encoding": "^1.0.3", + "google-auth-library": "^8.0.2", + "is-stream-ended": "^0.1.4", + "node-fetch": "^2.6.1", + "object-hash": "^3.0.0", + "proto3-json-serializer": "^1.0.0", + "protobufjs": "7.1.2", + "protobufjs-cli": "1.0.2", + "retry-request": "^5.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "compileProtos": "build/tools/compileProtos.js", + "minifyProtoJson": "build/tools/minify.js" + }, + "engines": { + "node": ">=12" } }, - "node_modules/got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, + "node_modules/google-gax/node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==", + "optional": true + }, + "node_modules/google-gax/node_modules/protobufjs": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.1.2.tgz", + "integrity": "sha512-4ZPTPkXCdel3+L81yw3dG6+Kq3umdWKh7Dc7GW/CpNk4SX3hK58iPCWeCyhVTDrbkNeKrYNZ7EojM5WDaEWTLQ==", + "hasInstallScript": true, + "optional": true, "dependencies": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, "engines": { - "node": ">=8.6" + "node": ">=12.0.0" + } + }, + "node_modules/google-p12-pem": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/google-p12-pem/-/google-p12-pem-4.0.1.tgz", + "integrity": "sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ==", + "optional": true, + "dependencies": { + "node-forge": "^1.3.1" + }, + "bin": { + "gp12-pem": "build/src/bin/gp12-pem.js" + }, + "engines": { + "node": ">=12.0.0" } }, "node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "devOptional": true + "optional": true + }, + "node_modules/gtoken": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/gtoken/-/gtoken-6.1.2.tgz", + "integrity": "sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ==", + "optional": true, + "dependencies": { + "gaxios": "^5.0.1", + "google-p12-pem": "^4.0.0", + "jws": "^4.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/gtoken/node_modules/jwa": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-2.0.0.tgz", + "integrity": "sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==", + "optional": true, + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/gtoken/node_modules/jws": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jws/-/jws-4.0.0.tgz", + "integrity": "sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==", + "optional": true, + "dependencies": { + "jwa": "^2.0.0", + "safe-buffer": "^5.0.1" + } }, "node_modules/has": { "version": "1.0.3", @@ -1288,7 +1980,7 @@ "node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, "engines": { "node": ">=4" @@ -1308,21 +2000,12 @@ "node_modules/has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "node_modules/has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true, - "engines": { - "node": ">=8" - } + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" }, "node_modules/helmet": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.0.2.tgz", - "integrity": "sha512-QWlwUZZ8BtlvwYVTSDTBChGf8EOcQ2LkGMnQJxSzD1mUu8CCjXJZq/BXP8eWw4kikRnzlhtYo3lCk0ucmYA3Vg==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.1.1.tgz", + "integrity": "sha512-/yX0oVZBggA9cLJh8aw3PPCfedBnbd7J2aowjzsaWwZh7/UFY0nccn/aHAggIgWUFfnykX8GKd3a1pSbrmlcVQ==", "engines": { "node": ">=12.0.0" } @@ -1331,7 +2014,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "devOptional": true + "optional": true }, "node_modules/http-errors": { "version": "2.0.0", @@ -1348,6 +2031,11 @@ "node": ">= 0.8" } }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==" + }, "node_modules/http-proxy-agent": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", @@ -1421,7 +2109,7 @@ "node_modules/humanize-ms": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "optional": true, "dependencies": { "ms": "^2.0.0" @@ -1441,23 +2129,14 @@ "node_modules/ignore-by-default": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", "dev": true }, - "node_modules/import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "devOptional": true, + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "optional": true, "engines": { "node": ">=0.8.19" } @@ -1478,9 +2157,9 @@ "optional": true }, "node_modules/inflection": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", - "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==", + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz", + "integrity": "sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==", "engines": [ "node >= 0.4.0" ] @@ -1488,7 +2167,7 @@ "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -1499,19 +2178,10 @@ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" }, - "node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "node_modules/ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", "optional": true }, "node_modules/ipaddr.js": { @@ -1534,22 +2204,10 @@ "node": ">=8" } }, - "node_modules/is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, "engines": { "node": ">=0.10.0" @@ -1575,40 +2233,12 @@ "node": ">=0.10.0" } }, - "node_modules/is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "dependencies": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-lambda": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", "optional": true }, - "node_modules/is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -1618,72 +2248,115 @@ "node": ">=0.12.0" } }, - "node_modules/is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "optional": true, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "node_modules/is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true + "node_modules/is-stream-ended": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-stream-ended/-/is-stream-ended-0.1.4.tgz", + "integrity": "sha512-xj0XPvmr7bQFTvirqnFr50o0hQIh6ZItDqloxt5aJrR4NQsYeSsyFQERYGCAzfindAcnKjINnwEEgLx4IqVzQw==", + "optional": true }, "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "optional": true }, - "node_modules/json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true + "node_modules/jose": { + "version": "4.11.2", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.11.2.tgz", + "integrity": "sha512-njj0VL2TsIxCtgzhO+9RRobBvws4oYyCM8TpvoUQwl/MbIM3NFJRR9+e6x0sS5xXaP1t6OCBkaBME98OV9zU5A==", + "funding": { + "url": "https://github.com/sponsors/panva" + } + }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "optional": true, + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsdoc": { + "version": "3.6.11", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.11.tgz", + "integrity": "sha512-8UCU0TYeIYD9KeLzEcAu2q8N/mx9O3phAGl32nmHlE0LpaJL71mMkP4d+QE5zWfNt50qheHtOZ0qoxVrsX5TUg==", + "optional": true, + "dependencies": { + "@babel/parser": "^7.9.4", + "@types/markdown-it": "^12.2.3", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "taffydb": "2.6.2", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsdoc/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "optional": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/json-bigint": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", + "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", + "optional": true, + "dependencies": { + "bignumber.js": "^9.0.0" + } }, "node_modules/jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", "dependencies": { "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", + "lodash": "^4.17.21", "ms": "^2.1.1", - "semver": "^5.6.0" + "semver": "^7.3.8" }, "engines": { - "node": ">=4", - "npm": ">=1.4.28" + "node": ">=12", + "npm": ">=6" } }, "node_modules/jsonwebtoken/node_modules/ms": { @@ -1691,14 +2364,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/jsonwebtoken/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "bin": { - "semver": "bin/semver" - } - }, "node_modules/jwa": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", @@ -1709,6 +2374,43 @@ "safe-buffer": "^5.0.1" } }, + "node_modules/jwks-rsa": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/jwks-rsa/-/jwks-rsa-3.0.1.tgz", + "integrity": "sha512-UUOZ0CVReK1QVU3rbi9bC7N5/le8ziUj0A2ef1Q0M7OPD2KvjEYizptqIxGIo6fSLYDkqBrazILS18tYuRc8gw==", + "dependencies": { + "@types/express": "^4.17.14", + "@types/jsonwebtoken": "^9.0.0", + "debug": "^4.3.4", + "jose": "^4.10.4", + "limiter": "^1.1.5", + "lru-memoizer": "^2.1.4" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/jwks-rsa/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/jwks-rsa/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, "node_modules/jws": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", @@ -1718,25 +2420,40 @@ "safe-buffer": "^5.0.1" } }, - "node_modules/keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "optional": true, "dependencies": { - "json-buffer": "3.0.0" + "graceful-fs": "^4.1.9" } }, - "node_modules/latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "optional": true, "dependencies": { - "package-json": "^6.3.0" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" }, "engines": { - "node": ">=8" + "node": ">= 0.8.0" + } + }, + "node_modules/limiter": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/limiter/-/limiter-1.1.5.tgz", + "integrity": "sha512-FWWMIEOxz3GwUI4Ts/IvgVy6LPvoMPgjMdQ185nN6psJyBJ4yOpzqm695/h5umdLJg2vW3GR5iG11MAkR2AzJA==" + }, + "node_modules/linkify-it": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz", + "integrity": "sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ==", + "optional": true, + "dependencies": { + "uc.micro": "^1.0.1" } }, "node_modules/lodash": { @@ -1744,49 +2461,22 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, - "node_modules/lodash.includes": { + "node_modules/lodash.camelcase": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "node_modules/lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "node_modules/lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "node_modules/lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "node_modules/lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "optional": true }, - "node_modules/lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==" }, - "node_modules/lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==", + "optional": true }, "node_modules/lru-cache": { "version": "6.0.0", @@ -1799,6 +2489,29 @@ "node": ">=10" } }, + "node_modules/lru-memoizer": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/lru-memoizer/-/lru-memoizer-2.1.4.tgz", + "integrity": "sha512-IXAq50s4qwrOBrXJklY+KhgZF+5y98PDaNo0gi/v2KQBFLyWr+JyFvijZXkGKjQj/h9c0OwoE+JZbwUXce76hQ==", + "dependencies": { + "lodash.clonedeep": "^4.5.0", + "lru-cache": "~4.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/lru-cache": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz", + "integrity": "sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==", + "dependencies": { + "pseudomap": "^1.0.1", + "yallist": "^2.0.0" + } + }, + "node_modules/lru-memoizer/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==" + }, "node_modules/make-dir": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", @@ -1848,10 +2561,60 @@ "node": ">= 10" } }, + "node_modules/markdown-it": { + "version": "12.3.2", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz", + "integrity": "sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg==", + "optional": true, + "dependencies": { + "argparse": "^2.0.1", + "entities": "~2.1.0", + "linkify-it": "^3.0.1", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "bin": { + "markdown-it": "bin/markdown-it.js" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.6", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.6.tgz", + "integrity": "sha512-jRW30YGywD2ESXDc+l17AiritL0uVaSnWsb26f+68qaW9zgbIIr1f4v2Nsvc0+s0Z2N3uX6t/yAw7BwCQ1wMsA==", + "optional": true, + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/markdown-it/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "optional": true + }, + "node_modules/marked": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.2.12.tgz", + "integrity": "sha512-yr8hSKa3Fv4D3jdZmtMMPghgVt6TWbk86WQaWhDloQjRSQhMMYCAro7jP7VDJrjjdV8pxVxMssXS8B8Y5DZ5aw==", + "optional": true, + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==", + "optional": true + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", "engines": { "node": ">= 0.6" } @@ -1859,12 +2622,12 @@ "node_modules/merge-descriptors": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" }, "node_modules/methods": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", "engines": { "node": ">= 0.6" } @@ -1899,15 +2662,6 @@ "node": ">= 0.6" } }, - "node_modules/mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -1920,14 +2674,17 @@ } }, "node_modules/minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", + "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dependencies": { "yallist": "^4.0.0" }, @@ -2013,28 +2770,28 @@ } }, "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, "bin": { "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" } }, "node_modules/moment": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==", + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", "engines": { "node": "*" } }, "node_modules/moment-timezone": { - "version": "0.5.34", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", - "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", + "version": "0.5.40", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.40.tgz", + "integrity": "sha512-tWfmNkRYmBkPJz5mr9GVDn9vRlVZOTe6yqY92rFxiOdWXbjaR0+9LwQnZGGuNR63X456NqmEkbskte8tWL5ePg==", "dependencies": { "moment": ">= 2.9.0" }, @@ -2045,12 +2802,13 @@ "node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, "node_modules/multer": { "version": "1.4.4", "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", + "deprecated": "Multer 1.x is affected by CVE-2022-24434. This is fixed in v1.4.4-lts.1 which drops support for versions of Node.js before 6. Please upgrade to at least Node.js 6 and version 1.4.4-lts.1 of Multer. If you need support for older versions of Node.js, we are open to accepting patches that would fix the CVE on the main 1.x release line, whilst maintaining compatibility with Node.js 0.10.", "dependencies": { "append-field": "^1.0.0", "busboy": "^0.2.11", @@ -2065,17 +2823,6 @@ "node": ">= 0.10.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==", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -2085,14 +2832,14 @@ } }, "node_modules/node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" }, "node_modules/node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "version": "2.6.8", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.8.tgz", + "integrity": "sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -2108,6 +2855,14 @@ } } }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "engines": { + "node": ">= 6.13.0" + } + }, "node_modules/node-gyp": { "version": "8.4.1", "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", @@ -2133,16 +2888,16 @@ } }, "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "optional": true, "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/node-gyp/node_modules/gauge": { @@ -2179,23 +2934,45 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/node-gyp/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "optional": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/node-gyp/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "optional": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, "node_modules/nodemon": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", - "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.20.tgz", + "integrity": "sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==", "dev": true, - "hasInstallScript": true, "dependencies": { "chokidar": "^3.5.2", "debug": "^3.2.7", "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", + "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", "supports-color": "^5.5.0", "touch": "^3.1.0", - "undefsafe": "^2.0.5", - "update-notifier": "^5.1.0" + "undefsafe": "^2.0.5" }, "bin": { "nodemon": "bin/nodemon.js" @@ -2255,15 +3032,6 @@ "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", @@ -2278,15 +3046,24 @@ "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "optional": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==", + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -2305,18 +3082,41 @@ "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dependencies": { "wrappy": "1" } }, - "node_modules/p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "optional": true, + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, "engines": { - "node": ">=6" + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "optional": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-map": { @@ -2334,42 +3134,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", "engines": { - "node": ">=8" - } - }, - "node_modules/package-json/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "engines": { - "node": ">= 0.8" + "node": ">= 0.8" } }, "node_modules/path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "engines": { "node": ">=0.10.0" } @@ -2377,7 +3153,7 @@ "node_modules/path-to-regexp": { "version": "0.1.7", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" }, "node_modules/pg-connection-string": { "version": "2.5.0", @@ -2396,13 +3172,13 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "optional": true, "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, "node_modules/process-nextick-args": { @@ -2413,7 +3189,7 @@ "node_modules/promise-inflight": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", "optional": true }, "node_modules/promise-retry": { @@ -2429,6 +3205,116 @@ "node": ">=10" } }, + "node_modules/proto3-json-serializer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.0.tgz", + "integrity": "sha512-SjXwUWe/vANGs/mJJTbw5++7U67nwsymg7qsoPtw6GiXqw3kUy8ByojrlEdVE2efxAdKreX8WkDafxvYW95ZQg==", + "optional": true, + "dependencies": { + "protobufjs": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protobufjs": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.0.tgz", + "integrity": "sha512-hYCqTDuII4iJ4stZqiuGCSU8xxWl5JeXYpwARGtn/tWcKCAro6h3WQz+xpsNbXW0UYqpmTQFEyFWO0G0Kjt64g==", + "hasInstallScript": true, + "optional": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/protobufjs-cli": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/protobufjs-cli/-/protobufjs-cli-1.0.2.tgz", + "integrity": "sha512-cz9Pq9p/Zs7okc6avH20W7QuyjTclwJPgqXG11jNaulfS3nbVisID8rC+prfgq0gbZE0w9LBFd1OKFF03kgFzg==", + "optional": true, + "dependencies": { + "chalk": "^4.0.0", + "escodegen": "^1.13.0", + "espree": "^9.0.0", + "estraverse": "^5.1.0", + "glob": "^8.0.0", + "jsdoc": "^3.6.3", + "minimist": "^1.2.0", + "semver": "^7.1.2", + "tmp": "^0.2.1", + "uglify-js": "^3.7.7" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "protobufjs": "^7.0.0" + } + }, + "node_modules/protobufjs-cli/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "optional": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/protobufjs-cli/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "optional": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/protobufjs-cli/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "optional": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/protobufjs/node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==", + "optional": true + }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", @@ -2441,38 +3327,21 @@ "node": ">= 0.10" } }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==" + }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", "dev": true }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", "dependencies": { "side-channel": "^1.0.4" }, @@ -2505,38 +3374,15 @@ "node": ">= 0.8" } }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/rc/node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, "node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, "node_modules/readdirp": { @@ -2551,52 +3397,73 @@ "node": ">=8.10.0" } }, - "node_modules/registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "dependencies": { - "rc": "^1.2.8" - }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "optional": true, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "optional": true, "dependencies": { - "lowercase-keys": "^1.0.0" + "lodash": "^4.17.21" } }, "node_modules/retry": { "version": "0.12.0", "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "optional": true, "engines": { "node": ">= 4" } }, "node_modules/retry-as-promised": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-5.0.0.tgz", - "integrity": "sha512-6S+5LvtTl2ggBumk04hBo/4Uf6fRJUwIgunGZ7CYEBCeufGFW1Pu6ucUf/UskHeWOIsUcLOGLFXPig5tR5V1nA==" + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.3.tgz", + "integrity": "sha512-SEvMa4khHvpU/o6zgh7sK24qm6rxVgKnrSyzb5POeDvZx5N9Bf0s5sQsQ4Fl+HjRp0X+w2UzACGfUnXtx6cJ9Q==" + }, + "node_modules/retry-request": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-5.0.2.tgz", + "integrity": "sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==", + "optional": true, + "dependencies": { + "debug": "^4.1.1", + "extend": "^3.0.2" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/retry-request/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/retry-request/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true }, "node_modules/rimraf": { "version": "3.0.2", @@ -2637,9 +3504,9 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, "node_modules/semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", "dependencies": { "lru-cache": "^6.0.0" }, @@ -2650,27 +3517,6 @@ "node": ">=10" } }, - "node_modules/semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "dependencies": { - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/semver-diff/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/send": { "version": "0.18.0", "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", @@ -2700,9 +3546,9 @@ "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, "node_modules/sequelize": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.19.0.tgz", - "integrity": "sha512-B3oGIdpYBERDjRDm74h7Ky67f6ZLcmBXOA7HscYObiOSo4pD7VBc9mtm44wNV7unc0uk8I1d30nbZBTQCE377A==", + "version": "6.28.0", + "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.28.0.tgz", + "integrity": "sha512-+WHqvUQgTp19GLkt+gyQ+F6qg+FIEO2O5F9C0TOYV/PjZ2a/XwWvVkL1NCkS4VSIjVVvAUutiW6Wv9ofveGaVw==", "funding": [ { "type": "opencollective", @@ -2719,7 +3565,7 @@ "moment": "^2.29.1", "moment-timezone": "^0.5.34", "pg-connection-string": "^2.5.0", - "retry-as-promised": "^5.0.0", + "retry-as-promised": "^7.0.3", "semver": "^7.3.5", "sequelize-pool": "^7.1.0", "toposort-class": "^1.0.1", @@ -2740,6 +3586,9 @@ "mysql2": { "optional": true }, + "oracledb": { + "optional": true + }, "pg": { "optional": true }, @@ -2803,7 +3652,7 @@ "node_modules/set-blocking": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" }, "node_modules/setprototypeof": { "version": "1.2.0", @@ -2828,6 +3677,27 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/smart-buffer": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", @@ -2839,12 +3709,12 @@ } }, "node_modules/socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", "optional": true, "dependencies": { - "ip": "^1.1.5", + "ip": "^2.0.0", "smart-buffer": "^4.2.0" }, "engines": { @@ -2853,9 +3723,9 @@ } }, "node_modules/socks-proxy-agent": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", - "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", + "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", "optional": true, "dependencies": { "agent-base": "^6.0.2", @@ -2889,15 +3759,24 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", "optional": true }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, "node_modules/sqlite3": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.5.tgz", - "integrity": "sha512-ZZFOMW31IOMbUeSiL23TuWSjNyS7Z83EDJ80HJxCe78OZ+5BJT6IhAwAUnQgPsUl5z+Er0DGx7VjuTP7PKPNcg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.4.tgz", + "integrity": "sha512-i0UlWAzPlzX3B5XP2cYuhWQJsTtlMD6obOa1PgeEQ4DHEXUuyJkgv50I3isqZAP5oFc2T8OFvakmDh2W6I+YpA==", "hasInstallScript": true, "dependencies": { "@mapbox/node-pre-gyp": "^1.0.0", @@ -2916,6 +3795,11 @@ } } }, + "node_modules/sqlite3/node_modules/node-addon-api": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", + "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" + }, "node_modules/ssri": { "version": "8.0.1", "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", @@ -2936,21 +3820,33 @@ "node": ">= 0.8" } }, + "node_modules/stream-events": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stream-events/-/stream-events-1.0.5.tgz", + "integrity": "sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==", + "optional": true, + "dependencies": { + "stubs": "^3.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "optional": true + }, "node_modules/streamsearch": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=", + "integrity": "sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==", "engines": { "node": ">=0.8.0" } }, "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dependencies": { - "safe-buffer": "~5.2.0" - } + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==" }, "node_modules/string-width": { "version": "4.2.3", @@ -2977,14 +3873,23 @@ } }, "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true, + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "optional": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/stubs": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz", + "integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==", + "optional": true + }, "node_modules/supports-color": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", @@ -2998,16 +3903,16 @@ } }, "node_modules/swagger-ui-dist": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.11.0.tgz", - "integrity": "sha512-Jo4oq4Nc7LaTYuvyo1VY3z3OWmGZCzZon8s92auKqpIuVCJo3t1Qih+S+Ph8lS5+ZbvF2ugqWvXk83boXQux1w==" + "version": "4.15.5", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.15.5.tgz", + "integrity": "sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA==" }, "node_modules/swagger-ui-express": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.3.0.tgz", - "integrity": "sha512-jN46SEEe9EoXa3ZgZoKgnSF6z0w3tnM1yqhO4Y+Q4iZVc8JOQB960EZpIAz6rNROrDApVDwcMHR0mhlnc/5Omw==", + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.0.tgz", + "integrity": "sha512-ZxpQFp1JR2RF8Ar++CyJzEDdvufa08ujNUJgMVTMWPi86CuQeVdBtvaeO/ysrz6dJAYXf9kbVNhWD7JWocwqsA==", "dependencies": { - "swagger-ui-dist": ">=4.1.3" + "swagger-ui-dist": ">=4.11.0" }, "engines": { "node": ">= v0.10.32" @@ -3016,38 +3921,145 @@ "express": ">=4.0.0" } }, + "node_modules/taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha512-y3JaeRSplks6NYQuCOj3ZFMO3j60rTwbuKCvZxsAraGYH2epusatvZ0baZYA01WsGqJBq/Dl6vOrMUJqyMj8kA==", + "optional": true + }, "node_modules/tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", + "minipass": "^4.0.0", "minizlib": "^2.1.1", "mkdirp": "^1.0.3", "yallist": "^4.0.0" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true, - "engines": { - "node": ">=6" + "node": ">=10" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, + "node_modules/tar/node_modules/minipass": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.0.tgz", + "integrity": "sha512-g2Uuh2jEKoht+zvO6vJqXmYpflPqzRBT+Th2h01DKh5z7wbY/AZ2gCQ78cP70YoHPyFdY30YBV5WxgLOEwOykw==", "dependencies": { - "is-number": "^7.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/teeny-request": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/teeny-request/-/teeny-request-8.0.2.tgz", + "integrity": "sha512-34pe0a4zASseXZCKdeTiIZqSKA8ETHb1EwItZr01PAR3CLPojeAKgSjzeNS4373gi59hNulyDrPKEbh2zO9sCg==", + "optional": true, + "dependencies": { + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "node-fetch": "^2.6.1", + "stream-events": "^1.0.5", + "uuid": "^9.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/teeny-request/node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "optional": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/teeny-request/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "optional": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/teeny-request/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "optional": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/teeny-request/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "optional": true + }, + "node_modules/teeny-request/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "optional": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/text-decoding": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/text-decoding/-/text-decoding-1.0.0.tgz", + "integrity": "sha512-/0TJD42KDnVwKmDK6jj3xP7E2MG7SHAOG4tyTgyUCRPdHwvkquYNLEQltmdMa3owq3TkddCVcTsoctJI8VQNKA==" + }, + "node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "optional": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" }, "engines": { "node": ">=8.0" @@ -3064,7 +4076,7 @@ "node_modules/toposort-class": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" + "integrity": "sha512-OsLcGGbYF3rMjPUf8oKktyvCiUxSbqMMS39m33MAjLTC1DVIH6x3WSt63/M77ihI09+Sdfk1AXvfhCEeUmC7mg==" }, "node_modules/touch": { "version": "3.1.0", @@ -3081,7 +4093,7 @@ "node_modules/touch/node_modules/nopt": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", "dev": true, "dependencies": { "abbrev": "1" @@ -3096,18 +4108,23 @@ "node_modules/tr46": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" + "node_modules/tslib": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", + "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==" + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "optional": true, + "dependencies": { + "prelude-ls": "~1.1.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 0.8.0" } }, "node_modules/type-is": { @@ -3125,15 +4142,24 @@ "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "dependencies": { - "is-typedarray": "^1.0.0" + "node_modules/uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "optional": true + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/undefsafe": { @@ -3142,6 +4168,12 @@ "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", "dev": true }, + "node_modules/underscore": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", + "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==", + "optional": true + }, "node_modules/unique-filename": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", @@ -3160,75 +4192,23 @@ "imurmurhash": "^0.1.4" } }, - "node_modules/unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/unpipe": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", "engines": { "node": ">= 0.8" } }, - "node_modules/update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "dependencies": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/yeoman/update-notifier?sponsor=1" - } - }, - "node_modules/url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "dependencies": { - "prepend-http": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/util-deprecate": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/utils-merge": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", "engines": { "node": ">= 0.4.0" } @@ -3252,7 +4232,7 @@ "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", "engines": { "node": ">= 0.8" } @@ -3260,12 +4240,33 @@ "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "engines": { + "node": ">=0.8.0" + } }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -3294,18 +4295,6 @@ "string-width": "^1.0.2 || 2 || 3 || 4" } }, - "node_modules/widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wkx": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", @@ -3314,11 +4303,20 @@ "@types/node": "*" } }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, + "optional": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -3334,28 +4332,13 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true, - "engines": { - "node": ">=8" - } + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "optional": true }, "node_modules/xtend": { "version": "4.0.2", @@ -3365,6 +4348,15 @@ "node": ">=0.4" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "optional": true, + "engines": { + "node": ">=10" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", @@ -3382,2594 +4374,44 @@ "json2yaml": "bin/json2yaml", "yaml2json": "bin/yaml2json" } - } - }, - "dependencies": { - "@gar/promisify": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", - "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", - "optional": true - }, - "@mapbox/node-pre-gyp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.9.tgz", - "integrity": "sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==", - "requires": { - "detect-libc": "^2.0.0", - "https-proxy-agent": "^5.0.0", - "make-dir": "^3.1.0", - "node-fetch": "^2.6.7", - "nopt": "^5.0.0", - "npmlog": "^5.0.1", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.11" - } }, - "@npmcli/fs": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", - "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "optional": true, - "requires": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" } }, - "@npmcli/move-file": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", - "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "optional": true, - "requires": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - } - }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", - "dev": true - }, - "@szmarczak/http-timer": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", - "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", - "dev": true, - "requires": { - "defer-to-connect": "^1.0.1" - } - }, - "@tootallnate/once": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", - "optional": true - }, - "@types/debug": { - "version": "4.1.7", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", - "integrity": "sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==", - "requires": { - "@types/ms": "*" - } - }, - "@types/ms": { - "version": "0.7.31", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.31.tgz", - "integrity": "sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==" - }, - "@types/node": { - "version": "17.0.27", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.27.tgz", - "integrity": "sha512-4/Ke7bbWOasuT3kceBZFGakP1dYN2XFd8v2l9bqF2LNWrmeU07JLpp56aEeG6+Q3olqO5TvXpW0yaiYnZJ5CXg==" - }, - "@types/validator": { - "version": "13.7.2", - "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.2.tgz", - "integrity": "sha512-KFcchQ3h0OPQgFirBRPZr5F/sVjxZsOrQHedj3zi8AH3Zv/hOLx2OLR4hxR5HcfoU+33n69ZuOfzthKVdMoTiw==" - }, - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" - }, - "accepts": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", - "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", - "requires": { - "mime-types": "~2.1.34", - "negotiator": "0.6.3" - } - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "requires": { - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } + "engines": { + "node": ">=10" } }, - "agentkeepalive": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.2.1.tgz", - "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "optional": true, - "requires": { - "debug": "^4.1.0", - "depd": "^1.1.2", - "humanize-ms": "^1.2.1" + "engines": { + "node": ">=10" }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "optional": true, - "requires": { - "ms": "2.1.2" - } - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "optional": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true - } - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "optional": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ansi-align": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", - "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", - "dev": true, - "requires": { - "string-width": "^4.1.0" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" - }, - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "append-field": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", - "integrity": "sha1-HjRA6RXwsSA9I3SOeO3XubW0PlY=" - }, - "aproba": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", - "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" - }, - "are-we-there-yet": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", - "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "array-flatten": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", - "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" - }, - "bcrypt": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", - "integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==", - "requires": { - "@mapbox/node-pre-gyp": "^1.0.0", - "node-addon-api": "^3.1.0" - }, - "dependencies": { - "node-addon-api": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" - } - } - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "body-parser": { - "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", - "requires": { - "bytes": "3.1.2", - "content-type": "~1.0.4", - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.10.3", - "raw-body": "2.5.1", - "type-is": "~1.6.18", - "unpipe": "1.0.0" - } - }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "dev": true, - "requires": { - "ansi-align": "^3.0.0", - "camelcase": "^6.2.0", - "chalk": "^4.1.0", - "cli-boxes": "^2.2.1", - "string-width": "^4.2.2", - "type-fest": "^0.20.2", - "widest-line": "^3.1.0", - "wrap-ansi": "^7.0.0" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "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": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" - }, - "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==" - }, - "busboy": { - "version": "0.2.14", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-0.2.14.tgz", - "integrity": "sha1-bCpiLvz0fFe7vh4qnDetNseSVFM=", - "requires": { - "dicer": "0.2.5", - "readable-stream": "1.1.x" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" - }, - "cacache": { - "version": "15.3.0", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", - "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", - "optional": true, - "requires": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" - } - }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "dev": true, - "requires": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^3.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^4.1.0", - "responselike": "^1.0.2" - }, - "dependencies": { - "get-stream": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", - "dev": true - } - } - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", - "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "optional": true - }, - "cli-boxes": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", - "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", - "dev": true - }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "color-support": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", - "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" - }, - "concat-stream": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", - "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", - "requires": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^2.2.2", - "typedarray": "^0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" - }, - "readable-stream": { - "version": "2.3.7", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", - "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", - "requires": { - "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" - } - }, - "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==" - }, - "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==", - "requires": { - "safe-buffer": "~5.1.0" - } - } - } - }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "dev": true, - "requires": { - "dot-prop": "^5.2.0", - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "unique-string": "^2.0.0", - "write-file-atomic": "^3.0.0", - "xdg-basedir": "^4.0.0" - } - }, - "console-control-strings": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" - }, - "content-disposition": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "requires": { - "safe-buffer": "5.2.1" - } - }, - "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" - }, - "cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==" - }, - "cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" - }, - "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==" - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "crypto-random-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", - "dev": true - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "requires": { - "ms": "2.0.0" - } - }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "dev": true, - "requires": { - "mimic-response": "^1.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "defer-to-connect": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", - "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", - "dev": true - }, - "delegates": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" - }, - "destroy": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" - }, - "detect-libc": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", - "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" - }, - "dicer": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/dicer/-/dicer-0.2.5.tgz", - "integrity": "sha1-WZbAhrszIYyBLAkL3cCc0S+stw8=", - "requires": { - "readable-stream": "1.1.x", - "streamsearch": "0.1.2" - }, - "dependencies": { - "readable-stream": { - "version": "1.1.14", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", - "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" - } - } - }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "dev": true, - "requires": { - "is-obj": "^2.0.0" - } - }, - "dotenv": { - "version": "16.0.0", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", - "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==" - }, - "dottie": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/dottie/-/dottie-2.0.2.tgz", - "integrity": "sha512-fmrwR04lsniq/uSr8yikThDTrM7epXHBAAjH9TbeH3rEA8tdCO7mRzB9hdmdGyJCxF8KERo9CITcm3kGuoyMhg==" - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", - "dev": true - }, - "ecdsa-sig-formatter": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", - "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" - }, - "encoding": { - "version": "0.1.13", - "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", - "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", - "optional": true, - "requires": { - "iconv-lite": "^0.6.2" - }, - "dependencies": { - "iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "optional": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - } - } - } - }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "optional": true - }, - "err-code": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", - "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", - "optional": true - }, - "escape-goat": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", - "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", - "dev": true - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" - }, - "express": { - "version": "4.18.0", - "resolved": "https://registry.npmjs.org/express/-/express-4.18.0.tgz", - "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", - "requires": { - "accepts": "~1.3.8", - "array-flatten": "1.1.1", - "body-parser": "1.20.0", - "content-disposition": "0.5.4", - "content-type": "~1.0.4", - "cookie": "0.5.0", - "cookie-signature": "1.0.6", - "debug": "2.6.9", - "depd": "2.0.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "finalhandler": "1.2.0", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", - "methods": "~1.1.2", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", - "proxy-addr": "~2.0.7", - "qs": "6.10.3", - "range-parser": "~1.2.1", - "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "type-is": "~1.6.18", - "utils-merge": "1.0.1", - "vary": "~1.1.2" - } - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", - "requires": { - "debug": "2.6.9", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "on-finished": "2.4.1", - "parseurl": "~1.3.3", - "statuses": "2.0.1", - "unpipe": "~1.0.0" - } - }, - "forwarded": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" - }, - "fs-minipass": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", - "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", - "requires": { - "minipass": "^3.0.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" - }, - "gauge": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", - "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" - } - }, - "get-intrinsic": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", - "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.1" - } - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "^3.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "global-dirs": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", - "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", - "dev": true, - "requires": { - "ini": "2.0.0" - } - }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "dev": true, - "requires": { - "@sindresorhus/is": "^0.14.0", - "@szmarczak/http-timer": "^1.1.2", - "cacheable-request": "^6.0.0", - "decompress-response": "^3.3.0", - "duplexer3": "^0.1.4", - "get-stream": "^4.1.0", - "lowercase-keys": "^1.0.1", - "mimic-response": "^1.0.1", - "p-cancelable": "^1.0.0", - "to-readable-stream": "^1.0.0", - "url-parse-lax": "^3.0.0" - } - }, - "graceful-fs": { - "version": "4.2.10", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", - "devOptional": true - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" - }, - "has-unicode": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", - "dev": true - }, - "helmet": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/helmet/-/helmet-5.0.2.tgz", - "integrity": "sha512-QWlwUZZ8BtlvwYVTSDTBChGf8EOcQ2LkGMnQJxSzD1mUu8CCjXJZq/BXP8eWw4kikRnzlhtYo3lCk0ucmYA3Vg==" - }, - "http-cache-semantics": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", - "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", - "devOptional": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-proxy-agent": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", - "optional": true, - "requires": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "optional": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true - } - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "requires": { - "agent-base": "6", - "debug": "4" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "humanize-ms": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", - "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", - "optional": true, - "requires": { - "ms": "^2.0.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "ignore-by-default": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true - }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", - "dev": true - }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "devOptional": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "optional": true - }, - "infer-owner": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", - "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", - "optional": true - }, - "inflection": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.13.2.tgz", - "integrity": "sha512-cmZlljCRTBFouT8UzMzrGcVEvkv6D/wBdcdKG7J1QH5cXjtU75Dm+P27v9EKu/Y43UYyCJd1WC4zLebRrC8NBw==" - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" - }, - "ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "dev": true - }, - "ip": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", - "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", - "optional": true - }, - "ipaddr.js": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "dev": true, - "requires": { - "ci-info": "^2.0.0" - } - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-installed-globally": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", - "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", - "dev": true, - "requires": { - "global-dirs": "^3.0.0", - "is-path-inside": "^3.0.2" - } - }, - "is-lambda": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", - "integrity": "sha1-PZh3iZ5qU+/AFgUEzeFfgubwYdU=", - "optional": true - }, - "is-npm": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", - "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", - "dev": true - }, - "is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, - "is-yarn-global": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", - "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", - "dev": true - }, - "isarray": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=" - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "optional": true - }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", - "dev": true - }, - "jsonwebtoken": { - "version": "8.5.1", - "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", - "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", - "requires": { - "jws": "^3.2.2", - "lodash.includes": "^4.3.0", - "lodash.isboolean": "^3.0.3", - "lodash.isinteger": "^4.0.4", - "lodash.isnumber": "^3.0.3", - "lodash.isplainobject": "^4.0.6", - "lodash.isstring": "^4.0.1", - "lodash.once": "^4.0.0", - "ms": "^2.1.1", - "semver": "^5.6.0" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" - } - } - }, - "jwa": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", - "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", - "requires": { - "buffer-equal-constant-time": "1.0.1", - "ecdsa-sig-formatter": "1.0.11", - "safe-buffer": "^5.0.1" - } - }, - "jws": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", - "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", - "requires": { - "jwa": "^1.4.1", - "safe-buffer": "^5.0.1" - } - }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "dev": true, - "requires": { - "json-buffer": "3.0.0" - } - }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "dev": true, - "requires": { - "package-json": "^6.3.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" - }, - "lodash.includes": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", - "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" - }, - "lodash.isboolean": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", - "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" - }, - "lodash.isinteger": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", - "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" - }, - "lodash.isnumber": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", - "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" - }, - "lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" - }, - "lodash.isstring": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" - }, - "lodash.once": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", - "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" - }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", - "dev": true - }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, - "make-dir": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", - "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "requires": { - "semver": "^6.0.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" - } - } - }, - "make-fetch-happen": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", - "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", - "optional": true, - "requires": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" - } - }, - "media-typer": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", - "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" - }, - "merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" - }, - "methods": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" - }, - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "requires": { - "mime-db": "1.52.0" - } - }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" - }, - "minipass": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", - "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", - "requires": { - "yallist": "^4.0.0" - } - }, - "minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-fetch": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", - "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", - "optional": true, - "requires": { - "encoding": "^0.1.12", - "minipass": "^3.1.0", - "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" - } - }, - "minipass-flush": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", - "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-pipeline": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", - "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minipass-sized": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", - "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", - "optional": true, - "requires": { - "minipass": "^3.0.0" - } - }, - "minizlib": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", - "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", - "requires": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" - } - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" - }, - "moment": { - "version": "2.29.3", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", - "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" - }, - "moment-timezone": { - "version": "0.5.34", - "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", - "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", - "requires": { - "moment": ">= 2.9.0" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" - }, - "multer": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/multer/-/multer-1.4.4.tgz", - "integrity": "sha512-2wY2+xD4udX612aMqMcB8Ws2Voq6NIUPEtD1be6m411T4uDH/VtL9i//xvcyFlTVfRdaBsk7hV5tgrGQqhuBiw==", - "requires": { - "append-field": "^1.0.0", - "busboy": "^0.2.11", - "concat-stream": "^1.5.2", - "mkdirp": "^0.5.4", - "object-assign": "^4.1.1", - "on-finished": "^2.3.0", - "type-is": "^1.6.4", - "xtend": "^4.0.0" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "requires": { - "minimist": "^1.2.6" - } - } - } - }, - "negotiator": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", - "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" - }, - "node-addon-api": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-4.3.0.tgz", - "integrity": "sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==" - }, - "node-fetch": { - "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp": { - "version": "8.4.1", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", - "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", - "optional": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^9.1.0", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "are-we-there-yet": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.0.tgz", - "integrity": "sha512-0GWpv50YSOcLXaN6/FAKY3vfRbllXWV2xvfA/oKJF8pzFhWXPV+yjhJXDBbjscDYowv7Yw1A3uigpzn5iEGTyw==", - "optional": true, - "requires": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" - } - }, - "gauge": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", - "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", - "optional": true, - "requires": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" - } - }, - "npmlog": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", - "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", - "optional": true, - "requires": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - } - } - } - }, - "nodemon": { - "version": "2.0.15", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.15.tgz", - "integrity": "sha512-gdHMNx47Gw7b3kWxJV64NI+Q5nfl0y5DgDbiVtShiwa7Z0IZ07Ll4RLFo6AjrhzMtoEZn5PDE3/c2AbVsiCkpA==", - "dev": true, - "requires": { - "chokidar": "^3.5.2", - "debug": "^3.2.7", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.0.4", - "pstree.remy": "^1.1.8", - "semver": "^5.7.1", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5", - "update-notifier": "^5.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "nopt": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", - "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", - "requires": { - "abbrev": "1" - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==", - "dev": true - }, - "npmlog": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", - "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", - "requires": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - }, - "object-inspect": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz", - "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" - }, - "on-finished": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "requires": { - "wrappy": "1" - } - }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", - "dev": true - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "optional": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dev": true, - "requires": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" - }, - "path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" - }, - "pg-connection-string": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", - "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", - "dev": true - }, - "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==" - }, - "promise-inflight": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", - "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", - "optional": true - }, - "promise-retry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", - "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", - "optional": true, - "requires": { - "err-code": "^2.0.2", - "retry": "^0.12.0" - } - }, - "proxy-addr": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", - "requires": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - } - }, - "pstree.remy": { - "version": "1.1.8", - "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", - "dev": true - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "dev": true, - "requires": { - "escape-goat": "^2.0.0" - } - }, - "qs": { - "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", - "requires": { - "side-channel": "^1.0.4" - } - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" - }, - "raw-body": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "dependencies": { - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - } - } - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "registry-auth-token": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "registry-url": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", - "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", - "dev": true, - "requires": { - "rc": "^1.2.8" - } - }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dev": true, - "requires": { - "lowercase-keys": "^1.0.0" - } - }, - "retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha1-G0KmJmoh8HQh0bC1S33BZ7AcATs=", - "optional": true - }, - "retry-as-promised": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-5.0.0.tgz", - "integrity": "sha512-6S+5LvtTl2ggBumk04hBo/4Uf6fRJUwIgunGZ7CYEBCeufGFW1Pu6ucUf/UskHeWOIsUcLOGLFXPig5tR5V1nA==" - }, - "rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "requires": { - "glob": "^7.1.3" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" - }, - "semver": { - "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "requires": { - "lru-cache": "^6.0.0" - } - }, - "semver-diff": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", - "dev": true, - "requires": { - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - } - } - }, - "send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", - "requires": { - "debug": "2.6.9", - "depd": "2.0.0", - "destroy": "1.2.0", - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", - "mime": "1.6.0", - "ms": "2.1.3", - "on-finished": "2.4.1", - "range-parser": "~1.2.1", - "statuses": "2.0.1" - }, - "dependencies": { - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" - } - } - }, - "sequelize": { - "version": "6.19.0", - "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-6.19.0.tgz", - "integrity": "sha512-B3oGIdpYBERDjRDm74h7Ky67f6ZLcmBXOA7HscYObiOSo4pD7VBc9mtm44wNV7unc0uk8I1d30nbZBTQCE377A==", - "requires": { - "@types/debug": "^4.1.7", - "@types/validator": "^13.7.1", - "debug": "^4.3.3", - "dottie": "^2.0.2", - "inflection": "^1.13.2", - "lodash": "^4.17.21", - "moment": "^2.29.1", - "moment-timezone": "^0.5.34", - "pg-connection-string": "^2.5.0", - "retry-as-promised": "^5.0.0", - "semver": "^7.3.5", - "sequelize-pool": "^7.1.0", - "toposort-class": "^1.0.1", - "uuid": "^8.3.2", - "validator": "^13.7.0", - "wkx": "^0.5.0" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" - } - } - }, - "sequelize-pool": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz", - "integrity": "sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==" - }, - "serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.18.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" - }, - "smart-buffer": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", - "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", - "optional": true - }, - "socks": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/socks/-/socks-2.6.2.tgz", - "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", - "optional": true, - "requires": { - "ip": "^1.1.5", - "smart-buffer": "^4.2.0" - } - }, - "socks-proxy-agent": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", - "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", - "optional": true, - "requires": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "dependencies": { - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "optional": true, - "requires": { - "ms": "2.1.2" - } - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "optional": true - } - } - }, - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" - }, - "sqlite3": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-5.0.5.tgz", - "integrity": "sha512-ZZFOMW31IOMbUeSiL23TuWSjNyS7Z83EDJ80HJxCe78OZ+5BJT6IhAwAUnQgPsUl5z+Er0DGx7VjuTP7PKPNcg==", - "requires": { - "@mapbox/node-pre-gyp": "^1.0.0", - "node-addon-api": "^4.2.0", - "node-gyp": "8.x", - "tar": "^6.1.11" - } - }, - "ssri": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", - "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", - "optional": true, - "requires": { - "minipass": "^3.1.1" - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==" - }, - "streamsearch": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz", - "integrity": "sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=" - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "swagger-ui-dist": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.11.0.tgz", - "integrity": "sha512-Jo4oq4Nc7LaTYuvyo1VY3z3OWmGZCzZon8s92auKqpIuVCJo3t1Qih+S+Ph8lS5+ZbvF2ugqWvXk83boXQux1w==" - }, - "swagger-ui-express": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.3.0.tgz", - "integrity": "sha512-jN46SEEe9EoXa3ZgZoKgnSF6z0w3tnM1yqhO4Y+Q4iZVc8JOQB960EZpIAz6rNROrDApVDwcMHR0mhlnc/5Omw==", - "requires": { - "swagger-ui-dist": ">=4.1.3" - } - }, - "tar": { - "version": "6.1.11", - "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", - "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", - "requires": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^3.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" - } - }, - "to-readable-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", - "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", - "dev": true - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" - }, - "toposort-class": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", - "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" - }, - "touch": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", - "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", - "dev": true, - "requires": { - "nopt": "~1.0.10" - }, - "dependencies": { - "nopt": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", - "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", - "dev": true, - "requires": { - "abbrev": "1" - } - } - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" - }, - "type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true - }, - "type-is": { - "version": "1.6.18", - "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", - "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", - "requires": { - "media-typer": "0.3.0", - "mime-types": "~2.1.24" - } - }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=" - }, - "typedarray-to-buffer": { - "version": "3.1.5", - "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", - "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, - "undefsafe": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", - "dev": true - }, - "unique-filename": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", - "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", - "optional": true, - "requires": { - "unique-slug": "^2.0.0" - } - }, - "unique-slug": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", - "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", - "optional": true, - "requires": { - "imurmurhash": "^0.1.4" - } - }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "dev": true, - "requires": { - "crypto-random-string": "^2.0.0" - } - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" - }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "dev": true, - "requires": { - "boxen": "^5.0.0", - "chalk": "^4.1.0", - "configstore": "^5.0.1", - "has-yarn": "^2.1.0", - "import-lazy": "^2.1.0", - "is-ci": "^2.0.0", - "is-installed-globally": "^0.4.0", - "is-npm": "^5.0.0", - "is-yarn-global": "^0.3.0", - "latest-version": "^5.1.0", - "pupa": "^2.1.1", - "semver": "^7.3.4", - "semver-diff": "^3.1.1", - "xdg-basedir": "^4.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "dev": true, - "requires": { - "prepend-http": "^2.0.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" - }, - "utils-merge": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", - "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" - }, - "validator": { - "version": "13.7.0", - "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", - "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", - "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", - "optional": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wide-align": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", - "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", - "requires": { - "string-width": "^1.0.2 || 2 || 3 || 4" - } - }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "dev": true, - "requires": { - "string-width": "^4.0.0" - } - }, - "wkx": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz", - "integrity": "sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==", - "requires": { - "@types/node": "*" - } - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" - }, - "write-file-atomic": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", - "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", - "dev": true - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, - "yamljs": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/yamljs/-/yamljs-0.3.0.tgz", - "integrity": "sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==", - "requires": { - "argparse": "^1.0.7", - "glob": "^7.0.5" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } } } diff --git a/Backend/package.json b/Backend/package.json index 214195726..899dca3d1 100644 --- a/Backend/package.json +++ b/Backend/package.json @@ -10,12 +10,14 @@ "author": "", "license": "ISC", "dependencies": { + "@npmcli/fs": "^3.1.0", "bcrypt": "^5.0.1", "cors": "^2.8.5", "dotenv": "^16.0.0", "express": "^4.18.0", + "firebase-admin": "^11.5.0", "helmet": "^5.0.2", - "jsonwebtoken": "^8.5.1", + "jsonwebtoken": "^9.0.0", "multer": "^1.4.4", "sequelize": "^6.19.0", "sqlite3": "^5.0.5", diff --git a/FrontEnd/assets/style.css b/FrontEnd/assets/style.css index 7bca0ed1a..159b84823 100644 --- a/FrontEnd/assets/style.css +++ b/FrontEnd/assets/style.css @@ -125,6 +125,31 @@ li:hover { text-align: center; margin-bottom: 1em; } +/* ajout bouton filtre catégorie*/ +.filtres { + display: flex; + justify-content: center; + margin-bottom: 2rem; +} +.filtres button { + border-radius: 60px; + text-align: center; + border: 1px solid #1D6154; + color: white; + background: #1D6154; + padding: 9px 30px 9px 28px; + font-size: 16px; + font-weight: 700; + font-family: 'Syne'; + line-height: 19px; + +} + +.filtres .categories-btn { + color: #1D6154; + background: white; + margin-left: 8px; +} .gallery { width: 100%; display: grid; diff --git a/FrontEnd/index.html b/FrontEnd/index.html index f84e06d2e..016dd0ab7 100644 --- a/FrontEnd/index.html +++ b/FrontEnd/index.html @@ -13,7 +13,7 @@
-

Sophie Bluel Architecte d'inteérieur

+

Sophie Bluel Architecte d'intérieur

Mes Projets

+
+ +
diff --git a/FrontEnd/index.js b/FrontEnd/index.js index 5317db76d..fbc4360ce 100644 --- a/FrontEnd/index.js +++ b/FrontEnd/index.js @@ -1,13 +1,29 @@ -async function getWorks () { +async function getWorks() { const reponse = await fetch("http://localhost:5678/api/works"); const data = await reponse.json(); for(let work of data) { document.querySelector(".gallery").innerHTML += `
- Hotel First Arte - New Delhi +
${work.title}
` } } -getWorks (); +getWorks(); + + +async function getCategories() { + const reponse =await fetch("http://localhost:5678/api/categories"); + const data = await reponse.json(); + for(let categorie of data){ + document.querySelector(".filtres").innerHTML += `` + } + const filterButton = document.querySelector(".filtres"); + filterButton.addEventListener("click",function () { + console.log("hello"); + document.querySelector(".gallery").innerHTML =""; + getWorks(); + }); +} +getCategories(); From b625603d363b42bafaecef79fe3ff8296340c857 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Mon, 30 Jan 2023 12:22:29 +0100 Subject: [PATCH 03/19] fix: filter --- FrontEnd/index.js | 55 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 15 deletions(-) diff --git a/FrontEnd/index.js b/FrontEnd/index.js index fbc4360ce..f352e7bd4 100644 --- a/FrontEnd/index.js +++ b/FrontEnd/index.js @@ -1,29 +1,54 @@ -async function getWorks() { - const reponse = await fetch("http://localhost:5678/api/works"); - const data = await reponse.json(); +let works = window.localStorage.getItem("works"); + +if (works === null){ +// Récupération des pièces depuis l'API + const reponse = await fetch("http://localhost:5678/api/works"); + works = await reponse.json(); + // Transformation des pièces en JSON + const valueWorks = JSON.stringify(works); + // Stockage des informations dans le localStorage + window.localStorage.setItem("works", valueWorks); +}else{ + works = JSON.parse(works); +} - for(let work of data) { +// Recupérer et afficher tous les travaux // +async function getWorks() { + for(let work of works) { document.querySelector(".gallery").innerHTML += `
${work.title}
` - } -} + }; +}; getWorks(); - +// Recupérer et afficher toutes les catégories // async function getCategories() { const reponse =await fetch("http://localhost:5678/api/categories"); const data = await reponse.json(); for(let categorie of data){ document.querySelector(".filtres").innerHTML += `` - } - const filterButton = document.querySelector(".filtres"); - filterButton.addEventListener("click",function () { - console.log("hello"); - document.querySelector(".gallery").innerHTML =""; - getWorks(); - }); -} + }; +}; getCategories(); +// Filtrer les travaux et affichages par catégorie // +async function filterCategories() { + const filterButton = document.querySelector(".filtres"); + filterButton.addEventListener("click", async function (event) { + const categorieId = event.target.dataset.id; + document.querySelector(".gallery").innerHTML =""; + const worksFilter = works.filter (obj => obj.category.id == categorieId) + if (categorieId >= 1) { + for(let work of worksFilter) { + document.querySelector(".gallery").innerHTML += `
+ +
${work.title}
+
`}; + } else { + getWorks(); + } + }); +}; +filterCategories(); \ No newline at end of file From 5d3683e9a739fdaf686fb06f17bda6a1b05bfcc7 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Mon, 30 Jan 2023 17:01:34 +0100 Subject: [PATCH 04/19] feat login --- FrontEnd/assets/style.css | 60 +++++++++++++++++++++++++++++++++++++-- FrontEnd/index.html | 4 +-- FrontEnd/login.html | 44 ++++++++++++++++++++++++++++ 3 files changed, 104 insertions(+), 4 deletions(-) create mode 100644 FrontEnd/login.html diff --git a/FrontEnd/assets/style.css b/FrontEnd/assets/style.css index 159b84823..2a81523df 100644 --- a/FrontEnd/assets/style.css +++ b/FrontEnd/assets/style.css @@ -95,9 +95,64 @@ nav li { font-size: 1.2em; } -li:hover { +nav li a { + text-decoration-line: none; + color: black; +} + +nav li :hover { + color: #B1663C; +} + +nav li a:hover { color: #B1663C; } + +nav li a span { + font-weight: 600; +} + +/* Formulaire Log In */ +form { + margin: auto; + display: flex; + flex-direction: column; + align-items: center; + justify-content: space-between; + margin-bottom: 379px; + width : 380px; + font-weight: 500; + color: #3D3D3D; + +} + +form p { + font-family: 'Syne'; + font-weight: 700; + font-size: 30px; + line-height: 36px; + color: #1D6154; + margin-bottom: 16px; +} + +form label { + align-self: start; + margin-bottom: 6px; + color: #3D3D3D; +} + +form input { + width : 379px; + height: 51px; + margin-bottom: 30px; + box-shadow: rgba(0, 0, 0, 0.24) 0px 3px 8px; + border: none; +} + +form a { + color: #3D3D3D; +} + #introduction { display: flex; align-items: center; @@ -208,6 +263,7 @@ input[type="submit"]{ footer nav ul { display: flex; justify-content: flex-end; - margin: 2em + margin: 2em; + font-weight: 300; } diff --git a/FrontEnd/index.html b/FrontEnd/index.html index 016dd0ab7..c9532154f 100644 --- a/FrontEnd/index.html +++ b/FrontEnd/index.html @@ -18,7 +18,7 @@

Sophie Bluel Architecte d'intérieur

  • projets
  • contact
  • -
  • login
  • +
  • login
  • Instagram
@@ -32,7 +32,7 @@

Sophie Bluel Architecte d'intérieur

Designer d'espace

Je raconte votre histoire, je valorise vos idées. Je vous accompagne de la conception à la livraison finale du chantier.

Chaque projet sera étudié en commun, de façon à mettre en valeur les volumes, les matières et les couleurs dans le respect de l’esprit des lieux et le choix adapté des matériaux. Le suivi du chantier sera assuré dans le souci du détail, le respect du planning et du budget.

-

En cas de besoin, une équipe pluridisciplinaire peut-être constituée : architecte DPLG, décorateur(trice)

+

En cas de besoin, une équipe pluridisciplinaire peut-être constituée : architecte DPLG, décorateur(trice).

diff --git a/FrontEnd/login.html b/FrontEnd/login.html new file mode 100644 index 000000000..f6c454e2f --- /dev/null +++ b/FrontEnd/login.html @@ -0,0 +1,44 @@ + + + + + Sophie Bluel - Architecte d'intérieur + + + + + + + + + +
+

Sophie Bluel Architecte d'intérieur

+ +
+ +
+

Log In

+ + + + + + Mot de passe oublié +
+ +
+ +
+ \ No newline at end of file From 406f2f8d77d0e42def8303dd171741f39cf1fd38 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Tue, 31 Jan 2023 20:18:44 +0100 Subject: [PATCH 05/19] fix: login --- FrontEnd/assets/style.css | 2 +- FrontEnd/index.js | 3 +- FrontEnd/index_edit.html | 71 +++++++++++++++++++++++++++++++++++++++ FrontEnd/login.html | 11 +++--- FrontEnd/login.js | 32 ++++++++++++++++++ 5 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 FrontEnd/index_edit.html create mode 100644 FrontEnd/login.js diff --git a/FrontEnd/assets/style.css b/FrontEnd/assets/style.css index 2a81523df..e46d4fded 100644 --- a/FrontEnd/assets/style.css +++ b/FrontEnd/assets/style.css @@ -126,7 +126,7 @@ form { } -form p { +form h2 { font-family: 'Syne'; font-weight: 700; font-size: 30px; diff --git a/FrontEnd/index.js b/FrontEnd/index.js index f352e7bd4..2a1646a17 100644 --- a/FrontEnd/index.js +++ b/FrontEnd/index.js @@ -51,4 +51,5 @@ async function filterCategories() { } }); }; -filterCategories(); \ No newline at end of file +filterCategories(); + diff --git a/FrontEnd/index_edit.html b/FrontEnd/index_edit.html new file mode 100644 index 000000000..88b88ff32 --- /dev/null +++ b/FrontEnd/index_edit.html @@ -0,0 +1,71 @@ + + + + + Sophie Bluel - Architecte d'intérieur + + + + + + + + + +
+

publier les changements

+

Sophie Bluel Architecte d'intérieur

+ +
+
+
+
+ +
+
+

Designer d'espace

+

Je raconte votre histoire, je valorise vos idées. Je vous accompagne de la conception à la livraison finale du chantier.

+

Chaque projet sera étudié en commun, de façon à mettre en valeur les volumes, les matières et les couleurs dans le respect de l’esprit des lieux et le choix adapté des matériaux. Le suivi du chantier sera assuré dans le souci du détail, le respect du planning et du budget.

+

En cas de besoin, une équipe pluridisciplinaire peut-être constituée : architecte DPLG, décorateur(trice).

+
+
+
+

Mes Projets

+
+ +
+ +
+
+

Contact

+

Vous avez un projet ? Discutons-en !

+
+ + + + + + + +
+
+
+ +
+ +
+ + + diff --git a/FrontEnd/login.html b/FrontEnd/login.html index f6c454e2f..68a720b5f 100644 --- a/FrontEnd/login.html +++ b/FrontEnd/login.html @@ -9,7 +9,7 @@ - +
@@ -24,14 +24,15 @@

Sophie Bluel Architecte d'intérieur

-
-

Log In

+ +

Log In

- - + + Mot de passe oublié +

diff --git a/FrontEnd/login.js b/FrontEnd/login.js new file mode 100644 index 000000000..3c3363c1c --- /dev/null +++ b/FrontEnd/login.js @@ -0,0 +1,32 @@ + const formLogin = document.querySelector("form"); + formLogin.addEventListener("submit", async function(event) { + event.preventDefault();/*bloque rechargement de la page*/ + + // creation objet login + const login = { + email: document.querySelector("[name='email']").value, + password: document.querySelector ("[name='password']").value + }; + + // envoi information sur l'API login + const responseLogin = await fetch("http://localhost:5678/api/users/login", { + method : "POST", + headers : {"Content-Type": "application/json"}, + body : JSON.stringify(login) + }); + + const response = responseLogin.json(); + //récupération token et statut de la réponse + const reponseToken = response.token; + const reponseState = responseLogin.ok; + + // Retour en fonction du statut de la réponse + if (reponseState) { + sessionStorage.setItem("Token", reponseToken); + window.location.replace("index_edit.html"); + } else { + window.alert("Erreur dans l'identifiant ou le mot de passe"); + window.location.replace("login.html"); + }; +}); + From e53c61265cf4c65f7f95d846dea2b115a5766701 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Thu, 2 Feb 2023 08:56:05 +0100 Subject: [PATCH 06/19] save : 230201 --- FrontEnd/assets/icons/arrow_Back.png | Bin 0 -> 212 bytes FrontEnd/assets/icons/cross.png | Bin 0 -> 189 bytes FrontEnd/assets/icons/pen.png | Bin 0 -> 241 bytes FrontEnd/assets/icons/pen_white.png | Bin 0 -> 252 bytes FrontEnd/assets/icons/square.png | Bin 0 -> 182 bytes FrontEnd/assets/icons/square_white.png | Bin 0 -> 218 bytes FrontEnd/assets/style.css | 108 ++++++++++++++++++++++++- FrontEnd/index_edit.html | 75 +++++++++++++++-- 8 files changed, 177 insertions(+), 6 deletions(-) create mode 100644 FrontEnd/assets/icons/arrow_Back.png create mode 100644 FrontEnd/assets/icons/cross.png create mode 100644 FrontEnd/assets/icons/pen.png create mode 100644 FrontEnd/assets/icons/pen_white.png create mode 100644 FrontEnd/assets/icons/square.png create mode 100644 FrontEnd/assets/icons/square_white.png diff --git a/FrontEnd/assets/icons/arrow_Back.png b/FrontEnd/assets/icons/arrow_Back.png new file mode 100644 index 0000000000000000000000000000000000000000..0f124806e5bad682dac1e7bc849f7c19408291ce GIT binary patch literal 212 zcmeAS@N?(olHy`uVBq!ia0vp^qCm{g!3HF`qgt|o6lZ})WHFE@48n{Iv*t(u1sRKj z+?^QKos)S9XL`CghEy=Vop_M5!GVV*d?SPRg)W_gLOBoL zxL9vsvHrBi!MvhreofKON@ixoenkO?^aaX1S5CzxNxyyA!lEzr;K=!=P%gcb4K;q9 za$8#EKUTl=OMfDK|KMLw)irJE5*btec0KQw<++n^UZ(YeuOBneQU*^~KbLh*2~7aq C3q)W5 literal 0 HcmV?d00001 diff --git a/FrontEnd/assets/icons/cross.png b/FrontEnd/assets/icons/cross.png new file mode 100644 index 0000000000000000000000000000000000000000..8dffcad9458f9da2aea177d75138db6e7d9e7906 GIT binary patch literal 189 zcmeAS@N?(olHy`uVBq!ia0vp^d?3uh1|;P@bT0xa&H|6fVg?3oVGw3ym^DWND9BhG z2ISNIi7ofNzrWCY_#}C(g~|lu`9A^R&J>Maa%oAR<)2f{%HH&+;Z4 f2iFfz*Ij1(Uv1@kAf(y}XgY(ZtDnm{r-UW|rE)in literal 0 HcmV?d00001 diff --git a/FrontEnd/assets/icons/pen.png b/FrontEnd/assets/icons/pen.png new file mode 100644 index 0000000000000000000000000000000000000000..08aad3b04ddb8046c051c6f78b8002d0e8172136 GIT binary patch literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^{2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBew(L@V@L(#)kzz9TMc+z-q%Yos4=KD1WG7s z8#vxzF>9R0WyZ0%AS~vB!laTpUqn>TP3D&7IPW7f(?ga2KgUNEUdt0+T{=!OU-!Mt zbUN~J;j=o9_Z9uBszO##YwKgTtX!0$nA@dMsF~zv^`p{@>&ITx55*?=n`+jbT=$%7 h|9)ns%c~`(a;JAINghcMI|6hOgQu&X%Q~loCIAW-O;P{= literal 0 HcmV?d00001 diff --git a/FrontEnd/assets/icons/pen_white.png b/FrontEnd/assets/icons/pen_white.png new file mode 100644 index 0000000000000000000000000000000000000000..daf2d11eb9973dd875e077499d22395115f38ce0 GIT binary patch literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{zOj~$B+ufx04e&+YAI8w(B?Y+DUhG_9U?6 zCa@@HFy}5%yTEoUVc)?{g^uHYULQ=}u)F-WM0$_WoMJ``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBzPG1~V@L(#+sOxc83cG-_a9?$Gj8%-bI3!@ zfJu3U#rFk5;&GpA!lCJa=f!hmP3Jx?s{Ka3U`R3V%oI_g2-}OId YRJzH*^MU8}UZAlIp00i_>zopr0HYT;00000 literal 0 HcmV?d00001 diff --git a/FrontEnd/assets/icons/square_white.png b/FrontEnd/assets/icons/square_white.png new file mode 100644 index 0000000000000000000000000000000000000000..109c23e940ee2a99bc33041ebd34cbe241d1a768 GIT binary patch literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBe!i!RV@L(#+sOw78x(k0^!r!?nq(uIRBteq zIi>f_y}(!|(7*pDOB|1R@nrTC`JFByUs(iRHq_fHP3ke{U~K)mDE_g(nnE;#z=Dhm zO>Vpl5f4Su_iudjPUJ?}h3`HK#Tzd36s&sZxTstCY}MY6%#(Mkt6W@c#RIgO!PC{x JWt~$(696|~MQQ*5 literal 0 HcmV?d00001 diff --git a/FrontEnd/assets/style.css b/FrontEnd/assets/style.css index e46d4fded..f4fe65492 100644 --- a/FrontEnd/assets/style.css +++ b/FrontEnd/assets/style.css @@ -52,7 +52,40 @@ body { margin:auto; font-family: 'Work Sans' ; font-size: 14px; + box-sizing: border-box; } +.edition-mode { + display: flex; + justify-content: center; + align-items: center; + margin:0; + height : 59px; + background-color: black; + color: white; + box-sizing: border-box; +} + +.edition-mode img { + color: white; +} + +.edition-mode span{ + font-weight: 400; + font-size: 16px; + line-height: 19px; + margin: 0 21px 0 13px; +} + +.edition-mode button { + padding : 0 2.5% 0 2.5%; + font-weight: 500; + line-height: 16px; + background: white; + border-radius: 30px; + height: 38px; + border: none; +} + header { display: flex; justify-content: space-between; @@ -92,12 +125,13 @@ nav ul { } nav li { padding: 0 10px; - font-size: 1.2em; + font-size: 16px; } nav li a { text-decoration-line: none; color: black; + font-size: 16px; } nav li :hover { @@ -152,7 +186,79 @@ form input { form a { color: #3D3D3D; } +/* bouton lien modifier modale */ +.square-pen{ + position: relative; + height: 18px; + width: 18px; +} +.pen { + position: absolute; + left: 5px; + bottom: 7px; +} +a { + text-decoration-line: none; + color: black; + font-size: 14px; + font-weight: 400; + font-family: 'Work Sans'; +} + +/* modale*/ +.modal{ + position: fixed; + display: flex; + align-items: center; + justify-content: center; + top: 0; + left: 0; + width: 100%; + height: 100%; + background: rgba(0, 0,0, 0.4); +} + +.modal-container { + display: flex; + flex-direction: column; + align-items: center; + margin: 0 auto; + background-color: white; + width: 630px; + border-radius: 10px; + padding: 4%; +} +#cross { + position: absolute; + top: 45%; + right:30%; +} + +.modal-container h3 { + font-size: 26px; + line-height: 30px; +} +.modal-container-photo { + +} +.modal-container input[type="submit"] { + width: 230px; + padding: 1.5% 6% 1.5% 6%; + border: none; +} +.modal-container input[type="button"] { + color:#D65353; + background-color: white; + line-height: 17px; + border: none; +} +/* modale ajout photo */ +#arrow-back { + position: absolute; + top: 45%; + left: 30%; +} #introduction { display: flex; align-items: center; diff --git a/FrontEnd/index_edit.html b/FrontEnd/index_edit.html index 88b88ff32..c2ff3f442 100644 --- a/FrontEnd/index_edit.html +++ b/FrontEnd/index_edit.html @@ -9,17 +9,25 @@ + +
+
+ icone carré + icone crayon +
+ Mode édition + +
-

publier les changements

-

Sophie Bluel Architecte d'intérieur

+

Sophie Bluel Architecte d'intérieur

@@ -27,10 +35,22 @@

Sophie Bluel Architecte d'intérieur

- + +
+ icone carré + icone crayon +
+ modifier
+
-

Designer d'espace

+
+ icone carré + icone crayon + modifier +
+ +

Designer d'espace

Je raconte votre histoire, je valorise vos idées. Je vous accompagne de la conception à la livraison finale du chantier.

Chaque projet sera étudié en commun, de façon à mettre en valeur les volumes, les matières et les couleurs dans le respect de l’esprit des lieux et le choix adapté des matériaux. Le suivi du chantier sera assuré dans le souci du détail, le respect du planning et du budget.

En cas de besoin, une équipe pluridisciplinaire peut-être constituée : architecte DPLG, décorateur(trice).

@@ -38,6 +58,51 @@

Designer d'espace

Mes Projets

+
+ icone carré + icone crayon + modifier +
+ +
From ce1bdf5b713206918fcd8206c925713fbd598f29 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Thu, 2 Feb 2023 19:37:43 +0100 Subject: [PATCH 07/19] save : 230202 --- FrontEnd/assets/icons/circle.png | Bin 0 -> 442 bytes FrontEnd/assets/icons/mount.png | Bin 0 -> 750 bytes FrontEnd/assets/icons/rectangle.png | Bin 0 -> 231 bytes FrontEnd/assets/style.css | 143 ++++++++++++++++++++++++---- FrontEnd/index_edit.html | 95 ++++++++++-------- FrontEnd/index_edit.js | 42 ++++++++ FrontEnd/login.html | 1 - 7 files changed, 219 insertions(+), 62 deletions(-) create mode 100644 FrontEnd/assets/icons/circle.png create mode 100644 FrontEnd/assets/icons/mount.png create mode 100644 FrontEnd/assets/icons/rectangle.png create mode 100644 FrontEnd/index_edit.js diff --git a/FrontEnd/assets/icons/circle.png b/FrontEnd/assets/icons/circle.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8096c1a246bdf20d0fb177afaa699d808a8ee5 GIT binary patch literal 442 zcmV;r0Y(0aP)eHfXz zQn5+qBT|!a8!la0zQQttWJT*qAUw$N;{FI(&Yc?dR~z>+BRtSxAUAKzwYU z9E6@5ScofDCIBcg)AP~vJv9kZW-SeDdr7h~Ub|WIO_aaAIxyecy&IQrFx$5o7H^jo k5v<$bf8S9gt*(px0LuD^?uNmn761SM07*qoM6N<$f}K~mxc~qF literal 0 HcmV?d00001 diff --git a/FrontEnd/assets/icons/mount.png b/FrontEnd/assets/icons/mount.png new file mode 100644 index 0000000000000000000000000000000000000000..54bcf97af43e0c2388b8c8e702c669b42a9f2fc9 GIT binary patch literal 750 zcmVaiySEVc7AdNzJXrVxwttVyl#DiNu=_4D5=ZvzJ* zWX=vw$|U0Zs;2$-9C@Yw^|a*H*V2`zv_M_0T?Xs3(xUOB{T3xJ_ZzCJnJHCun6%{k z?8|rwRtZ0jIZBH`Z(TP7&7*c6R3)ducr~yveB*m7j7%8nF(joplYpVVi3tYm|D6|n zY~bW~9t2eS4UXl^)|36E;2l-uqI&sQF9t6m1bjFPHUl&}>>h6~0zT3gl{}`Y%%dt4 zVC~{Bdy`8?dY<8@O=bN=EhC!&1XkdJSE)@Vvs;@5SWu3>L3S+A_B_GcW6Z6J&OrvE zWwn#o+<+x@y*P7-j`5&omYK%#s@YRXQJj_(R}H8v-?$oyOB+ykp_%Z5C^T#RV|>D) zGIJ1@O}q+Cg?B{Z@EG5X&JS?Y23${AinkFsty!<&r0lau7qmc1NO``vumU;YDZ@v14~oLq$ygCq zB)b8%(Ymk#jW=xl+po$n3IPQax0A60xaC61@CUkSjG~aPso7-QfIFZ-P`5e?e4!}x gTZ1)!2f<1I0A#Y6PA2sIKmY&$07*qoM6N<$f*MOj&Hw-a literal 0 HcmV?d00001 diff --git a/FrontEnd/assets/icons/rectangle.png b/FrontEnd/assets/icons/rectangle.png new file mode 100644 index 0000000000000000000000000000000000000000..7da6cbbba278353b452208d14c817c097d9974a5 GIT binary patch literal 231 zcmeAS@N?(olHy`uVBq!ia0vp^RzR%B!3HEN|8Ok@Qk(@Ik;M!Q+`=Ht$S`Y;1W=H% zILO_JVcj{Imp~3nx}&cn1H;CC?mvmFKz@yO!3#aMzyAZ>!QkoY=d#Wzp$P!0+Egq6 literal 0 HcmV?d00001 diff --git a/FrontEnd/assets/style.css b/FrontEnd/assets/style.css index f4fe65492..bbf560aec 100644 --- a/FrontEnd/assets/style.css +++ b/FrontEnd/assets/style.css @@ -187,7 +187,7 @@ form a { color: #3D3D3D; } /* bouton lien modifier modale */ -.square-pen{ +.square-pen { position: relative; height: 18px; width: 18px; @@ -197,14 +197,22 @@ form a { left: 5px; bottom: 7px; } -a { - text-decoration-line: none; - color: black; - font-size: 14px; - font-weight: 400; - font-family: 'Work Sans'; +button[type="button"] { + display: flex; + width: 85px; + justify-content: space-between; + border: none; + background-color: white; } +.section-header { + display: flex; + justify-content: center; + align-items: baseline; +} +.section-header h2 { + margin-right: 20px; +} /* modale*/ .modal{ position: fixed; @@ -226,12 +234,15 @@ a { background-color: white; width: 630px; border-radius: 10px; - padding: 4%; + padding: 4% 4% 0 4%; + position: absolute; } #cross { position: absolute; - top: 45%; - right:30%; + top: 20px; + right: 30px; + border: none; + background-color: white; } .modal-container h3 { @@ -239,32 +250,124 @@ a { line-height: 30px; } -.modal-container-photo { - -} -.modal-container input[type="submit"] { - width: 230px; - padding: 1.5% 6% 1.5% 6%; - border: none; +#btn-add-photo { + width: 237px; + padding: 10px 49px 10px 49px; + border-radius: 60px; + color: white; + background-color: #1D6154; + font-family: 'Syne'; + text-align: center; + margin: 30px 0 30px 0; } .modal-container input[type="button"] { color:#D65353; background-color: white; line-height: 17px; border: none; + margin-bottom: 40px; + font-family: 'Syne'; } /* modale ajout photo */ #arrow-back { position: absolute; - top: 45%; - left: 30%; + top: 20px; + left: 30px; + border: none; + background-color: white; +} +.container-add-photo { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + width: 100%; + height: 169px; + background-color: #E8F1F7; + border-radius: 3px; + margin-top: 30px; +} + +#rectangle{ + position: relative; + z-index: 1; + top: 14px; + left: 24px; +} + +#circle { + position: relative; + z-index: 3; + top: -10px; + right: 30px; +} +#mount{ + position: relative; + z-index: 2; + top : 8px; + right: 50px; +} +.container-add-photo button { + color: #306685; + background-color: #CBD6DC; + border-radius: 50px; + padding: 10px 35px 10px 35px; + margin: 30px 0 7px 0; + border: none; + font-weight: 500; + line-height: 16px; + text-align: center; +} +.container-add-photo p{ + font-size: 10px; + font-weight: 400; +} + +.modal-container form { + margin: 20px 0 20px 0; + width: 100%; +} + +.modal-container form label, select { + font-weight: 500; + color: #3D3D3D; + line-height: 16px; +} +.modal-container form input, select { + box-shadow: 0 4px 14px rgba(0,0,0,0.09); + width: 100%; +} +select{ + background-color: white; + box-shadow: 0 4px 14px rgba(0,0,0,0.09); + border: none; + height: 51px; + margin-bottom: 40px; +} +#valider { + width: 237px; + height: 36px; + background-color: #A7A7A7; + border-radius: 60px; + } #introduction { display: flex; align-items: center; } #introduction figure { - flex: 1 + flex: 1; +} +#introduction button { + width: 85px; + height: 20px; +} +.figure-edit { + display: flex; + flex-direction: column; + justify-content: space-between; + align-items: baseline; + border: 2px solid blue; } #introduction img { display: block; diff --git a/FrontEnd/index_edit.html b/FrontEnd/index_edit.html index c2ff3f442..c7e8610d7 100644 --- a/FrontEnd/index_edit.html +++ b/FrontEnd/index_edit.html @@ -34,21 +34,27 @@

Sophie Bluel Architecte d'intérieur

-
+
-
- icone carré - icone crayon -
- modifier + + +
-
- icone carré - icone crayon - modifier -
+

Designer d'espace

Je raconte votre histoire, je valorise vos idées. Je vous accompagne de la conception à la livraison finale du chantier.

@@ -57,50 +63,57 @@

Designer d'espace

-

Mes Projets

-
- icone carré - icone crayon - modifier -
-
- + diff --git a/FrontEnd/index_edit.js b/FrontEnd/index_edit.js new file mode 100644 index 000000000..4c5e8b767 --- /dev/null +++ b/FrontEnd/index_edit.js @@ -0,0 +1,42 @@ +let modal = null + +const openModal = function(e) { + e.preventDefault();/* bloque fonctionnement normal du click*/ + const target = document.querySelector(e.target.getAttribute("href"));/*élément cible*/ + target.style.display = null ; + target.removeAttribute("aria-hidden"); /*supprime attribut pour permettre apparition modale*/ + target.setAttribute("aria-modal", "true");/*cf accessibilité*/ + modal = target; + /*modal.addEventListener("click", closeModal);*/ + modal.querySelector(".js-modal-close").addEventListener("click", closeModal); + modal.querySelector(".js-modal-close-return").addEventListener("click", closeModalReturn); + window.addEventListener("click", (event) => { + closeModal(dialog) +}); +}; + +const closeModal = function(e) { + if (modal === null) return + e.preventDefault(); + modal.style.display = "none"; + modal.setAttribute("aria-hidden", "true"); /*ajoute attribut pour disparition modale*/ + modal.removeAttribute("aria-modal"); + /*modal.removeEventListener("click", closeModal);*/ + modal.querySelector(".js-modal-close").removeEventListener("click", closeModal); + modal = null; +} + +const closeModalReturn = function (e) { + e.preventDefault(); + window.location.replace("index_edit.html"); +} + +document.querySelectorAll(".modification-link").forEach(a => { + a.addEventListener("click", openModal) +}); + +window.addEventListener('keydown', function (e){ + if (e.key === "Escape" || e.key === "Esc") { + closeModal(e); + }; +}); \ No newline at end of file diff --git a/FrontEnd/login.html b/FrontEnd/login.html index 68a720b5f..7a851206e 100644 --- a/FrontEnd/login.html +++ b/FrontEnd/login.html @@ -32,7 +32,6 @@

Log In

Mot de passe oublié -

From 51db2c31186d389ec40930d4a101f7c5bdf9d981 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Sat, 4 Feb 2023 12:33:52 +0100 Subject: [PATCH 08/19] refactor : display and filter --- FrontEnd/assets/icons/remove.png | Bin 0 -> 215 bytes FrontEnd/assets/style.css | 83 ++++++++++++++++++++++--------- FrontEnd/index.html | 4 +- FrontEnd/index.js | 68 +++++++++++++------------ FrontEnd/index_edit.html | 29 ++++++----- FrontEnd/index_edit.js | 40 ++++++++++++++- FrontEnd/indexbis.js | 74 +++++++++++++++++++++++++++ FrontEnd/login.js | 56 ++++++++++----------- 8 files changed, 254 insertions(+), 100 deletions(-) create mode 100644 FrontEnd/assets/icons/remove.png create mode 100644 FrontEnd/indexbis.js diff --git a/FrontEnd/assets/icons/remove.png b/FrontEnd/assets/icons/remove.png new file mode 100644 index 0000000000000000000000000000000000000000..8274cecb30f09b2707c7a36db0f104555d0a938c GIT binary patch literal 215 zcmeAS@N?(olHy`uVBq!ia0vp^oFL4>1|%O$WD@{!3Opi<85p>QL70(Y)*K0-AY*Zm zyA#8@b22Z19F}xPUq=Rpjs4tz5?O)#98VX=kP61u3EaF520SjeSs6VJ9@J4_WIw|g z;c#%mB})e;Kd span { font-family: 'Work Sans'; font-size:10px; letter-spacing: 0.1em; -; } h2{ @@ -121,8 +120,8 @@ nav ul { display: flex; align-items: center; list-style-type: none; - } + nav li { padding: 0 10px; font-size: 16px; @@ -157,7 +156,6 @@ form { width : 380px; font-weight: 500; color: #3D3D3D; - } form h2 { @@ -186,6 +184,7 @@ form input { form a { color: #3D3D3D; } + /* bouton lien modifier modale */ .square-pen { position: relative; @@ -195,7 +194,7 @@ form a { .pen { position: absolute; left: 5px; - bottom: 7px; + bottom: 6px; } button[type="button"] { display: flex; @@ -204,7 +203,7 @@ button[type="button"] { border: none; background-color: white; } - +/*integrer bouton modifier au titre projet*/ .section-header { display: flex; justify-content: center; @@ -249,6 +248,31 @@ button[type="button"] { font-size: 26px; line-height: 30px; } +.gallery-edit { + width: 80%; + display: grid; + grid-template-columns: 1fr 1fr 1fr 1fr 1fr; + grid-column-gap: 10px; + grid-row-gap: 10px; + margin: 40px; +} + +.gallery-edit-img { + width: 100%; +} +.gallery-edit figcaption { + display: inline; + margin-left: -20px; +} + +.photo-remove { + position: relative; + background-color: black; + top: -80%; + left: 77%; + padding: 4px; + border: none; +} #btn-add-photo { width: 237px; @@ -259,6 +283,7 @@ button[type="button"] { font-family: 'Syne'; text-align: center; margin: 30px 0 30px 0; + text-decoration-line: none; } .modal-container input[type="button"] { color:#D65353; @@ -267,6 +292,7 @@ button[type="button"] { border: none; margin-bottom: 40px; font-family: 'Syne'; + font-weight: 400; } /* modale ajout photo */ #arrow-back { @@ -349,26 +375,25 @@ select{ height: 36px; background-color: #A7A7A7; border-radius: 60px; - } + #introduction { display: flex; align-items: center; + width: 90%; + margin-left: 30px; } -#introduction figure { + +#photo-presentation { flex: 1; } -#introduction button { + +#photo-presentation button { width: 85px; - height: 20px; -} -.figure-edit { - display: flex; - flex-direction: column; - justify-content: space-between; - align-items: baseline; - border: 2px solid blue; + height: 16px; + margin: 10px 0 8px 50px; } + #introduction img { display: block; margin: auto; @@ -376,8 +401,17 @@ select{ } #introduction article { - flex: 1 + flex: 1; + color: #3D3D3D; + line-height: 16px; + text-align: left; } +#introduction article button { + width: 85px; + height: 16px; + margin-bottom: 16px; +} + #introduction h2 { margin-bottom: 1em; } @@ -389,6 +423,7 @@ select{ text-align: center; margin-bottom: 1em; } + /* ajout bouton filtre catégorie*/ .filtres { display: flex; @@ -415,20 +450,22 @@ select{ margin-left: 8px; } .gallery { - width: 100%; + width: 90%; display: grid; grid-template-columns: 1fr 1fr 1fr; grid-column-gap: 20px; grid-row-gap: 20px; + margin-left: 80px; + margin-right: 80px; } .gallery img { width: 100%; - } + #contact { width: 50%; -margin: auto; + margin: auto; } #contact > * { text-align: center; diff --git a/FrontEnd/index.html b/FrontEnd/index.html index c9532154f..9b6ffc4c5 100644 --- a/FrontEnd/index.html +++ b/FrontEnd/index.html @@ -9,7 +9,7 @@ - +
@@ -25,7 +25,7 @@

Sophie Bluel Architecte d'intérieur

-
+
diff --git a/FrontEnd/index.js b/FrontEnd/index.js index 2a1646a17..886029eee 100644 --- a/FrontEnd/index.js +++ b/FrontEnd/index.js @@ -1,55 +1,61 @@ let works = window.localStorage.getItem("works"); -if (works === null){ -// Récupération des pièces depuis l'API - const reponse = await fetch("http://localhost:5678/api/works"); - works = await reponse.json(); - // Transformation des pièces en JSON - const valueWorks = JSON.stringify(works); - // Stockage des informations dans le localStorage - window.localStorage.setItem("works", valueWorks); -}else{ - works = JSON.parse(works); +if (works === null) { + // Récupération des pièces depuis l'API + const reponse = await fetch("http://localhost:5678/api/works"); + works = await reponse.json(); + // Transformation des pièces en JSON + const valueWorks = JSON.stringify(works); + // Stockage des informations dans le localStorage + window.localStorage.setItem("works", valueWorks); +} else { + works = JSON.parse(works); } // Recupérer et afficher tous les travaux // async function getWorks() { - for(let work of works) { - document.querySelector(".gallery").innerHTML += `
- -
${work.title}
-
` - }; -}; + for (let work of works) { + document.querySelector(".gallery").innerHTML += ` +
+ +
${work.title}
+
+ `; + } +} getWorks(); // Recupérer et afficher toutes les catégories // async function getCategories() { - const reponse =await fetch("http://localhost:5678/api/categories"); + const reponse = await fetch("http://localhost:5678/api/categories"); const data = await reponse.json(); - for(let categorie of data){ - document.querySelector(".filtres").innerHTML += `` - }; -}; + for (let categorie of data) { + document.querySelector( + ".filtres" + ).innerHTML += ``; + } +} getCategories(); // Filtrer les travaux et affichages par catégorie // async function filterCategories() { const filterButton = document.querySelector(".filtres"); filterButton.addEventListener("click", async function (event) { - const categorieId = event.target.dataset.id; - document.querySelector(".gallery").innerHTML =""; - const worksFilter = works.filter (obj => obj.category.id == categorieId) - if (categorieId >= 1) { - for(let work of worksFilter) { - document.querySelector(".gallery").innerHTML += `
+ const categorieId = event.target.dataset.id; + document.querySelector(".gallery").innerHTML = ""; + const worksFilter = works.filter( + (obj) => obj.category.id == categorieId + ); + if (categorieId >= 1) { + for (let work of worksFilter) { + document.querySelector(".gallery").innerHTML += `
${work.title}
-
`}; +
`; + } } else { getWorks(); } }); -}; +} filterCategories(); - diff --git a/FrontEnd/index_edit.html b/FrontEnd/index_edit.html index c7e8610d7..44c56d6ba 100644 --- a/FrontEnd/index_edit.html +++ b/FrontEnd/index_edit.html @@ -34,20 +34,17 @@

Sophie Bluel Architecte d'intérieur

-
+
- - - -
- -
+ +
+
-

Designer d'espace

Je raconte votre histoire, je valorise vos idées. Je vous accompagne de la conception à la livraison finale du chantier.

Chaque projet sera étudié en commun, de façon à mettre en valeur les volumes, les matières et les couleurs dans le respect de l’esprit des lieux et le choix adapté des matériaux. Le suivi du chantier sera assuré dans le souci du détail, le respect du planning et du budget.

@@ -77,9 +73,12 @@

Mes Projets

diff --git a/FrontEnd/index_edit.js b/FrontEnd/index_edit.js index 4c5e8b767..8a0afe210 100644 --- a/FrontEnd/index_edit.js +++ b/FrontEnd/index_edit.js @@ -39,4 +39,42 @@ window.addEventListener('keydown', function (e){ if (e.key === "Escape" || e.key === "Esc") { closeModal(e); }; -}); \ No newline at end of file +}); + +let works = window.localStorage.getItem("works"); + +if (works === null){ +// Récupération des pièces depuis l'API + const reponse = await fetch("http://localhost:5678/api/works"); + works = await reponse.json(); + // Transformation des pièces en JSON + const valueWorks = JSON.stringify(works); + // Stockage des informations dans le localStorage + window.localStorage.setItem("works", valueWorks); +}else{ + works = JSON.parse(works); +} + +// Recupérer et afficher tous les travaux // +async function getWorks() { + for(let work of works) { + document.querySelector(".gallery-edit").innerHTML += `
+ + +
éditer
+
` + }; +}; +getWorks(); + +//effacer image de la galerie suite à click sur icone// +async function removeGallery() { + const photoRemove = document.querySelector(".photo-remove"); + photoRemove.addEventListener("click", async function (event) { + const photoId = event.target.dataset.id; + console.log(photoId); + document.querySelector(".gallery-edit").innerHTML =""; + window.localStorage.removeItem( ); + getWorks(); + }); +}; \ No newline at end of file diff --git a/FrontEnd/indexbis.js b/FrontEnd/indexbis.js new file mode 100644 index 000000000..5305434ad --- /dev/null +++ b/FrontEnd/indexbis.js @@ -0,0 +1,74 @@ +// afficher tous les travaux // +async function displayWorks() { + // Récupération des travaux depuis l'API + const reponse = await fetch("http://localhost:5678/api/works"); + const works = await reponse.json(); + for (let work of works) { + // Récupération de l'élément du DOM qui accueillera les travaux + const portfolioGallery = document.querySelector(".gallery"); + // Création d’une balise dédiée à un work + const workElement = document.createElement("figure"); + // Création des balises + const imageElement = document.createElement("img"); + imageElement.src = work.imageUrl; + imageElement.alt = work.title; + imageElement.crossOrigin = "anonymous"; + const titleElement = document.createElement("figcaption"); + titleElement.innerText = work.title; + + // On rattache la balise figure à la section gallery + portfolioGallery.appendChild(workElement); + // On rattache l’image et figcaption à workElement (la balise figure) + workElement.appendChild(imageElement); + workElement.appendChild(titleElement); + }; +}; +displayWorks(); + +// Recupérer et afficher toutes les catégories // +async function displayCategories() { + const reponse = await fetch("http://localhost:5678/api/categories"); + const categories = await reponse.json(); + for (let categorie of categories) { + const buttonsFilter = document.querySelector(".filtres") + const buttonFilter = document.createElement("button"); + buttonFilter.class = "categories-btn"; + buttonFilter.innerText = categorie.name; + buttonsFilter.appendChild(buttonFilter); + } +} +displayCategories(); + +// Filtrer les travaux et affichage par catégorie // +async function filterCategories() { + const filterButton = document.querySelector(".filtres"); + filterButton.addEventListener("click", async function (event) { + const categorieName = event.target.innerText; + document.querySelector(".gallery").innerHTML = ""; + const reponse = await fetch("http://localhost:5678/api/works"); + const works = await reponse.json(); + if (categorieName != "Tous") + for (let work of works) { + if (categorieName === work.category.name) { + const portfolioGallery = document.querySelector(".gallery"); + // Création d’une balise dédiée à un work + const workElement = document.createElement("figure"); + // Création des balises + const imageElement = document.createElement("img"); + imageElement.src = work.imageUrl; + imageElement.alt = work.title; + imageElement.crossOrigin = "anonymous"; + const titleElement = document.createElement("figcaption"); + titleElement.innerText = work.title; + // On rattache la balise figure à la section gallery + portfolioGallery.appendChild(workElement); + // On rattache l’image et figcaption à workElement (la balise figure) + workElement.appendChild(imageElement); + workElement.appendChild(titleElement); + } + } else { + displayWorks(); + } + }) + }; +filterCategories(); diff --git a/FrontEnd/login.js b/FrontEnd/login.js index 3c3363c1c..811756e93 100644 --- a/FrontEnd/login.js +++ b/FrontEnd/login.js @@ -1,32 +1,32 @@ - const formLogin = document.querySelector("form"); - formLogin.addEventListener("submit", async function(event) { - event.preventDefault();/*bloque rechargement de la page*/ - - // creation objet login - const login = { +const formLogin = document.querySelector("form"); +formLogin.addEventListener("submit", async function (event) { + event.preventDefault(); /*bloque rechargement de la page*/ + + // creation objet login + const login = { email: document.querySelector("[name='email']").value, - password: document.querySelector ("[name='password']").value - }; - - // envoi information sur l'API login - const responseLogin = await fetch("http://localhost:5678/api/users/login", { - method : "POST", - headers : {"Content-Type": "application/json"}, - body : JSON.stringify(login) - }); + password: document.querySelector("[name='password']").value, + }; + + // envoi information sur l'API login + const responseLogin = await fetch("http://localhost:5678/api/users/login", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(login), + }); - const response = responseLogin.json(); - //récupération token et statut de la réponse - const reponseToken = response.token; - const reponseState = responseLogin.ok; - - // Retour en fonction du statut de la réponse - if (reponseState) { - sessionStorage.setItem("Token", reponseToken); - window.location.replace("index_edit.html"); - } else { - window.alert("Erreur dans l'identifiant ou le mot de passe"); + const response = await responseLogin.json(); + //récupération token et statut de la réponse + console.log(response) + const reponseToken = response.token; + const reponseState = responseLogin.ok; + + // Retour en fonction du statut de la réponse + if (reponseState) { + localStorage.setItem("Token", reponseToken); + window.location.replace("index_edit.html"); + } else { + window.alert("Erreur dans l'identifiant ou le mot de passe"); window.location.replace("login.html"); - }; + } }); - From 5eff7bb21f015829955e2a215da4fd5516f2ca38 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Sun, 5 Feb 2023 19:43:44 +0100 Subject: [PATCH 09/19] save : 230205 --- FrontEnd/assets/{ => CSS}/style.css | 133 +++++++++++------- FrontEnd/{indexbis.js => assets/JS/index.js} | 45 +++++- FrontEnd/assets/JS/login.js | 39 +++++ FrontEnd/assets/JS/loginbis.js | 43 ++++++ .../JS/modal copy.js} | 61 ++++---- FrontEnd/assets/JS/modal.js | 108 ++++++++++++++ FrontEnd/index.html | 98 ++++++++++++- FrontEnd/index.js | 61 -------- FrontEnd/index_edit.html | 4 +- FrontEnd/login.html | 10 +- FrontEnd/login.js | 32 ----- 11 files changed, 446 insertions(+), 188 deletions(-) rename FrontEnd/assets/{ => CSS}/style.css (85%) rename FrontEnd/{indexbis.js => assets/JS/index.js} (69%) create mode 100644 FrontEnd/assets/JS/login.js create mode 100644 FrontEnd/assets/JS/loginbis.js rename FrontEnd/{index_edit.js => assets/JS/modal copy.js} (51%) create mode 100644 FrontEnd/assets/JS/modal.js delete mode 100644 FrontEnd/index.js delete mode 100644 FrontEnd/login.js diff --git a/FrontEnd/assets/style.css b/FrontEnd/assets/CSS/style.css similarity index 85% rename from FrontEnd/assets/style.css rename to FrontEnd/assets/CSS/style.css index 13f9f9d95..f2cc303df 100644 --- a/FrontEnd/assets/style.css +++ b/FrontEnd/assets/CSS/style.css @@ -55,6 +55,14 @@ body { } .edition-mode { + display: none; +} + +.edition-mode.active { + display: contents; +} + +#edition-header { display: flex; justify-content: center; align-items: center; @@ -89,7 +97,7 @@ body { header { display: flex; justify-content: space-between; - margin: 50px 0; + margin: 40px 0; } section { margin: 50px 0; @@ -184,62 +192,76 @@ form input { form a { color: #3D3D3D; } +.error-message-absence { + color: white; +} +.error-message-absence.active{ + color: black; + padding: 2%; + border: 2px dashed #D65353; +} +.error-message-error { + color: white; +} +.error-message-error.active { + color: black; + padding: 2%; + border: 2px dashed #D65353; +} /* bouton lien modifier modale */ .square-pen { position: relative; height: 18px; width: 18px; + margin-right: 8px;; } .pen { position: absolute; left: 5px; bottom: 6px; } -button[type="button"] { + +.edition-mode button[type="button"]{ display: flex; - width: 85px; justify-content: space-between; - border: none; - background-color: white; -} -/*integrer bouton modifier au titre projet*/ -.section-header { - display: flex; - justify-content: center; - align-items: baseline; + align-items: center; + box-sizing: border-box; + font-family: 'Work Sans'; } -.section-header h2 { - margin-right: 20px; +#edition-article.edition-mode { + margin: 0; + padding: 0; + border: 2px solid blue; } + + /* modale*/ .modal{ position: fixed; - display: flex; - align-items: center; - justify-content: center; + display: none; top: 0; left: 0; width: 100%; height: 100%; + z-index: 1; /* Sit on top */ + overflow: auto; background: rgba(0, 0,0, 0.4); } .modal-container { display: flex; flex-direction: column; - align-items: center; - margin: 0 auto; + padding: 4%; background-color: white; width: 630px; border-radius: 10px; - padding: 4% 4% 0 4%; - position: absolute; + margin: 15% auto; + + } -#cross { - position: absolute; - top: 20px; - right: 30px; +.modal-close { + align-self: flex-end; border: none; background-color: white; } @@ -247,22 +269,24 @@ button[type="button"] { .modal-container h3 { font-size: 26px; line-height: 30px; + text-align: center; } -.gallery-edit { - width: 80%; +.gallery-modal { + width: 90%; display: grid; grid-template-columns: 1fr 1fr 1fr 1fr 1fr; grid-column-gap: 10px; grid-row-gap: 10px; - margin: 40px; + margin: auto; + padding: 40px 0 20px 0; } -.gallery-edit-img { +.gallery-modal figure img { width: 100%; } -.gallery-edit figcaption { +.gallery-modal figcaption { display: inline; - margin-left: -20px; + margin-left: -16px; } .photo-remove { @@ -282,26 +306,28 @@ button[type="button"] { background-color: #1D6154; font-family: 'Syne'; text-align: center; - margin: 30px 0 30px 0; + align-self: center; text-decoration-line: none; + margin: 16px 0 16px 0; } .modal-container input[type="button"] { color:#D65353; background-color: white; line-height: 17px; border: none; - margin-bottom: 40px; font-family: 'Syne'; font-weight: 400; } /* modale ajout photo */ +.modal-icon { + display: flex; + justify-content: space-between; +} #arrow-back { - position: absolute; - top: 20px; - left: 30px; border: none; background-color: white; } + .container-add-photo { display: flex; flex-direction: column; @@ -388,12 +414,6 @@ select{ flex: 1; } -#photo-presentation button { - width: 85px; - height: 16px; - margin: 10px 0 8px 50px; -} - #introduction img { display: block; margin: auto; @@ -406,11 +426,6 @@ select{ line-height: 16px; text-align: left; } -#introduction article button { - width: 85px; - height: 16px; - margin-bottom: 16px; -} #introduction h2 { margin-bottom: 1em; @@ -420,6 +435,8 @@ select{ margin-bottom: 0.5em; } #portfolio h2 { + display: flex; + justify-content: center; text-align: center; margin-bottom: 1em; } @@ -429,26 +446,36 @@ select{ display: flex; justify-content: center; margin-bottom: 2rem; + margin-left: 3rem; } -.filtres button { +.filter-btn { border-radius: 60px; text-align: center; border: 1px solid #1D6154; + color: #1D6154; + background: white; + padding: 9px 30px 9px 28px; + font-size: 16px; + font-weight: 700; + font-family: 'Syne'; + line-height: 19px; + margin-right: 8px; +} + +.filter-btn.active { color: white; background: #1D6154; + border-radius: 60px; + text-align: center; + border: 1px solid #1D6154; padding: 9px 30px 9px 28px; font-size: 16px; font-weight: 700; font-family: 'Syne'; line-height: 19px; - + margin-right: 8px; } -.filtres .categories-btn { - color: #1D6154; - background: white; - margin-left: 8px; -} .gallery { width: 90%; display: grid; diff --git a/FrontEnd/indexbis.js b/FrontEnd/assets/JS/index.js similarity index 69% rename from FrontEnd/indexbis.js rename to FrontEnd/assets/JS/index.js index 5305434ad..a70d93729 100644 --- a/FrontEnd/indexbis.js +++ b/FrontEnd/assets/JS/index.js @@ -32,18 +32,32 @@ async function displayCategories() { for (let categorie of categories) { const buttonsFilter = document.querySelector(".filtres") const buttonFilter = document.createElement("button"); - buttonFilter.class = "categories-btn"; + buttonFilter.className = "filter-btn"; buttonFilter.innerText = categorie.name; buttonsFilter.appendChild(buttonFilter); } } displayCategories(); -// Filtrer les travaux et affichage par catégorie // async function filterCategories() { + const defaultButton = document.querySelector("#all"); + // Par défaut, la catégorie Tous est cliquée + defaultButton.classList.add("active") + //const buttonsFilter = document.querySelectorAll(".filter-btn"); const filterButton = document.querySelector(".filtres"); filterButton.addEventListener("click", async function (event) { const categorieName = event.target.innerText; + const buttonsFilter = document.querySelectorAll(".filter-btn"); + console.log(buttonsFilter) + for (let button of buttonsFilter) { + button.addEventListener("click", () => { + for (let removeActive of buttonsFilter) { + // Retire la classe active + removeActive.classList.remove("active"); + // Ajoute la classe active au bouton + button.classList.add("active"); + }; + }); document.querySelector(".gallery").innerHTML = ""; const reponse = await fetch("http://localhost:5678/api/works"); const works = await reponse.json(); @@ -68,7 +82,28 @@ async function filterCategories() { } } else { displayWorks(); - } - }) - }; + } + } + }); +} filterCategories(); + +// affichage mode edition +const token = localStorage.getItem("Token") + +if (token){ + const modeEdition = document.querySelectorAll(".edition-mode"); + for (let data of modeEdition) { + data.classList.add("active"); + } + const modeEditionFilter = document.querySelector(".filtres"); + modeEditionFilter.style.display = "none"; + const logout = document.getElementById("login-logout") + logout.setAttribute("href", "./index.html"); + logout.innerText = "logout"; + logout.style.fontWeight ="700"; + logout.addEventListener("click", function (event) { + localStorage.removeItem("Token"); + } + ) + }; \ No newline at end of file diff --git a/FrontEnd/assets/JS/login.js b/FrontEnd/assets/JS/login.js new file mode 100644 index 000000000..04cd97850 --- /dev/null +++ b/FrontEnd/assets/JS/login.js @@ -0,0 +1,39 @@ +const formLogin = document.querySelector("form"); +formLogin.addEventListener("submit", async function (event) { + event.preventDefault(); /*bloque rechargement de la page*/ + + // creation objet login + const login = { + email: document.querySelector("[name='email']").value, + password: document.querySelector("[name='password']").value, + }; + if (!login.value) { + const messageError = document.querySelector(".error-message-absence"); + messageError.classList.add("active"); + } else { + // envoi information sur l'API login + const responseLogin = await fetch("http://localhost:5678/api/users/login", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(login), + }); + const response = await responseLogin.json(); + //récupération token et statut de la réponse + console.log(response); + const reponseToken = response.token; + const reponseState = responseLogin.ok; + + // Retour en fonction du statut de la réponse + if (reponseState) { + localStorage.setItem("Token", reponseToken); + window.location.replace("index_edit.html"); + } else { + window.alert("Erreur dans l'identifiant ou le mot de passe"); + window.location.replace("login.html"); + } + }; +}); + + + + \ No newline at end of file diff --git a/FrontEnd/assets/JS/loginbis.js b/FrontEnd/assets/JS/loginbis.js new file mode 100644 index 000000000..dfeebfa2b --- /dev/null +++ b/FrontEnd/assets/JS/loginbis.js @@ -0,0 +1,43 @@ +const formLogin = document.querySelector("form"); +formLogin.addEventListener("submit", async function (event) { + event.preventDefault(); /*bloque rechargement de la page*/ + + const emailForm = document.querySelector("[name='email']").value; + const passwordForm = document.querySelector("[name='password']").value; + + if (emailForm === "" || passwordForm === "") { + const messageError = document.querySelector(".error-message-absence"); + messageError.classList.add("active"); + } else { + + // creation objet login + const login = { + email: document.querySelector("[name='email']").value, + password: document.querySelector("[name='password']").value, + }; + // envoi information sur l'API login + const responseLogin = await fetch("http://localhost:5678/api/users/login", { + method: "POST", + headers: { "Content-Type": "application/json" }, + body: JSON.stringify(login), + }); + const response = await responseLogin.json(); + //récupération token et statut de la réponse + const reponseToken = response.token; + const reponseState = responseLogin.ok; + + // Retour en fonction du statut de la réponse + if (reponseState) { + localStorage.setItem("Token", reponseToken); + console.log(reponseToken) + window.location.replace("index.html"); + } else { + const messageError = document.querySelector(".error-message-error"); + messageError.classList.add("active"); + } + }; +}); + + + + \ No newline at end of file diff --git a/FrontEnd/index_edit.js b/FrontEnd/assets/JS/modal copy.js similarity index 51% rename from FrontEnd/index_edit.js rename to FrontEnd/assets/JS/modal copy.js index 8a0afe210..ecfacda1e 100644 --- a/FrontEnd/index_edit.js +++ b/FrontEnd/assets/JS/modal copy.js @@ -7,7 +7,7 @@ const openModal = function(e) { target.removeAttribute("aria-hidden"); /*supprime attribut pour permettre apparition modale*/ target.setAttribute("aria-modal", "true");/*cf accessibilité*/ modal = target; - /*modal.addEventListener("click", closeModal);*/ + modal.addEventListener("click", closeModal); modal.querySelector(".js-modal-close").addEventListener("click", closeModal); modal.querySelector(".js-modal-close-return").addEventListener("click", closeModalReturn); window.addEventListener("click", (event) => { @@ -21,14 +21,14 @@ const closeModal = function(e) { modal.style.display = "none"; modal.setAttribute("aria-hidden", "true"); /*ajoute attribut pour disparition modale*/ modal.removeAttribute("aria-modal"); - /*modal.removeEventListener("click", closeModal);*/ + modal.removeEventListener("click", closeModal); modal.querySelector(".js-modal-close").removeEventListener("click", closeModal); modal = null; } const closeModalReturn = function (e) { e.preventDefault(); - window.location.replace("index_edit.html"); + window.location.replace("index.html"); } document.querySelectorAll(".modification-link").forEach(a => { @@ -41,31 +41,40 @@ window.addEventListener('keydown', function (e){ }; }); -let works = window.localStorage.getItem("works"); -if (works === null){ -// Récupération des pièces depuis l'API - const reponse = await fetch("http://localhost:5678/api/works"); - works = await reponse.json(); - // Transformation des pièces en JSON - const valueWorks = JSON.stringify(works); - // Stockage des informations dans le localStorage - window.localStorage.setItem("works", valueWorks); -}else{ - works = JSON.parse(works); -} - -// Recupérer et afficher tous les travaux // -async function getWorks() { - for(let work of works) { - document.querySelector(".gallery-edit").innerHTML += `
- - -
éditer
-
` - }; +// afficher tous les travaux // +async function displayWorksModal() { + // Récupération des travaux depuis l'API + const reponse = await fetch("http://localhost:5678/api/works"); + const works = await reponse.json(); + console.log(works) + for (let work of works) { + // Récupération de l'élément du DOM qui accueillera les travaux + const modalGallery = document.querySelector(".gallery-modal"); + // Création d’une balise dédiée à un work + const workElement = document.createElement("figure"); + // Création des balises + const imageElement = document.createElement("img"); + imageElement.src = work.imageUrl; + imageElement.alt = work.title; + imageElement.crossOrigin = "anonymous"; + const buttonElement = document.createElement("button"); + buttonElement.className ="photo-remove"; + //buttonElement.id = work.id; + const imageButtonElement = document.createElement("img"); + imageButtonElement.src ="./assets/icons/remove.png"; + imageButtonElement.alt ="remove"; + const figcaptionElement = document.createElement("figcaption"); + figcaptionElement.innerText = "éditer"; + + modalGallery.appendChild(workElement); + workElement.appendChild(imageElement); + workElement.appendChild(buttonElement); + buttonElement.appendChild(imageButtonElement); + workElement.appendChild(figcaptionElement); + }; }; -getWorks(); +displayWorksModal(); //effacer image de la galerie suite à click sur icone// async function removeGallery() { diff --git a/FrontEnd/assets/JS/modal.js b/FrontEnd/assets/JS/modal.js new file mode 100644 index 000000000..3c4a064ee --- /dev/null +++ b/FrontEnd/assets/JS/modal.js @@ -0,0 +1,108 @@ +// récupère la 1ere modale +var firstModal = document.getElementById("modal-projet"); + +// récupère le bouton qui ouvre la modale +var btnOpenModal = document.getElementById("modal-projet-btn"); + +// récupère le bouton qui ferme la modale +var btnCloseModal = document.getElementById("first-modal-close"); + +// ouverture de la modale au click +btnOpenModal.onclick = function() { + firstModal.style.display = "block"; +}; + +// fermeture de la modale +btnCloseModal.onclick = function() { + firstModal.style.display = "none"; +}; + +// fermeture de la modale si clic en dehors de la modale +window.onclick = function(event) { + if (event.target == firstModal) { + firstModal.style.display = "none"; + secondModal.style.display = "none"; + } +}; + +// récupère la 2eme modale +var secondModal = document.getElementById("modal-projet-photo"); + +// récupère le bouton qui ouvre la modale +var btnOpenSecondModal = document.getElementById("btn-add-photo"); + +// récupère le bouton qui ferme la modale +var btnCloseModal = document.getElementById("second-modal-close"); + +// récupère le bouton qui retourne à la 1ere modale +var btnReturnModal = document.getElementById("arrow-back") + +// ouverture de la 2eme modale au click +btnOpenSecondModal.onclick = function() { + firstModal.style.display = "none"; + secondModal.style.display = "block"; +}; + +// retour sur la 1ere modale +btnReturnModal.onclick = function() { + secondModal.style.display = "none"; + firstModal.style.display = "block"; +} +// fermeture de la modale +btnCloseModal.onclick = function() { + secondModal.style.display = "none"; +}; + +// fermeture de la modale si clic en dehors de la modale +window.onclick = function(event) { + if (event.target == secondModal) { + secondModal.style.display = "none"; + firstModal.style.display = "none"; + } +}; + +// afficher tous les travaux // +async function displayWorksModal() { + // Récupération des travaux depuis l'API + const reponse = await fetch("http://localhost:5678/api/works"); + const works = await reponse.json(); + for (let work of works) { + // Récupération de l'élément du DOM qui accueillera les travaux + const modalGallery = document.querySelector(".gallery-modal"); + // Création d’une balise dédiée à un work + const workElement = document.createElement("figure"); + // Création des balises + const imageElement = document.createElement("img"); + imageElement.src = work.imageUrl; + imageElement.alt = work.title; + imageElement.crossOrigin = "anonymous"; + const buttonElement = document.createElement("button"); + buttonElement.className ="photo-remove"; + //buttonElement.id = work.id; + const imageButtonElement = document.createElement("img"); + imageButtonElement.src ="./assets/icons/remove.png"; + imageButtonElement.alt ="remove"; + const figcaptionElement = document.createElement("figcaption"); + figcaptionElement.innerText = "éditer"; + + modalGallery.appendChild(workElement); + workElement.appendChild(imageElement); + workElement.appendChild(buttonElement); + buttonElement.appendChild(imageButtonElement); + workElement.appendChild(figcaptionElement); + }; +}; +displayWorksModal(); + +/* +//effacer image de la galerie suite à click sur icone// +async function removeGallery() { + const photoRemove = document.querySelector(".photo-remove"); + photoRemove.addEventListener("click", async function (event) { + const photoId = event.target.dataset.id; + console.log(photoId); + document.querySelector(".gallery-edit").innerHTML =""; + window.localStorage.removeItem( ); + getWorks(); + }); +};*/ \ No newline at end of file diff --git a/FrontEnd/index.html b/FrontEnd/index.html index 9b6ffc4c5..c8702f620 100644 --- a/FrontEnd/index.html +++ b/FrontEnd/index.html @@ -8,17 +8,77 @@ - - + + + + + + + + +
+
+
+ icone carré + icone crayon +
+ Mode édition + +
+

Sophie Bluel Architecte d'intérieur

@@ -27,8 +87,26 @@

Sophie Bluel Architecte d'intérieur

+
+ +
+
+ +

Designer d'espace

Je raconte votre histoire, je valorise vos idées. Je vous accompagne de la conception à la livraison finale du chantier.

Chaque projet sera étudié en commun, de façon à mettre en valeur les volumes, les matières et les couleurs dans le respect de l’esprit des lieux et le choix adapté des matériaux. Le suivi du chantier sera assuré dans le souci du détail, le respect du planning et du budget.

@@ -36,9 +114,19 @@

Designer d'espace

-

Mes Projets

+

Mes Projets +
+ +
+

- +
diff --git a/FrontEnd/index.js b/FrontEnd/index.js deleted file mode 100644 index 886029eee..000000000 --- a/FrontEnd/index.js +++ /dev/null @@ -1,61 +0,0 @@ -let works = window.localStorage.getItem("works"); - -if (works === null) { - // Récupération des pièces depuis l'API - const reponse = await fetch("http://localhost:5678/api/works"); - works = await reponse.json(); - // Transformation des pièces en JSON - const valueWorks = JSON.stringify(works); - // Stockage des informations dans le localStorage - window.localStorage.setItem("works", valueWorks); -} else { - works = JSON.parse(works); -} - -// Recupérer et afficher tous les travaux // -async function getWorks() { - for (let work of works) { - document.querySelector(".gallery").innerHTML += ` -
- -
${work.title}
-
- `; - } -} -getWorks(); - -// Recupérer et afficher toutes les catégories // -async function getCategories() { - const reponse = await fetch("http://localhost:5678/api/categories"); - const data = await reponse.json(); - for (let categorie of data) { - document.querySelector( - ".filtres" - ).innerHTML += ``; - } -} -getCategories(); - -// Filtrer les travaux et affichages par catégorie // -async function filterCategories() { - const filterButton = document.querySelector(".filtres"); - filterButton.addEventListener("click", async function (event) { - const categorieId = event.target.dataset.id; - document.querySelector(".gallery").innerHTML = ""; - const worksFilter = works.filter( - (obj) => obj.category.id == categorieId - ); - if (categorieId >= 1) { - for (let work of worksFilter) { - document.querySelector(".gallery").innerHTML += `
- -
${work.title}
-
`; - } - } else { - getWorks(); - } - }); -} -filterCategories(); diff --git a/FrontEnd/index_edit.html b/FrontEnd/index_edit.html index 44c56d6ba..84cd38edf 100644 --- a/FrontEnd/index_edit.html +++ b/FrontEnd/index_edit.html @@ -8,9 +8,9 @@ - + - +
diff --git a/FrontEnd/login.html b/FrontEnd/login.html index 7a851206e..47e32896c 100644 --- a/FrontEnd/login.html +++ b/FrontEnd/login.html @@ -8,8 +8,8 @@ - - + +
@@ -26,10 +26,12 @@

Sophie Bluel Architecte d'intérieur

Log In

+

Veuillez compléter votre e-mail et votre mot de passe

+

Erreur dans l'e-mail ou le mot de passe

- + - + Mot de passe oublié
diff --git a/FrontEnd/login.js b/FrontEnd/login.js deleted file mode 100644 index 811756e93..000000000 --- a/FrontEnd/login.js +++ /dev/null @@ -1,32 +0,0 @@ -const formLogin = document.querySelector("form"); -formLogin.addEventListener("submit", async function (event) { - event.preventDefault(); /*bloque rechargement de la page*/ - - // creation objet login - const login = { - email: document.querySelector("[name='email']").value, - password: document.querySelector("[name='password']").value, - }; - - // envoi information sur l'API login - const responseLogin = await fetch("http://localhost:5678/api/users/login", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(login), - }); - - const response = await responseLogin.json(); - //récupération token et statut de la réponse - console.log(response) - const reponseToken = response.token; - const reponseState = responseLogin.ok; - - // Retour en fonction du statut de la réponse - if (reponseState) { - localStorage.setItem("Token", reponseToken); - window.location.replace("index_edit.html"); - } else { - window.alert("Erreur dans l'identifiant ou le mot de passe"); - window.location.replace("login.html"); - } -}); From f9bbaae96bc1df9d492e641a8dbe91f56bb36dc1 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Sun, 19 Feb 2023 19:06:59 +0100 Subject: [PATCH 10/19] save : 230217 --- FrontEnd/assets/JS/index.js | 109 ------------------ FrontEnd/assets/JS/loginbis.js | 43 ------- FrontEnd/assets/JS/modal copy.js | 89 --------------- FrontEnd/assets/JS/modal.js | 108 ------------------ FrontEnd/assets/{CSS => css}/style.css | 49 ++++---- FrontEnd/assets/js/fetch.js | 7 ++ FrontEnd/assets/js/index.js | 102 +++++++++++++++++ FrontEnd/assets/{JS => js}/login.js | 28 +++-- FrontEnd/assets/js/modal.js | 152 +++++++++++++++++++++++++ FrontEnd/index.html | 82 ++++--------- FrontEnd/index_edit.html | 148 ------------------------ FrontEnd/login.html | 7 +- 12 files changed, 324 insertions(+), 600 deletions(-) delete mode 100644 FrontEnd/assets/JS/index.js delete mode 100644 FrontEnd/assets/JS/loginbis.js delete mode 100644 FrontEnd/assets/JS/modal copy.js delete mode 100644 FrontEnd/assets/JS/modal.js rename FrontEnd/assets/{CSS => css}/style.css (94%) create mode 100644 FrontEnd/assets/js/fetch.js create mode 100644 FrontEnd/assets/js/index.js rename FrontEnd/assets/{JS => js}/login.js (61%) create mode 100644 FrontEnd/assets/js/modal.js delete mode 100644 FrontEnd/index_edit.html diff --git a/FrontEnd/assets/JS/index.js b/FrontEnd/assets/JS/index.js deleted file mode 100644 index a70d93729..000000000 --- a/FrontEnd/assets/JS/index.js +++ /dev/null @@ -1,109 +0,0 @@ -// afficher tous les travaux // -async function displayWorks() { - // Récupération des travaux depuis l'API - const reponse = await fetch("http://localhost:5678/api/works"); - const works = await reponse.json(); - for (let work of works) { - // Récupération de l'élément du DOM qui accueillera les travaux - const portfolioGallery = document.querySelector(".gallery"); - // Création d’une balise dédiée à un work - const workElement = document.createElement("figure"); - // Création des balises - const imageElement = document.createElement("img"); - imageElement.src = work.imageUrl; - imageElement.alt = work.title; - imageElement.crossOrigin = "anonymous"; - const titleElement = document.createElement("figcaption"); - titleElement.innerText = work.title; - - // On rattache la balise figure à la section gallery - portfolioGallery.appendChild(workElement); - // On rattache l’image et figcaption à workElement (la balise figure) - workElement.appendChild(imageElement); - workElement.appendChild(titleElement); - }; -}; -displayWorks(); - -// Recupérer et afficher toutes les catégories // -async function displayCategories() { - const reponse = await fetch("http://localhost:5678/api/categories"); - const categories = await reponse.json(); - for (let categorie of categories) { - const buttonsFilter = document.querySelector(".filtres") - const buttonFilter = document.createElement("button"); - buttonFilter.className = "filter-btn"; - buttonFilter.innerText = categorie.name; - buttonsFilter.appendChild(buttonFilter); - } -} -displayCategories(); - -async function filterCategories() { - const defaultButton = document.querySelector("#all"); - // Par défaut, la catégorie Tous est cliquée - defaultButton.classList.add("active") - //const buttonsFilter = document.querySelectorAll(".filter-btn"); - const filterButton = document.querySelector(".filtres"); - filterButton.addEventListener("click", async function (event) { - const categorieName = event.target.innerText; - const buttonsFilter = document.querySelectorAll(".filter-btn"); - console.log(buttonsFilter) - for (let button of buttonsFilter) { - button.addEventListener("click", () => { - for (let removeActive of buttonsFilter) { - // Retire la classe active - removeActive.classList.remove("active"); - // Ajoute la classe active au bouton - button.classList.add("active"); - }; - }); - document.querySelector(".gallery").innerHTML = ""; - const reponse = await fetch("http://localhost:5678/api/works"); - const works = await reponse.json(); - if (categorieName != "Tous") - for (let work of works) { - if (categorieName === work.category.name) { - const portfolioGallery = document.querySelector(".gallery"); - // Création d’une balise dédiée à un work - const workElement = document.createElement("figure"); - // Création des balises - const imageElement = document.createElement("img"); - imageElement.src = work.imageUrl; - imageElement.alt = work.title; - imageElement.crossOrigin = "anonymous"; - const titleElement = document.createElement("figcaption"); - titleElement.innerText = work.title; - // On rattache la balise figure à la section gallery - portfolioGallery.appendChild(workElement); - // On rattache l’image et figcaption à workElement (la balise figure) - workElement.appendChild(imageElement); - workElement.appendChild(titleElement); - } - } else { - displayWorks(); - } - } - }); -} -filterCategories(); - -// affichage mode edition -const token = localStorage.getItem("Token") - -if (token){ - const modeEdition = document.querySelectorAll(".edition-mode"); - for (let data of modeEdition) { - data.classList.add("active"); - } - const modeEditionFilter = document.querySelector(".filtres"); - modeEditionFilter.style.display = "none"; - const logout = document.getElementById("login-logout") - logout.setAttribute("href", "./index.html"); - logout.innerText = "logout"; - logout.style.fontWeight ="700"; - logout.addEventListener("click", function (event) { - localStorage.removeItem("Token"); - } - ) - }; \ No newline at end of file diff --git a/FrontEnd/assets/JS/loginbis.js b/FrontEnd/assets/JS/loginbis.js deleted file mode 100644 index dfeebfa2b..000000000 --- a/FrontEnd/assets/JS/loginbis.js +++ /dev/null @@ -1,43 +0,0 @@ -const formLogin = document.querySelector("form"); -formLogin.addEventListener("submit", async function (event) { - event.preventDefault(); /*bloque rechargement de la page*/ - - const emailForm = document.querySelector("[name='email']").value; - const passwordForm = document.querySelector("[name='password']").value; - - if (emailForm === "" || passwordForm === "") { - const messageError = document.querySelector(".error-message-absence"); - messageError.classList.add("active"); - } else { - - // creation objet login - const login = { - email: document.querySelector("[name='email']").value, - password: document.querySelector("[name='password']").value, - }; - // envoi information sur l'API login - const responseLogin = await fetch("http://localhost:5678/api/users/login", { - method: "POST", - headers: { "Content-Type": "application/json" }, - body: JSON.stringify(login), - }); - const response = await responseLogin.json(); - //récupération token et statut de la réponse - const reponseToken = response.token; - const reponseState = responseLogin.ok; - - // Retour en fonction du statut de la réponse - if (reponseState) { - localStorage.setItem("Token", reponseToken); - console.log(reponseToken) - window.location.replace("index.html"); - } else { - const messageError = document.querySelector(".error-message-error"); - messageError.classList.add("active"); - } - }; -}); - - - - \ No newline at end of file diff --git a/FrontEnd/assets/JS/modal copy.js b/FrontEnd/assets/JS/modal copy.js deleted file mode 100644 index ecfacda1e..000000000 --- a/FrontEnd/assets/JS/modal copy.js +++ /dev/null @@ -1,89 +0,0 @@ -let modal = null - -const openModal = function(e) { - e.preventDefault();/* bloque fonctionnement normal du click*/ - const target = document.querySelector(e.target.getAttribute("href"));/*élément cible*/ - target.style.display = null ; - target.removeAttribute("aria-hidden"); /*supprime attribut pour permettre apparition modale*/ - target.setAttribute("aria-modal", "true");/*cf accessibilité*/ - modal = target; - modal.addEventListener("click", closeModal); - modal.querySelector(".js-modal-close").addEventListener("click", closeModal); - modal.querySelector(".js-modal-close-return").addEventListener("click", closeModalReturn); - window.addEventListener("click", (event) => { - closeModal(dialog) -}); -}; - -const closeModal = function(e) { - if (modal === null) return - e.preventDefault(); - modal.style.display = "none"; - modal.setAttribute("aria-hidden", "true"); /*ajoute attribut pour disparition modale*/ - modal.removeAttribute("aria-modal"); - modal.removeEventListener("click", closeModal); - modal.querySelector(".js-modal-close").removeEventListener("click", closeModal); - modal = null; -} - -const closeModalReturn = function (e) { - e.preventDefault(); - window.location.replace("index.html"); -} - -document.querySelectorAll(".modification-link").forEach(a => { - a.addEventListener("click", openModal) -}); - -window.addEventListener('keydown', function (e){ - if (e.key === "Escape" || e.key === "Esc") { - closeModal(e); - }; -}); - - -// afficher tous les travaux // -async function displayWorksModal() { - // Récupération des travaux depuis l'API - const reponse = await fetch("http://localhost:5678/api/works"); - const works = await reponse.json(); - console.log(works) - for (let work of works) { - // Récupération de l'élément du DOM qui accueillera les travaux - const modalGallery = document.querySelector(".gallery-modal"); - // Création d’une balise dédiée à un work - const workElement = document.createElement("figure"); - // Création des balises - const imageElement = document.createElement("img"); - imageElement.src = work.imageUrl; - imageElement.alt = work.title; - imageElement.crossOrigin = "anonymous"; - const buttonElement = document.createElement("button"); - buttonElement.className ="photo-remove"; - //buttonElement.id = work.id; - const imageButtonElement = document.createElement("img"); - imageButtonElement.src ="./assets/icons/remove.png"; - imageButtonElement.alt ="remove"; - const figcaptionElement = document.createElement("figcaption"); - figcaptionElement.innerText = "éditer"; - - modalGallery.appendChild(workElement); - workElement.appendChild(imageElement); - workElement.appendChild(buttonElement); - buttonElement.appendChild(imageButtonElement); - workElement.appendChild(figcaptionElement); - }; -}; -displayWorksModal(); - -//effacer image de la galerie suite à click sur icone// -async function removeGallery() { - const photoRemove = document.querySelector(".photo-remove"); - photoRemove.addEventListener("click", async function (event) { - const photoId = event.target.dataset.id; - console.log(photoId); - document.querySelector(".gallery-edit").innerHTML =""; - window.localStorage.removeItem( ); - getWorks(); - }); -}; \ No newline at end of file diff --git a/FrontEnd/assets/JS/modal.js b/FrontEnd/assets/JS/modal.js deleted file mode 100644 index 3c4a064ee..000000000 --- a/FrontEnd/assets/JS/modal.js +++ /dev/null @@ -1,108 +0,0 @@ -// récupère la 1ere modale -var firstModal = document.getElementById("modal-projet"); - -// récupère le bouton qui ouvre la modale -var btnOpenModal = document.getElementById("modal-projet-btn"); - -// récupère le bouton qui ferme la modale -var btnCloseModal = document.getElementById("first-modal-close"); - -// ouverture de la modale au click -btnOpenModal.onclick = function() { - firstModal.style.display = "block"; -}; - -// fermeture de la modale -btnCloseModal.onclick = function() { - firstModal.style.display = "none"; -}; - -// fermeture de la modale si clic en dehors de la modale -window.onclick = function(event) { - if (event.target == firstModal) { - firstModal.style.display = "none"; - secondModal.style.display = "none"; - } -}; - -// récupère la 2eme modale -var secondModal = document.getElementById("modal-projet-photo"); - -// récupère le bouton qui ouvre la modale -var btnOpenSecondModal = document.getElementById("btn-add-photo"); - -// récupère le bouton qui ferme la modale -var btnCloseModal = document.getElementById("second-modal-close"); - -// récupère le bouton qui retourne à la 1ere modale -var btnReturnModal = document.getElementById("arrow-back") - -// ouverture de la 2eme modale au click -btnOpenSecondModal.onclick = function() { - firstModal.style.display = "none"; - secondModal.style.display = "block"; -}; - -// retour sur la 1ere modale -btnReturnModal.onclick = function() { - secondModal.style.display = "none"; - firstModal.style.display = "block"; -} -// fermeture de la modale -btnCloseModal.onclick = function() { - secondModal.style.display = "none"; -}; - -// fermeture de la modale si clic en dehors de la modale -window.onclick = function(event) { - if (event.target == secondModal) { - secondModal.style.display = "none"; - firstModal.style.display = "none"; - } -}; - -// afficher tous les travaux // -async function displayWorksModal() { - // Récupération des travaux depuis l'API - const reponse = await fetch("http://localhost:5678/api/works"); - const works = await reponse.json(); - for (let work of works) { - // Récupération de l'élément du DOM qui accueillera les travaux - const modalGallery = document.querySelector(".gallery-modal"); - // Création d’une balise dédiée à un work - const workElement = document.createElement("figure"); - // Création des balises - const imageElement = document.createElement("img"); - imageElement.src = work.imageUrl; - imageElement.alt = work.title; - imageElement.crossOrigin = "anonymous"; - const buttonElement = document.createElement("button"); - buttonElement.className ="photo-remove"; - //buttonElement.id = work.id; - const imageButtonElement = document.createElement("img"); - imageButtonElement.src ="./assets/icons/remove.png"; - imageButtonElement.alt ="remove"; - const figcaptionElement = document.createElement("figcaption"); - figcaptionElement.innerText = "éditer"; - - modalGallery.appendChild(workElement); - workElement.appendChild(imageElement); - workElement.appendChild(buttonElement); - buttonElement.appendChild(imageButtonElement); - workElement.appendChild(figcaptionElement); - }; -}; -displayWorksModal(); - -/* -//effacer image de la galerie suite à click sur icone// -async function removeGallery() { - const photoRemove = document.querySelector(".photo-remove"); - photoRemove.addEventListener("click", async function (event) { - const photoId = event.target.dataset.id; - console.log(photoId); - document.querySelector(".gallery-edit").innerHTML =""; - window.localStorage.removeItem( ); - getWorks(); - }); -};*/ \ No newline at end of file diff --git a/FrontEnd/assets/CSS/style.css b/FrontEnd/assets/css/style.css similarity index 94% rename from FrontEnd/assets/CSS/style.css rename to FrontEnd/assets/css/style.css index f2cc303df..97e41c84a 100644 --- a/FrontEnd/assets/CSS/style.css +++ b/FrontEnd/assets/css/style.css @@ -192,29 +192,24 @@ form input { form a { color: #3D3D3D; } -.error-message-absence { - color: white; -} -.error-message-absence.active{ - color: black; - padding: 2%; - border: 2px dashed #D65353; -} -.error-message-error { - color: white; -} -.error-message-error.active { - color: black; - padding: 2%; - border: 2px dashed #D65353; + +.message-error-login { + background-color: white; + color: #D65353; + padding: 4%; + border: 2px dashed #D65353; + font-weight: 700; + text-align: center; + width: 110%; } + /* bouton lien modifier modale */ .square-pen { position: relative; height: 18px; width: 18px; - margin-right: 8px;; + margin-right: 8px; } .pen { position: absolute; @@ -228,11 +223,7 @@ form a { align-items: center; box-sizing: border-box; font-family: 'Work Sans'; -} -#edition-article.edition-mode { - margin: 0; padding: 0; - border: 2px solid blue; } @@ -406,16 +397,18 @@ select{ #introduction { display: flex; align-items: center; - width: 90%; - margin-left: 30px; + width: 100%; + margin-left: 80px; } #photo-presentation { flex: 1; } +#introduction button { + display: flex; +} #introduction img { - display: block; margin: auto; width: 80%; } @@ -424,7 +417,6 @@ select{ flex: 1; color: #3D3D3D; line-height: 16px; - text-align: left; } #introduction h2 { @@ -433,13 +425,18 @@ select{ #introduction p { margin-bottom: 0.5em; + width: 80%; + text-align: justify; + } -#portfolio h2 { +#edition-portfolio { display: flex; justify-content: center; - text-align: center; margin-bottom: 1em; } +#portfolio h2{ + padding-right: 16px; +} /* ajout bouton filtre catégorie*/ .filtres { diff --git a/FrontEnd/assets/js/fetch.js b/FrontEnd/assets/js/fetch.js new file mode 100644 index 000000000..c0e3e2163 --- /dev/null +++ b/FrontEnd/assets/js/fetch.js @@ -0,0 +1,7 @@ + const reponseWorks = await fetch("http://localhost:5678/api/works"); + const works = await reponseWorks.json(); + export {works}; + + const reponseCategories = await fetch("http://localhost:5678/api/categories"); + const categories = await reponseCategories.json(); + export {categories}; \ No newline at end of file diff --git a/FrontEnd/assets/js/index.js b/FrontEnd/assets/js/index.js new file mode 100644 index 000000000..4465e6b5b --- /dev/null +++ b/FrontEnd/assets/js/index.js @@ -0,0 +1,102 @@ +// Récupération des travaux et catégories depuis l'API +import { works , categories } from "./fetch.js"; + +// afficher tous les travaux // +async function displayWorks(works) { + for (let work of works) { + // Récupération de l'élément du DOM qui accueillera les travaux + const portfolioGallery = document.querySelector(".gallery"); + // Création d’une balise dédiée à un work + const workElement = document.createElement("figure"); + // Création des balises + const imageElement = document.createElement("img"); + imageElement.src = work.imageUrl; + imageElement.alt = work.title; + imageElement.crossOrigin = "anonymous"; + const titleElement = document.createElement("figcaption"); + titleElement.innerText = work.title; + + // On rattache la balise figure à la section gallery + portfolioGallery.appendChild(workElement); + // On rattache l’image et figcaption à workElement (la balise figure) + workElement.appendChild(imageElement); + workElement.appendChild(titleElement); + }; +}; +displayWorks(works); + +// Recupérer et afficher toutes les catégories // +async function displayCategories(categories) { + for (let categorie of categories) { + const buttonsFilter = document.querySelector(".filtres") + const buttonFilter = document.createElement("button"); + buttonFilter.className = "filter-btn"; + buttonFilter.dataset.id = categorie.id; + buttonFilter.innerText = categorie.name; + buttonsFilter.appendChild(buttonFilter); + } +} +displayCategories(categories); + +async function filterCategories() { + const defaultButton = document.querySelector("#all"); + // Par défaut, la catégorie Tous est cliquée + defaultButton.classList.add("active") + const buttonsFilter = document.querySelectorAll(".filter-btn"); + for (let button of buttonsFilter) { + button.addEventListener("click", (event) => { + const categorieId = event.target.dataset.id; + for (let removeActive of buttonsFilter) { + // Retire la classe active + removeActive.classList.remove("active"); + // Ajoute la classe active au bouton + button.classList.add("active"); + }; + document.querySelector(".gallery").innerHTML = ""; + if (categorieId >= 1 ){ + for (let work of works) { + if (categorieId == work.category.id) { + const portfolioGallery = document.querySelector(".gallery"); + // Création d’une balise dédiée à un work + const workElement = document.createElement("figure"); + // Création des balises + const imageElement = document.createElement("img"); + imageElement.src = work.imageUrl; + imageElement.alt = work.title; + imageElement.crossOrigin = "anonymous"; + const titleElement = document.createElement("figcaption"); + titleElement.innerText = work.title; + // On rattache la balise figure à la section gallery + portfolioGallery.appendChild(workElement); + // On rattache l’image et figcaption à workElement (la balise figure) + workElement.appendChild(imageElement); + workElement.appendChild(titleElement); + }; + }; + } else { + displayWorks(works) + }; + }); + }; + }; +filterCategories(); + +// affichage mode edition +const token = localStorage.getItem("Token"); + +if (token){ + const modeEdition = document.querySelectorAll(".edition-mode"); + for (let data of modeEdition) { + data.classList.add("active"); + }; + const modeEditionFilter = document.querySelector(".filtres"); + modeEditionFilter.style.display = "none"; + const logout = document.getElementById("login-logout"); + logout.setAttribute("href", "./index.html"); + logout.innerText = "logout"; + logout.style.fontWeight ="700"; + logout.addEventListener("click", function (event) { + localStorage.removeItem("Token"); + }); +}; + diff --git a/FrontEnd/assets/JS/login.js b/FrontEnd/assets/js/login.js similarity index 61% rename from FrontEnd/assets/JS/login.js rename to FrontEnd/assets/js/login.js index 04cd97850..d3fd31dcd 100644 --- a/FrontEnd/assets/JS/login.js +++ b/FrontEnd/assets/js/login.js @@ -1,16 +1,23 @@ const formLogin = document.querySelector("form"); +let spanElement = document.createElement("span"); +let inputPassword = document.querySelector("[name='password']"); + + formLogin.addEventListener("submit", async function (event) { event.preventDefault(); /*bloque rechargement de la page*/ - + // creation objet login const login = { email: document.querySelector("[name='email']").value, password: document.querySelector("[name='password']").value, }; - if (!login.value) { - const messageError = document.querySelector(".error-message-absence"); - messageError.classList.add("active"); + + if (!login.email || !login.password) { + inputPassword.insertAdjacentElement("afterend",spanElement); + spanElement.className = "message-error-login"; + spanElement.innerText = "Veuillez compléter l'ensemble des champs à saisir"; } else { + // envoi information sur l'API login const responseLogin = await fetch("http://localhost:5678/api/users/login", { method: "POST", @@ -26,14 +33,11 @@ formLogin.addEventListener("submit", async function (event) { // Retour en fonction du statut de la réponse if (reponseState) { localStorage.setItem("Token", reponseToken); - window.location.replace("index_edit.html"); + window.location.replace("index.html"); } else { - window.alert("Erreur dans l'identifiant ou le mot de passe"); - window.location.replace("login.html"); - } + inputPassword.insertAdjacentElement("afterend",spanElement); + spanElement.className = "message-error-login"; + spanElement.innerText = "Erreur dans l'identifiant ou le mot de passe"; + }; }; }); - - - - \ No newline at end of file diff --git a/FrontEnd/assets/js/modal.js b/FrontEnd/assets/js/modal.js new file mode 100644 index 000000000..502fe022a --- /dev/null +++ b/FrontEnd/assets/js/modal.js @@ -0,0 +1,152 @@ +import { works } from "./fetch.js"; + +document.querySelector(".modalJs").innerHTML += ` + `; + +// récupère la 1ere modale +var firstModal = document.getElementById("modal-projet"); + +// récupère le bouton qui ouvre la modale +var btnOpenModal = document.getElementById("modal-projet-btn"); + +// récupère le bouton qui ferme la modale +var btnCloseModal = document.getElementById("first-modal-close"); + +// ouverture de la modale au click +btnOpenModal.addEventListener("click", function() { + firstModal.style.display = "block"; +}); + +// fermeture de la modale +btnCloseModal.addEventListener("click", function() { + firstModal.style.display = "none"; +}); + +// fermeture de la modale si clic en dehors de la modale +window.addEventListener("click", function(event) { + if (event.target == firstModal) { + firstModal.style.display = "none"; + secondModal.style.display = "none"; + } +}); + +// récupère la 2eme modale +var secondModal = document.getElementById("modal-projet-photo"); + +// récupère le bouton qui ouvre la modale +var btnOpenSecondModal = document.getElementById("btn-add-photo"); + +// récupère le bouton qui ferme la modale +var btnCloseModal = document.getElementById("second-modal-close"); + +// récupère le bouton qui retourne à la 1ere modale +var btnReturnModal = document.getElementById("arrow-back") + +// ouverture de la 2eme modale au click +btnOpenSecondModal.addEventListener("click", function() { + firstModal.style.display = "none"; + secondModal.style.display = "block"; +}); + +// retour sur la 1ere modale +btnReturnModal.addEventListener("click", function() { + secondModal.style.display = "none"; + firstModal.style.display = "block"; +}); +// fermeture de la modale +btnCloseModal.addEventListener("click", function() { + secondModal.style.display = "none"; +}); + +// fermeture de la modale si clic en dehors de la modale +window.addEventListener("click", function(event) { + if (event.target == secondModal) { + secondModal.style.display = "none"; + firstModal.style.display = "none"; + } +}); + +// afficher tous les travaux // +function displayWorksModal(works) { + for (let work of works) { + // Récupération de l'élément du DOM qui accueillera les travaux + const modalGallery = document.querySelector(".gallery-modal"); + // Création d’une balise dédiée à un work + const workElement = document.createElement("figure"); + // Création des balises + const imageElement = document.createElement("img"); + imageElement.src = work.imageUrl; + imageElement.alt = work.title; + imageElement.crossOrigin = "anonymous"; + const buttonElement = document.createElement("button"); + buttonElement.className ="photo-remove"; + buttonElement.dataset.id = work.id; + const imageButtonElement = document.createElement("img"); + imageButtonElement.src ="./assets/icons/remove.png"; + imageButtonElement.alt ="remove"; + const figcaptionElement = document.createElement("figcaption"); + figcaptionElement.innerText = "éditer"; + + modalGallery.appendChild(workElement); + workElement.appendChild(imageElement); + workElement.appendChild(buttonElement); + buttonElement.appendChild(imageButtonElement); + workElement.appendChild(figcaptionElement); + }; +}; +displayWorksModal(works); + + +//effacer image de la galerie suite à click sur icone// + + const buttonsPhotoRemove = document.querySelectorAll(".photo-remove"); + for(let button of buttonsPhotoRemove) { + button.addEventListener("click", function (event) { + const photoId = event.target.dataset.id; + console.log(photoId); + //document.querySelector(".gallery-modal").innerHTML = ""; + //displayWorksModal(works); + }); + }; diff --git a/FrontEnd/index.html b/FrontEnd/index.html index c8702f620..c4cae99c7 100644 --- a/FrontEnd/index.html +++ b/FrontEnd/index.html @@ -8,59 +8,18 @@ - - + + - - + + + - - + +
@@ -98,8 +57,8 @@

Sophie Bluel Architecte d'intérieur

-
-
-

Mes Projets -
- +
+

Mes Projets

+
+ +
-

diff --git a/FrontEnd/index_edit.html b/FrontEnd/index_edit.html deleted file mode 100644 index 84cd38edf..000000000 --- a/FrontEnd/index_edit.html +++ /dev/null @@ -1,148 +0,0 @@ - - - - - Sophie Bluel - Architecte d'intérieur - - - - - - - - - - -
-
- icone carré - icone crayon -
- Mode édition - -
-
-

Sophie Bluel Architecte d'intérieur

- -
-
-
-
- - -
-
- -

Designer d'espace

-

Je raconte votre histoire, je valorise vos idées. Je vous accompagne de la conception à la livraison finale du chantier.

-

Chaque projet sera étudié en commun, de façon à mettre en valeur les volumes, les matières et les couleurs dans le respect de l’esprit des lieux et le choix adapté des matériaux. Le suivi du chantier sera assuré dans le souci du détail, le respect du planning et du budget.

-

En cas de besoin, une équipe pluridisciplinaire peut-être constituée : architecte DPLG, décorateur(trice).

-
-
-
-
-

Mes Projets

- -
- - -
- -
- -
-
-

Contact

-

Vous avez un projet ? Discutons-en !

-
- - - - - - - -
-
-
- -
- -
- - - diff --git a/FrontEnd/login.html b/FrontEnd/login.html index 47e32896c..5be2a3493 100644 --- a/FrontEnd/login.html +++ b/FrontEnd/login.html @@ -8,8 +8,8 @@ - - + +
@@ -26,8 +26,7 @@

Sophie Bluel Architecte d'intérieur

Log In

-

Veuillez compléter votre e-mail et votre mot de passe

-

Erreur dans l'e-mail ou le mot de passe

+ From 452110d82b944879fda450f15b5c68b67c20a33a Mon Sep 17 00:00:00 2001 From: studentsjj Date: Sun, 19 Feb 2023 19:07:57 +0100 Subject: [PATCH 11/19] refactor modal --- FrontEnd/assets/css/style.css | 87 ++++----- FrontEnd/assets/icons/circle.png | Bin 442 -> 0 bytes FrontEnd/assets/icons/mount.png | Bin 750 -> 0 bytes FrontEnd/assets/icons/pen.png | Bin 241 -> 0 bytes FrontEnd/assets/icons/pen_white.png | Bin 252 -> 0 bytes FrontEnd/assets/icons/picture-svgrepo.png | Bin 0 -> 1157 bytes FrontEnd/assets/icons/rectangle.png | Bin 231 -> 0 bytes FrontEnd/assets/icons/square-pen-white.png | Bin 0 -> 352 bytes FrontEnd/assets/icons/square-pen.png | Bin 0 -> 303 bytes FrontEnd/assets/icons/square.png | Bin 182 -> 0 bytes FrontEnd/assets/icons/square_white.png | Bin 218 -> 0 bytes FrontEnd/assets/js/modal.js | 199 +++++++++++++++------ FrontEnd/index.html | 42 ++--- 13 files changed, 200 insertions(+), 128 deletions(-) delete mode 100644 FrontEnd/assets/icons/circle.png delete mode 100644 FrontEnd/assets/icons/mount.png delete mode 100644 FrontEnd/assets/icons/pen.png delete mode 100644 FrontEnd/assets/icons/pen_white.png create mode 100644 FrontEnd/assets/icons/picture-svgrepo.png delete mode 100644 FrontEnd/assets/icons/rectangle.png create mode 100644 FrontEnd/assets/icons/square-pen-white.png create mode 100644 FrontEnd/assets/icons/square-pen.png delete mode 100644 FrontEnd/assets/icons/square.png delete mode 100644 FrontEnd/assets/icons/square_white.png diff --git a/FrontEnd/assets/css/style.css b/FrontEnd/assets/css/style.css index 97e41c84a..50e749031 100644 --- a/FrontEnd/assets/css/style.css +++ b/FrontEnd/assets/css/style.css @@ -206,15 +206,8 @@ form a { /* bouton lien modifier modale */ .square-pen { - position: relative; height: 18px; width: 18px; - margin-right: 8px; -} -.pen { - position: absolute; - left: 5px; - bottom: 6px; } .edition-mode button[type="button"]{ @@ -243,25 +236,25 @@ form a { .modal-container { display: flex; flex-direction: column; - padding: 4%; + padding: 4% 6% 4% 6%; background-color: white; width: 630px; border-radius: 10px; margin: 15% auto; - - } + .modal-close { align-self: flex-end; - border: none; - background-color: white; + width: 16px; + height: 16px; } .modal-container h3 { font-size: 26px; line-height: 30px; - text-align: center; + margin: auto; } + .gallery-modal { width: 90%; display: grid; @@ -272,21 +265,30 @@ form a { padding: 40px 0 20px 0; } +.photo-remove{ + width: 21px; + height: 21px; +} +.photo-remove img { + position: relative; + top: -135px; + left: 70px; + background-color: black; + padding: 5px; +} + .gallery-modal figure img { width: 100%; } .gallery-modal figcaption { display: inline; - margin-left: -16px; + margin-left: -22px; } -.photo-remove { - position: relative; - background-color: black; - top: -80%; - left: 77%; - padding: 4px; - border: none; +.modal-container hr { + width: 90%; + size: 1px; + color: #B3B3B3; } #btn-add-photo { @@ -301,7 +303,7 @@ form a { text-decoration-line: none; margin: 16px 0 16px 0; } -.modal-container input[type="button"] { +.modal-container button { color:#D65353; background-color: white; line-height: 17px; @@ -310,46 +312,34 @@ form a { font-weight: 400; } /* modale ajout photo */ -.modal-icon { - display: flex; - justify-content: space-between; -} + #arrow-back { - border: none; - background-color: white; + width: 21px; + height: 15px; + position: relative; + top: 15px; } + .container-add-photo { display: flex; flex-direction: column; justify-content: center; align-items: center; - width: 100%; + width: 90%; height: 169px; background-color: #E8F1F7; border-radius: 3px; - margin-top: 30px; + margin: 30px auto; } -#rectangle{ - position: relative; - z-index: 1; - top: 14px; - left: 24px; +.container-add-photo img{ + width: 58px; + height: 58px; + color: #B9C5CC; } -#circle { - position: relative; - z-index: 3; - top: -10px; - right: 30px; -} -#mount{ - position: relative; - z-index: 2; - top : 8px; - right: 50px; -} + .container-add-photo button { color: #306685; background-color: #CBD6DC; @@ -368,7 +358,8 @@ form a { .modal-container form { margin: 20px 0 20px 0; - width: 100%; + width: 90%; + margin: auto; } .modal-container form label, select { diff --git a/FrontEnd/assets/icons/circle.png b/FrontEnd/assets/icons/circle.png deleted file mode 100644 index ac8096c1a246bdf20d0fb177afaa699d808a8ee5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 442 zcmV;r0Y(0aP)eHfXz zQn5+qBT|!a8!la0zQQttWJT*qAUw$N;{FI(&Yc?dR~z>+BRtSxAUAKzwYU z9E6@5ScofDCIBcg)AP~vJv9kZW-SeDdr7h~Ub|WIO_aaAIxyecy&IQrFx$5o7H^jo k5v<$bf8S9gt*(px0LuD^?uNmn761SM07*qoM6N<$f}K~mxc~qF diff --git a/FrontEnd/assets/icons/mount.png b/FrontEnd/assets/icons/mount.png deleted file mode 100644 index 54bcf97af43e0c2388b8c8e702c669b42a9f2fc9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 750 zcmVaiySEVc7AdNzJXrVxwttVyl#DiNu=_4D5=ZvzJ* zWX=vw$|U0Zs;2$-9C@Yw^|a*H*V2`zv_M_0T?Xs3(xUOB{T3xJ_ZzCJnJHCun6%{k z?8|rwRtZ0jIZBH`Z(TP7&7*c6R3)ducr~yveB*m7j7%8nF(joplYpVVi3tYm|D6|n zY~bW~9t2eS4UXl^)|36E;2l-uqI&sQF9t6m1bjFPHUl&}>>h6~0zT3gl{}`Y%%dt4 zVC~{Bdy`8?dY<8@O=bN=EhC!&1XkdJSE)@Vvs;@5SWu3>L3S+A_B_GcW6Z6J&OrvE zWwn#o+<+x@y*P7-j`5&omYK%#s@YRXQJj_(R}H8v-?$oyOB+ykp_%Z5C^T#RV|>D) zGIJ1@O}q+Cg?B{Z@EG5X&JS?Y23${AinkFsty!<&r0lau7qmc1NO``vumU;YDZ@v14~oLq$ygCq zB)b8%(Ymk#jW=xl+po$n3IPQax0A60xaC61@CUkSjG~aPso7-QfIFZ-P`5e?e4!}x gTZ1)!2f<1I0A#Y6PA2sIKmY&$07*qoM6N<$f*MOj&Hw-a diff --git a/FrontEnd/assets/icons/pen.png b/FrontEnd/assets/icons/pen.png deleted file mode 100644 index 08aad3b04ddb8046c051c6f78b8002d0e8172136..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 241 zcmeAS@N?(olHy`uVBq!ia0vp^{2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBew(L@V@L(#)kzz9TMc+z-q%Yos4=KD1WG7s z8#vxzF>9R0WyZ0%AS~vB!laTpUqn>TP3D&7IPW7f(?ga2KgUNEUdt0+T{=!OU-!Mt zbUN~J;j=o9_Z9uBszO##YwKgTtX!0$nA@dMsF~zv^`p{@>&ITx55*?=n`+jbT=$%7 h|9)ns%c~`(a;JAINghcMI|6hOgQu&X%Q~loCIAW-O;P{= diff --git a/FrontEnd/assets/icons/pen_white.png b/FrontEnd/assets/icons/pen_white.png deleted file mode 100644 index daf2d11eb9973dd875e077499d22395115f38ce0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 252 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eB{zOj~$B+ufx04e&+YAI8w(B?Y+DUhG_9U?6 zCa@@HFy}5%yTEoUVc)?{g^uHYULQ=}u)F-WM0$_WoMJG~EFap%O}wk_Vu9YgPcPpzMIK0?G;qE1-R<2oH(W0umRQ9n@Vx z^HQo_W~S#K$J9-2V#i6E8vl|tzQvx;Gv}P&4pFXLxpL*2oW$Yr#Yb)nlx?{dWgikM z-1FB~%Oyb>6wg?V)}lM295idnL9?bDG;6vup!aA9wT>^>N$54Lse)}Gs6$%puaxJT zG^I)edf+&-55LL-t#yU;@BJRIuCz`r*1mkR>-B1}OH-yqQ}^Mu+Ubp=tCX%@&)AQ# zC=wgkhhvW(s4bd8#U9ajr%pjDxsG*Z+0|OP=mriq`FO`x(otG(9-W@QU0z)1&=e{5 zhzj}hrD;htYm0wC8eyLz+Q+)oG)GgW_@IJj(P~nkBF`ahVpC}E+-Xwmsmt-#WmpCk zkr0BcCpws=QV5}9DcQ!l36+pplti&dltHi1GV2;TK_MMu$cnkB#pNc2klh*bfV__a z1~}}VNfaBjwzSaUDcRvwbfVolJG+TPPCk|1(=Q-~(fx!gMhPYSZz{ulGxFmmZK8k-B-xG45D&rDa*vZ(VNlj&>-dUoWdrMQS+x*IbHAm92Ezh!i)T>d==74}z(Qkrd+|#{ z&o17YH8BnOyw~2A-mVRJF#v2Ybf^a#%W{q!6q(VM(jhN7VPss2fW^5&${Wbl@&0T%c;G%*zwY`EBq^jXFJUQjZG_3p{pb)G2`Flx zpE1Kmryn*@cdzh3D1`tUxb~cH8~c?C6jsf|hhO_RZlXq~57vmM-Uf|8Vb|{0&~>zz zS>Z?L07*hsS0c(n$nS2P)F=%5ZA$guOQ5sHkFqr^#({*wVm7T|kE6t(C<%cPxf*6f z{sn9zP~$PVBoI2sMjPd0*l9Ou*w~=3X(%7Y$P?|tXrp{k3WdSam=p^XH8N<^UX)9l zG$I9I`3r_iW70rVkMaTMfpyPtmzp$U^``$*8lxgXgCDC=KBU(5+ES@Q|EVHDXRf8A z{jUc0cx&AxG$=;LUeG6{$Ps0yG}f4zwDSK)v!*)(dh_;@bzwwZ%D!C6l`B`STocqU X3CUayc_g2|00000NkvXXu0mjfO!3#aMzyAZ>!QkoY=d#Wzp$P!0+Egq6 diff --git a/FrontEnd/assets/icons/square-pen-white.png b/FrontEnd/assets/icons/square-pen-white.png new file mode 100644 index 0000000000000000000000000000000000000000..163491266f8d35af707706ac00ab30b2dc5bc242 GIT binary patch literal 352 zcmeAS@N?(olHy`uVBq!ia0vp^!XV7S1|*9D%+3HQ&H|6fVg?3opai!tBg3pY55jgR3=A9lx&I`x0{LG(T^vIy7}ri|mIPQ@fI{~YP4|tJ6*=Jb=s{qZ@Hz{?|4T?wRCW-E#(p^X5)M+u4LfR z@{H3jf!*%P`&L6^Ew-QBD^%nxf3ZI>x*l}u)EvQI-y3_fL{HwU&~$u0Ve6eJR~_p` znlD^CJC@E=lJi$jbyV_O5$U2AIpu^}x0q!L>yDo;K6!n&^BmZ+W_w(CethNej~N%2 zCA^=!*731mWOC-oRE-RU1(JCO+tRHyrB42cQrXiV@`H&#!08I7|DO{p7#3Z%Z`~&G vHge61>8*d;)taVN9=)`MgFnhKQ*EE?B-UT8la8GQ1^|PntDnm{r-UW|YIcP4 literal 0 HcmV?d00001 diff --git a/FrontEnd/assets/icons/square-pen.png b/FrontEnd/assets/icons/square-pen.png new file mode 100644 index 0000000000000000000000000000000000000000..65591fcbb4bf3b6d707920ae7f5adb1ddb931e14 GIT binary patch literal 303 zcmeAS@N?(olHy`uVBq!ia0vp^LLkh+1|-AI^@Rf|&H|6fVg?3oVGw3ym^DWND9BhG zQb2cGC@lr#gvE^}TdPgRs_vg|&(iMf^piSiAGmmGPvX{H6IZ0pFDX59{Yra2=`Ix!Q77$1eZM|$S=!mMXtRy=`pr)w wPMtnqek=P(YC-OYYkCiSckMZFP``#D*2iMK;^72spnn)VUHx3vIVCg!0Cxa!`~Uy| literal 0 HcmV?d00001 diff --git a/FrontEnd/assets/icons/square.png b/FrontEnd/assets/icons/square.png deleted file mode 100644 index 4d58b830e7c88b1409cd76c11d0aa9d5b8c9e4f8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 182 zcmeAS@N?(olHy`uVBq!ia0vp^{2``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBzPG1~V@L(#+sOxc83cG-_a9?$Gj8%-bI3!@ zfJu3U#rFk5;&GpA!lCJa=f!hmP3Jx?s{Ka3U`R3V%oI_g2-}OId YRJzH*^MU8}UZAlIp00i_>zopr0HYT;00000 diff --git a/FrontEnd/assets/icons/square_white.png b/FrontEnd/assets/icons/square_white.png deleted file mode 100644 index 109c23e940ee2a99bc33041ebd34cbe241d1a768..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 218 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#S9GG!XV7ZFl&wkP>``W z$lZxy-8q?;Kn_c~qpu?a!^VE@KZ&eBe!i!RV@L(#+sOw78x(k0^!r!?nq(uIRBteq zIi>f_y}(!|(7*pDOB|1R@nrTC`JFByUs(iRHq_fHP3ke{U~K)mDE_g(nnE;#z=Dhm zO>Vpl5f4Su_iudjPUJ?}h3`HK#Tzd36s&sZxTstCY}MY6%#(Mkt6W@c#RIgO!PC{x JWt~$(696|~MQQ*5 diff --git a/FrontEnd/assets/js/modal.js b/FrontEnd/assets/js/modal.js index 502fe022a..4b8a96536 100644 --- a/FrontEnd/assets/js/modal.js +++ b/FrontEnd/assets/js/modal.js @@ -1,49 +1,141 @@ import { works } from "./fetch.js"; -document.querySelector(".modalJs").innerHTML += ` - `; +// création première modale galerie photo +const modalProjet = document.querySelector("#modal-projet"); +const modalContainer = document.createElement("div"); +modalContainer.className = "modal-container"; +const imgModalContainer = document.createElement("img"); +imgModalContainer.id = "first-modal-close"; +imgModalContainer.className = "modal-close"; +imgModalContainer.src = "./assets/icons/cross.png"; +imgModalContainer.alt = "croix pour fermeture de la fenêtre"; +const h3ModalContainer = document.createElement("h3"); +h3ModalContainer.innerText = "Galerie photo"; +const galleryModalContainer = document.createElement("div"); +galleryModalContainer.className = "gallery-modal"; +const hrModalContainer = document.createElement("hr"); +const btnAddPhoto = document.createElement("a"); +btnAddPhoto.href = "#modal-projet-photo"; +btnAddPhoto.id = "btn-add-photo"; +btnAddPhoto.innerText = "Ajouter une photo"; +const btnRemoveGallery = document.createElement("button"); +btnRemoveGallery.innerText = "Supprimer la galerie"; +modalProjet.appendChild(modalContainer); +modalContainer.appendChild(imgModalContainer); +modalContainer.appendChild(h3ModalContainer); +modalContainer.appendChild(galleryModalContainer); +modalContainer.appendChild(hrModalContainer); +modalContainer.appendChild(btnAddPhoto); +modalContainer.appendChild(btnRemoveGallery); + +// création deuxième modale ajout photo +/*document.querySelector(".second-modal").innerHTML += ` + `;*/ +const modalProjetPhoto = document.querySelector("#modal-projet-photo") +const secondModalContainer = document.createElement("div"); +secondModalContainer.className ="modal-container"; +const imgArrowBack = document.createElement("img"); +imgArrowBack.id = "arrow-back"; +imgArrowBack.src="./assets/icons/arrow_Back.png"; +imgArrowBack.alt ="flèche retour"; +const imgSecondModalClose = document.createElement("img"); +imgSecondModalClose.id = "second-modal-close"; +imgSecondModalClose.className = "modal-close"; +imgSecondModalClose.src = "./assets/icons/cross.png"; +imgSecondModalClose.alt = "croix pour fermeture de la fenêtre"; +const h3SecondModalContainer = document.createElement("h3"); +h3SecondModalContainer.innerText ="Ajout photo"; +const containerAddPhoto = document.createElement("div"); +containerAddPhoto.className = "container-add-photo"; +const imgContainerAddPhoto = document.createElement("img"); +imgContainerAddPhoto.src = "./assets/icons/picture-svgrepo.png"; +imgContainerAddPhoto.alt = "icone image"; +const btnContainerAddPhoto = document.createElement("button"); +btnContainerAddPhoto.type = "submit"; +btnContainerAddPhoto.innerText ="+ Ajouter photo"; +const pContainerAddPhoto = document.createElement("p"); +pContainerAddPhoto.innerText = "jpg. png : 4mo max"; +const formAddPhoto = document.createElement("form"); +formAddPhoto.action = ""; +formAddPhoto.method ="post"; +const labelFormAddPhoto = document.createElement("label"); +labelFormAddPhoto.for = "title"; +labelFormAddPhoto.innerText = "Titre"; +const titleElement = document.createElement("input"); +titleElement.type ="text"; +titleElement.name = "title"; +titleElement.id = "title"; +titleElement.attribute ="required"; +const labelCategorieFormAddPhoto = document.createElement("label"); +labelCategorieFormAddPhoto.for = "categorie"; +labelCategorieFormAddPhoto.innerText = "Catégorie"; +const selectCategorieFormAddPhoto = document.createElement("select"); +selectCategorieFormAddPhoto.name = "categorie"; +selectCategorieFormAddPhoto.id = "select-categorie"; +selectCategorieFormAddPhoto.autocomplete = "off"; +selectCategorieFormAddPhoto.attribute = "required"; +const optionFirst = document.createElement("option"); +optionFirst.value = ""; +optionFirst.innerText = "Choisissez une catégorie"; +const optionSecond = document.createElement("option"); +optionSecond.value = "Objets"; +optionSecond.innerText = "Objets"; +const optionThird = document.createElement("option"); +optionThird.value = "appartements"; +optionFirst.innerText = "Appartements"; +const optionFour = document.createElement("option"); +optionFour.value = "hotels-restaurants"; +optionFour.innerText = "Hôtels & restaurants"; +const hrAddPhoto = document.createElement("hr"); +const btnFormAddPhoto = document.createElement("input"); +btnFormAddPhoto.type = "submit"; +btnFormAddPhoto.id = "valider"; +btnFormAddPhoto.value = "valider"; + +modalProjetPhoto.appendChild(secondModalContainer); +secondModalContainer.appendChild(imgArrowBack); +secondModalContainer.appendChild(imgSecondModalClose); +secondModalContainer.appendChild(h3SecondModalContainer); +secondModalContainer.appendChild(containerAddPhoto); +containerAddPhoto.appendChild(imgContainerAddPhoto); +containerAddPhoto.appendChild(btnContainerAddPhoto); +containerAddPhoto.appendChild(pContainerAddPhoto); +secondModalContainer.appendChild(formAddPhoto); +formAddPhoto.appendChild(labelFormAddPhoto); +formAddPhoto.appendChild(titleElement); +formAddPhoto.appendChild(labelCategorieFormAddPhoto); +formAddPhoto.appendChild(selectCategorieFormAddPhoto); +selectCategorieFormAddPhoto.appendChild(optionFirst); +selectCategorieFormAddPhoto.appendChild(optionSecond); +selectCategorieFormAddPhoto.appendChild(optionThird); +selectCategorieFormAddPhoto.appendChild(optionFour); +formAddPhoto.appendChild(hrAddPhoto); +formAddPhoto.appendChild(btnFormAddPhoto); + // récupère la 1ere modale var firstModal = document.getElementById("modal-projet"); @@ -85,10 +177,10 @@ var btnCloseModal = document.getElementById("second-modal-close"); var btnReturnModal = document.getElementById("arrow-back") // ouverture de la 2eme modale au click -btnOpenSecondModal.addEventListener("click", function() { - firstModal.style.display = "none"; - secondModal.style.display = "block"; -}); +btnOpenSecondModal.addEventListener("click", function () { + firstModal.style.display = "none"; + secondModal.style.display = "block"; + }); // retour sur la 1ere modale btnReturnModal.addEventListener("click", function() { @@ -112,7 +204,7 @@ window.addEventListener("click", function(event) { function displayWorksModal(works) { for (let work of works) { // Récupération de l'élément du DOM qui accueillera les travaux - const modalGallery = document.querySelector(".gallery-modal"); + const galleryModalContainer = document.querySelector(".gallery-modal"); // Création d’une balise dédiée à un work const workElement = document.createElement("figure"); // Création des balises @@ -122,19 +214,20 @@ function displayWorksModal(works) { imageElement.crossOrigin = "anonymous"; const buttonElement = document.createElement("button"); buttonElement.className ="photo-remove"; - buttonElement.dataset.id = work.id; const imageButtonElement = document.createElement("img"); + //imageButtonElement.className ="photo-remove"; imageButtonElement.src ="./assets/icons/remove.png"; imageButtonElement.alt ="remove"; + imageButtonElement.dataset.id = work.id; const figcaptionElement = document.createElement("figcaption"); figcaptionElement.innerText = "éditer"; - - modalGallery.appendChild(workElement); + + galleryModalContainer.appendChild(workElement); workElement.appendChild(imageElement); workElement.appendChild(buttonElement); buttonElement.appendChild(imageButtonElement); workElement.appendChild(figcaptionElement); - }; + }; }; displayWorksModal(works); diff --git a/FrontEnd/index.html b/FrontEnd/index.html index c4cae99c7..50d1e3fa2 100644 --- a/FrontEnd/index.html +++ b/FrontEnd/index.html @@ -16,17 +16,14 @@ -
- -
- + +
-
- icone carré - icone crayon -
+ icone modifier blanc Mode édition
@@ -47,24 +44,18 @@

Sophie Bluel Architecte d'intérieur

-
- +

Designer d'espace

Je raconte votre histoire, je valorise vos idées. Je vous accompagne de la conception à la livraison finale du chantier.

@@ -76,12 +67,9 @@

Designer d'espace

Mes Projets

-
From 132c8d75092e2dc17633394f4b922fb2db25fd5b Mon Sep 17 00:00:00 2001 From: studentsjj Date: Wed, 22 Feb 2023 09:40:06 +0100 Subject: [PATCH 12/19] save 230221 --- FrontEnd/assets/css/style.css | 43 +++++--- FrontEnd/assets/js/login.js | 1 - FrontEnd/assets/js/modal.js | 198 +++++++++++++++++++++++++++++----- 3 files changed, 202 insertions(+), 40 deletions(-) diff --git a/FrontEnd/assets/css/style.css b/FrontEnd/assets/css/style.css index 50e749031..88f6d4126 100644 --- a/FrontEnd/assets/css/style.css +++ b/FrontEnd/assets/css/style.css @@ -331,6 +331,7 @@ form a { background-color: #E8F1F7; border-radius: 3px; margin: 30px auto; + padding : 0 40px 0 40px; } .container-add-photo img{ @@ -340,36 +341,28 @@ form a { } -.container-add-photo button { - color: #306685; - background-color: #CBD6DC; - border-radius: 50px; - padding: 10px 35px 10px 35px; - margin: 30px 0 7px 0; - border: none; - font-weight: 500; - line-height: 16px; - text-align: center; -} + .container-add-photo p{ font-size: 10px; font-weight: 400; } .modal-container form { - margin: 20px 0 20px 0; + margin: 20px; width: 90%; margin: auto; } -.modal-container form label, select { +.modal-container label, select { font-weight: 500; color: #3D3D3D; line-height: 16px; + width: 90%; } -.modal-container form input, select { + +.modal-container input, select { box-shadow: 0 4px 14px rgba(0,0,0,0.09); - width: 100%; + width: 90%; } select{ background-color: white; @@ -378,12 +371,28 @@ select{ height: 51px; margin-bottom: 40px; } +.myfile { + display: flex; + justify-content: center; + color: #306685; + background-color: #CBD6DC; + border-radius: 50px; + margin: auto; + height: 36px; + border: none; + font-weight: 500; + line-height: 16px; + align-items: center; +} #valider { width: 237px; height: 36px; background-color: #A7A7A7; border-radius: 60px; } +#valider-submit { + background-color: #1D6154; +} #introduction { display: flex; @@ -528,3 +537,7 @@ footer nav ul { font-weight: 300; } +#display-image { + width : 129px; + height: 193px; +} \ No newline at end of file diff --git a/FrontEnd/assets/js/login.js b/FrontEnd/assets/js/login.js index d3fd31dcd..04ce1265b 100644 --- a/FrontEnd/assets/js/login.js +++ b/FrontEnd/assets/js/login.js @@ -26,7 +26,6 @@ formLogin.addEventListener("submit", async function (event) { }); const response = await responseLogin.json(); //récupération token et statut de la réponse - console.log(response); const reponseToken = response.token; const reponseState = responseLogin.ok; diff --git a/FrontEnd/assets/js/modal.js b/FrontEnd/assets/js/modal.js index 4b8a96536..d8b23e7b7 100644 --- a/FrontEnd/assets/js/modal.js +++ b/FrontEnd/assets/js/modal.js @@ -1,4 +1,6 @@ import { works } from "./fetch.js"; +import { categories } from "./fetch.js" + // création première modale galerie photo const modalProjet = document.querySelector("#modal-projet"); @@ -69,19 +71,34 @@ imgSecondModalClose.src = "./assets/icons/cross.png"; imgSecondModalClose.alt = "croix pour fermeture de la fenêtre"; const h3SecondModalContainer = document.createElement("h3"); h3SecondModalContainer.innerText ="Ajout photo"; +const formAddPhoto = document.createElement("form"); +formAddPhoto.id = "formAddPhoto"; +formAddPhoto.name = "formAddPhoto" +//formAddPhoto.action = ""; +formAddPhoto.method ="post"; +formAddPhoto.enctype ="multipart/form-data"; const containerAddPhoto = document.createElement("div"); containerAddPhoto.className = "container-add-photo"; +const displayImage = document.createElement("div"); +displayImage.id = "display-image"; +displayImage.style.display = "none"; const imgContainerAddPhoto = document.createElement("img"); imgContainerAddPhoto.src = "./assets/icons/picture-svgrepo.png"; imgContainerAddPhoto.alt = "icone image"; -const btnContainerAddPhoto = document.createElement("button"); -btnContainerAddPhoto.type = "submit"; -btnContainerAddPhoto.innerText ="+ Ajouter photo"; +const labelBtnContainerAddPhoto = document.createElement("label"); +labelBtnContainerAddPhoto.className = ("myfile"); +labelBtnContainerAddPhoto.for = "image"; +labelBtnContainerAddPhoto.innerText = "+ Ajouter photo"; +const btnContainerAddPhoto = document.createElement("input"); +btnContainerAddPhoto.type = "file"; +btnContainerAddPhoto.id = "myfile"; +btnContainerAddPhoto.name = "image"; +btnContainerAddPhoto.accept = "image/png, image/jpg"; +btnContainerAddPhoto.style.display = "none"; +btnContainerAddPhoto.attributes.required = "required"; const pContainerAddPhoto = document.createElement("p"); pContainerAddPhoto.innerText = "jpg. png : 4mo max"; -const formAddPhoto = document.createElement("form"); -formAddPhoto.action = ""; -formAddPhoto.method ="post"; + const labelFormAddPhoto = document.createElement("label"); labelFormAddPhoto.for = "title"; labelFormAddPhoto.innerText = "Titre"; @@ -89,30 +106,45 @@ const titleElement = document.createElement("input"); titleElement.type ="text"; titleElement.name = "title"; titleElement.id = "title"; -titleElement.attribute ="required"; +titleElement.attributes.required ="required"; const labelCategorieFormAddPhoto = document.createElement("label"); -labelCategorieFormAddPhoto.for = "categorie"; +labelCategorieFormAddPhoto.for = "category"; labelCategorieFormAddPhoto.innerText = "Catégorie"; const selectCategorieFormAddPhoto = document.createElement("select"); -selectCategorieFormAddPhoto.name = "categorie"; +selectCategorieFormAddPhoto.name = "category"; selectCategorieFormAddPhoto.id = "select-categorie"; selectCategorieFormAddPhoto.autocomplete = "off"; -selectCategorieFormAddPhoto.attribute = "required"; -const optionFirst = document.createElement("option"); +selectCategorieFormAddPhoto.attributes.required = "required"; +// Recupérer et afficher toutes les catégories // +for (let categorie of categories) { + var optionForm = document.createElement("option") + optionForm.className = "option" + optionForm.dataset.id = categorie.id; + optionForm.innerText = categorie.name; + selectCategorieFormAddPhoto.appendChild(optionForm); + console.log(optionForm) +} + + + +/*const optionFirst = document.createElement("option"); optionFirst.value = ""; optionFirst.innerText = "Choisissez une catégorie"; const optionSecond = document.createElement("option"); optionSecond.value = "Objets"; +optionSecond.dataset.id = "1"; optionSecond.innerText = "Objets"; const optionThird = document.createElement("option"); optionThird.value = "appartements"; -optionFirst.innerText = "Appartements"; +optionThird.innerText = "Appartements"; +optionThird.dataset.id = "2"; const optionFour = document.createElement("option"); optionFour.value = "hotels-restaurants"; optionFour.innerText = "Hôtels & restaurants"; +optionFour.dataset.id = "3";*/ const hrAddPhoto = document.createElement("hr"); const btnFormAddPhoto = document.createElement("input"); -btnFormAddPhoto.type = "submit"; +//btnFormAddPhoto.type = "submit"; btnFormAddPhoto.id = "valider"; btnFormAddPhoto.value = "valider"; @@ -120,19 +152,23 @@ modalProjetPhoto.appendChild(secondModalContainer); secondModalContainer.appendChild(imgArrowBack); secondModalContainer.appendChild(imgSecondModalClose); secondModalContainer.appendChild(h3SecondModalContainer); -secondModalContainer.appendChild(containerAddPhoto); +secondModalContainer.appendChild(formAddPhoto); +formAddPhoto.appendChild(containerAddPhoto); +containerAddPhoto.appendChild(displayImage); containerAddPhoto.appendChild(imgContainerAddPhoto); -containerAddPhoto.appendChild(btnContainerAddPhoto); +containerAddPhoto.appendChild(labelBtnContainerAddPhoto); +labelBtnContainerAddPhoto.appendChild(btnContainerAddPhoto); containerAddPhoto.appendChild(pContainerAddPhoto); -secondModalContainer.appendChild(formAddPhoto); + formAddPhoto.appendChild(labelFormAddPhoto); formAddPhoto.appendChild(titleElement); formAddPhoto.appendChild(labelCategorieFormAddPhoto); formAddPhoto.appendChild(selectCategorieFormAddPhoto); -selectCategorieFormAddPhoto.appendChild(optionFirst); +/*selectCategorieFormAddPhoto.appendChild(optionFirst); selectCategorieFormAddPhoto.appendChild(optionSecond); selectCategorieFormAddPhoto.appendChild(optionThird); -selectCategorieFormAddPhoto.appendChild(optionFour); +selectCategorieFormAddPhoto.appendChild(optionFour);*/ + formAddPhoto.appendChild(hrAddPhoto); formAddPhoto.appendChild(btnFormAddPhoto); @@ -186,10 +222,28 @@ btnOpenSecondModal.addEventListener("click", function () { btnReturnModal.addEventListener("click", function() { secondModal.style.display = "none"; firstModal.style.display = "block"; + displayImage.style.display = "none"; + imgContainerAddPhoto.style.display = "block"; + labelBtnContainerAddPhoto.style.display = "flex"; + pContainerAddPhoto.style.display = "block"; + //reset formulaire + btnContainerAddPhoto.value =""; + titleElement.value = ""; + selectCategorieFormAddPhoto.value = ""; + btnFormAddPhoto.id = ("valider"); }); // fermeture de la modale btnCloseModal.addEventListener("click", function() { secondModal.style.display = "none"; + displayImage.style.display = "none"; + imgContainerAddPhoto.style.display = "block"; + labelBtnContainerAddPhoto.style.display = "flex"; + pContainerAddPhoto.style.display = "block"; + //reset formulaire + btnContainerAddPhoto.value =""; + titleElement.value = ""; + selectCategorieFormAddPhoto.value = ""; + btnFormAddPhoto.id = ("valider"); }); // fermeture de la modale si clic en dehors de la modale @@ -197,8 +251,18 @@ window.addEventListener("click", function(event) { if (event.target == secondModal) { secondModal.style.display = "none"; firstModal.style.display = "none"; - } -}); + displayImage.style.display = "none"; + imgContainerAddPhoto.style.display = "block"; + labelBtnContainerAddPhoto.style.display = "flex"; + pContainerAddPhoto.style.display = "block"; + //reset formulaire + btnContainerAddPhoto.value =""; + titleElement.value = ""; + selectCategorieFormAddPhoto.value = ""; + btnFormAddPhoto.id = ("valider") + }; +}); + // afficher tous les travaux // function displayWorksModal(works) { @@ -207,6 +271,7 @@ function displayWorksModal(works) { const galleryModalContainer = document.querySelector(".gallery-modal"); // Création d’une balise dédiée à un work const workElement = document.createElement("figure"); + workElement.dataset.id = work.id; // Création des balises const imageElement = document.createElement("img"); imageElement.src = work.imageUrl; @@ -236,10 +301,95 @@ displayWorksModal(works); const buttonsPhotoRemove = document.querySelectorAll(".photo-remove"); for(let button of buttonsPhotoRemove) { - button.addEventListener("click", function (event) { + button.addEventListener("click", async function (event) { + event.preventDefault(); const photoId = event.target.dataset.id; - console.log(photoId); - //document.querySelector(".gallery-modal").innerHTML = ""; - //displayWorksModal(works); + const token = localStorage.getItem("Token"); + console.log(photoId) + // supprime information sur l'API works + const responseWorksDelete = await fetch("http://localhost:5678/api/works/" + photoId, { + method: "DELETE", + headers: { "Authorization" : `Bearer ${token}`}, + body: JSON.stringify(), + }); + + if (responseWorksDelete.ok) { + for (let work of works) { + if (work.id == photoId) { + const workElement = document.querySelector("figure") + workElement.remove() + } + } + } }); }; + + +// affichage image avant upload +const imageNewWork = document.querySelector("#myfile"); +var uploadedImage = ""; + +imageNewWork.addEventListener("change", function () { + const reader = new FileReader(); + reader.addEventListener("load", () => { + displayImage.style.display = "block"; + imgContainerAddPhoto.style.display = "none"; + labelBtnContainerAddPhoto.style.display = "none"; + pContainerAddPhoto.style.display = "none"; + uploadedImage = reader.result; + document.querySelector("#display-image").style.backgroundImage = `url(${uploadedImage})`; + }); + reader.readAsDataURL(this.files[0]); +}); + +//verification formulaire complet et changement couleur btn submit +let spanElement = document.createElement("span"); +spanElement.innerText =""; + +formAddPhoto.addEventListener("change", function () { + //creation objet newWork + const newWork = { + imageUrl: document.querySelector("[name = 'image']").value, + title: document.querySelector("[name ='title']").value, + categoryId: parseInt(document.querySelector("option").dataset.id) + }; + /*const optionsForm = document.querySelectorAll(".option") + for (let option of optionsForm) { + option.addEventListener("click", (event) => { + newWork.categoryId = event.target.dataset.id; + }) + console.log(newWork.categoryId) + }*/ + console.log(newWork) + if (!newWork.imageUrl || !newWork.title || !newWork.categoryId) { + hrAddPhoto.insertAdjacentElement("afterend",spanElement); + spanElement.className = "message-error-login"; + spanElement.innerText = "Veuillez compléter l'ensemble des champs à saisir"; + }else{ + spanElement.innerText =""; + spanElement.className = ""; + + // envoi possible du formulaire + btnFormAddPhoto.id = ("valider-submit"); + btnFormAddPhoto.type = "submit"; + + //Récupération objet FormData et envoi + var formAddPhoto = document.getElementById("formAddPhoto"); + var formData = new FormData(formAddPhoto); + formData.append("image", newWork.imageUrl); + formData.append("title", newWork.title); + formData.append("category", newWork.categoryId); + + var formElement = document.querySelector("form"); + var request = new XMLHttpRequest(); + const token = localStorage.getItem("Token") + console.log(token) + request.open("POST", "http://localhost:5678/api/works"); + request.setRequestHeader("Authorization", `Bearer ${token}`); + request.setRequestHeader("Accept", "application/json") + console.log(formData) + request.send(formData); + + }; +}); + From 094d0828d3050094eb81a22656d9d996271b4ca0 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Thu, 23 Feb 2023 10:43:57 +0100 Subject: [PATCH 13/19] delete work ok, add work in progress --- FrontEnd/assets/css/style.css | 7 +++- FrontEnd/assets/js/index.js | 1 + FrontEnd/assets/js/modal.js | 69 ++++++++++++++++++++--------------- 3 files changed, 46 insertions(+), 31 deletions(-) diff --git a/FrontEnd/assets/css/style.css b/FrontEnd/assets/css/style.css index 88f6d4126..b194b9b84 100644 --- a/FrontEnd/assets/css/style.css +++ b/FrontEnd/assets/css/style.css @@ -362,7 +362,7 @@ form a { .modal-container input, select { box-shadow: 0 4px 14px rgba(0,0,0,0.09); - width: 90%; + width: 100%; } select{ background-color: white; @@ -387,8 +387,13 @@ select{ #valider { width: 237px; height: 36px; + color: white; background-color: #A7A7A7; border-radius: 60px; + font-style: bold; + text-align: center; + line-height: 17px; + font-size: 16px; } #valider-submit { background-color: #1D6154; diff --git a/FrontEnd/assets/js/index.js b/FrontEnd/assets/js/index.js index 4465e6b5b..5c091e88a 100644 --- a/FrontEnd/assets/js/index.js +++ b/FrontEnd/assets/js/index.js @@ -8,6 +8,7 @@ async function displayWorks(works) { const portfolioGallery = document.querySelector(".gallery"); // Création d’une balise dédiée à un work const workElement = document.createElement("figure"); + workElement.dataset.id = work.id; // Création des balises const imageElement = document.createElement("img"); imageElement.src = work.imageUrl; diff --git a/FrontEnd/assets/js/modal.js b/FrontEnd/assets/js/modal.js index d8b23e7b7..de665c41d 100644 --- a/FrontEnd/assets/js/modal.js +++ b/FrontEnd/assets/js/modal.js @@ -76,7 +76,7 @@ formAddPhoto.id = "formAddPhoto"; formAddPhoto.name = "formAddPhoto" //formAddPhoto.action = ""; formAddPhoto.method ="post"; -formAddPhoto.enctype ="multipart/form-data"; +//formAddPhoto.enctype ="multipart/form-data"; const containerAddPhoto = document.createElement("div"); containerAddPhoto.className = "container-add-photo"; const displayImage = document.createElement("div"); @@ -297,13 +297,13 @@ function displayWorksModal(works) { displayWorksModal(works); -//effacer image de la galerie suite à click sur icone// +//effacer image de la galerie suite à click sur icone const buttonsPhotoRemove = document.querySelectorAll(".photo-remove"); for(let button of buttonsPhotoRemove) { button.addEventListener("click", async function (event) { event.preventDefault(); - const photoId = event.target.dataset.id; + const photoId = String(event.target.dataset.id); const token = localStorage.getItem("Token"); console.log(photoId) // supprime information sur l'API works @@ -312,18 +312,18 @@ displayWorksModal(works); headers: { "Authorization" : `Bearer ${token}`}, body: JSON.stringify(), }); - + // supprime élément dans le DOM if (responseWorksDelete.ok) { - for (let work of works) { - if (work.id == photoId) { - const workElement = document.querySelector("figure") - workElement.remove() - } - } - } + const worksElement = document.querySelectorAll("figure"); + for (let workElement of worksElement){ + if (workElement.dataset.id === photoId){ + workElement.remove(); + }; + }; + }; }); }; - + // affichage image avant upload const imageNewWork = document.querySelector("#myfile"); @@ -360,7 +360,7 @@ formAddPhoto.addEventListener("change", function () { }) console.log(newWork.categoryId) }*/ - console.log(newWork) + //console.log(newWork) if (!newWork.imageUrl || !newWork.title || !newWork.categoryId) { hrAddPhoto.insertAdjacentElement("afterend",spanElement); spanElement.className = "message-error-login"; @@ -373,23 +373,32 @@ formAddPhoto.addEventListener("change", function () { btnFormAddPhoto.id = ("valider-submit"); btnFormAddPhoto.type = "submit"; - //Récupération objet FormData et envoi - var formAddPhoto = document.getElementById("formAddPhoto"); - var formData = new FormData(formAddPhoto); - formData.append("image", newWork.imageUrl); - formData.append("title", newWork.title); - formData.append("category", newWork.categoryId); - - var formElement = document.querySelector("form"); - var request = new XMLHttpRequest(); - const token = localStorage.getItem("Token") - console.log(token) - request.open("POST", "http://localhost:5678/api/works"); - request.setRequestHeader("Authorization", `Bearer ${token}`); - request.setRequestHeader("Accept", "application/json") - console.log(formData) - request.send(formData); - + btnFormAddPhoto.addEventListener("click", function (e) { + e.preventDefault(); + //Récupération objet FormData et envoi + var formAddPhoto = document.getElementById("formAddPhoto"); + var formData = new FormData(formAddPhoto); + formData.append("image", newWork.imageUrl); + formData.append("title", newWork.title); + formData.append("category", newWork.categoryId); + console.log(formData) + //var request = new XMLHttpRequest(); + const token = localStorage.getItem("Token") + console.log(token) + /* request.open("POST", "http://localhost:5678/api/works"); + request.setRequestHeader("Authorization", `Bearer ${token}`); + request.setRequestHeader("Accept", "application/json") + request.setRequestBody("formData") + console.log(formData) + request.send(formData);*/ + const responseFormData = fetch("http://localhost:5678/api/works", { + method: "POST", + headers: { "Authorization" : `Bearer ${token}`, + "Accept": "application/json", + /*"Content-Type" : "multipart/formData"*/}, + body: "formData" + }); + }); }; }); From 12b0e224817a602c496c604cc291ecbb403e92a5 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Fri, 24 Feb 2023 16:23:38 +0100 Subject: [PATCH 14/19] modale add photo --- FrontEnd/assets/css/style.css | 11 +- FrontEnd/assets/js/fetch.js | 26 ++- FrontEnd/assets/js/index.js | 26 +-- FrontEnd/assets/js/login.js | 4 +- FrontEnd/assets/js/modal.js | 369 ++++++++++++++-------------------- 5 files changed, 184 insertions(+), 252 deletions(-) diff --git a/FrontEnd/assets/css/style.css b/FrontEnd/assets/css/style.css index b194b9b84..31dd4012a 100644 --- a/FrontEnd/assets/css/style.css +++ b/FrontEnd/assets/css/style.css @@ -162,8 +162,7 @@ form { justify-content: space-between; margin-bottom: 379px; width : 380px; - font-weight: 500; - color: #3D3D3D; + } form h2 { @@ -201,6 +200,7 @@ form a { font-weight: 700; text-align: center; width: 110%; + margin : 10px 0 20px 0; } @@ -340,8 +340,6 @@ form a { color: #B9C5CC; } - - .container-add-photo p{ font-size: 10px; font-weight: 400; @@ -390,11 +388,13 @@ select{ color: white; background-color: #A7A7A7; border-radius: 60px; - font-style: bold; + text-align: center; line-height: 17px; font-size: 16px; + } + #valider-submit { background-color: #1D6154; } @@ -533,6 +533,7 @@ input[type="submit"]{ width: 180px; text-align: center; border-radius: 60px ; + } footer nav ul { diff --git a/FrontEnd/assets/js/fetch.js b/FrontEnd/assets/js/fetch.js index c0e3e2163..d27f78a37 100644 --- a/FrontEnd/assets/js/fetch.js +++ b/FrontEnd/assets/js/fetch.js @@ -4,4 +4,28 @@ const reponseCategories = await fetch("http://localhost:5678/api/categories"); const categories = await reponseCategories.json(); - export {categories}; \ No newline at end of file + export {categories}; + + // afficher tous les travaux // +export function displayWorks(works) { + for (let work of works) { + // Récupération de l'élément du DOM qui accueillera les travaux + const portfolioGallery = document.querySelector(".gallery"); + // Création d’une balise dédiée à un work + const workElement = document.createElement("figure"); + workElement.dataset.id = work.id; + // Création des balises + const imageElement = document.createElement("img"); + imageElement.src = work.imageUrl; + imageElement.alt = work.title; + imageElement.crossOrigin = "anonymous"; + const titleElement = document.createElement("figcaption"); + titleElement.innerText = work.title; + + // On rattache la balise figure à la section gallery + portfolioGallery.appendChild(workElement); + // On rattache l’image et figcaption à workElement (la balise figure) + workElement.appendChild(imageElement); + workElement.appendChild(titleElement); + }; +}; \ No newline at end of file diff --git a/FrontEnd/assets/js/index.js b/FrontEnd/assets/js/index.js index 5c091e88a..619699e35 100644 --- a/FrontEnd/assets/js/index.js +++ b/FrontEnd/assets/js/index.js @@ -1,29 +1,7 @@ // Récupération des travaux et catégories depuis l'API -import { works , categories } from "./fetch.js"; +import { works , categories, displayWorks } from "./fetch.js"; -// afficher tous les travaux // -async function displayWorks(works) { - for (let work of works) { - // Récupération de l'élément du DOM qui accueillera les travaux - const portfolioGallery = document.querySelector(".gallery"); - // Création d’une balise dédiée à un work - const workElement = document.createElement("figure"); - workElement.dataset.id = work.id; - // Création des balises - const imageElement = document.createElement("img"); - imageElement.src = work.imageUrl; - imageElement.alt = work.title; - imageElement.crossOrigin = "anonymous"; - const titleElement = document.createElement("figcaption"); - titleElement.innerText = work.title; - - // On rattache la balise figure à la section gallery - portfolioGallery.appendChild(workElement); - // On rattache l’image et figcaption à workElement (la balise figure) - workElement.appendChild(imageElement); - workElement.appendChild(titleElement); - }; -}; +//affichage de tous les travaux displayWorks(works); // Recupérer et afficher toutes les catégories // diff --git a/FrontEnd/assets/js/login.js b/FrontEnd/assets/js/login.js index 04ce1265b..1b7fc0fd9 100644 --- a/FrontEnd/assets/js/login.js +++ b/FrontEnd/assets/js/login.js @@ -2,9 +2,9 @@ const formLogin = document.querySelector("form"); let spanElement = document.createElement("span"); let inputPassword = document.querySelector("[name='password']"); - formLogin.addEventListener("submit", async function (event) { - event.preventDefault(); /*bloque rechargement de la page*/ + //bloque rechargement de la page + event.preventDefault(); // creation objet login const login = { diff --git a/FrontEnd/assets/js/modal.js b/FrontEnd/assets/js/modal.js index de665c41d..b83108908 100644 --- a/FrontEnd/assets/js/modal.js +++ b/FrontEnd/assets/js/modal.js @@ -1,5 +1,4 @@ -import { works } from "./fetch.js"; -import { categories } from "./fetch.js" +import { works, categories, displayWorks } from "./fetch.js"; // création première modale galerie photo @@ -22,73 +21,50 @@ btnAddPhoto.id = "btn-add-photo"; btnAddPhoto.innerText = "Ajouter une photo"; const btnRemoveGallery = document.createElement("button"); btnRemoveGallery.innerText = "Supprimer la galerie"; -modalProjet.appendChild(modalContainer); -modalContainer.appendChild(imgModalContainer); -modalContainer.appendChild(h3ModalContainer); -modalContainer.appendChild(galleryModalContainer); -modalContainer.appendChild(hrModalContainer); -modalContainer.appendChild(btnAddPhoto); -modalContainer.appendChild(btnRemoveGallery); - -// création deuxième modale ajout photo -/*document.querySelector(".second-modal").innerHTML += ` - `;*/ -const modalProjetPhoto = document.querySelector("#modal-projet-photo") +modalProjet.append(modalContainer); +modalContainer.append(imgModalContainer, h3ModalContainer, galleryModalContainer, hrModalContainer, btnAddPhoto, btnRemoveGallery); + +//creation seconde modale ajout photo +const modalProjetPhoto = document.querySelector("#modal-projet-photo"); const secondModalContainer = document.createElement("div"); -secondModalContainer.className ="modal-container"; +secondModalContainer.className = "modal-container"; +//fleche retour 1ere modale const imgArrowBack = document.createElement("img"); imgArrowBack.id = "arrow-back"; -imgArrowBack.src="./assets/icons/arrow_Back.png"; -imgArrowBack.alt ="flèche retour"; +imgArrowBack.src = "./assets/icons/arrow_Back.png"; +imgArrowBack.alt = "flèche retour"; +//croix fermeture modale const imgSecondModalClose = document.createElement("img"); imgSecondModalClose.id = "second-modal-close"; imgSecondModalClose.className = "modal-close"; imgSecondModalClose.src = "./assets/icons/cross.png"; imgSecondModalClose.alt = "croix pour fermeture de la fenêtre"; + const h3SecondModalContainer = document.createElement("h3"); -h3SecondModalContainer.innerText ="Ajout photo"; +h3SecondModalContainer.innerText = "Ajout photo"; +//formulaire const formAddPhoto = document.createElement("form"); formAddPhoto.id = "formAddPhoto"; -formAddPhoto.name = "formAddPhoto" -//formAddPhoto.action = ""; -formAddPhoto.method ="post"; -//formAddPhoto.enctype ="multipart/form-data"; +formAddPhoto.name = "formAddPhoto"; +formAddPhoto.method = "post"; +formAddPhoto.enctype ="multipart/form-data"; +//container image avant upload const containerAddPhoto = document.createElement("div"); containerAddPhoto.className = "container-add-photo"; -const displayImage = document.createElement("div"); -displayImage.id = "display-image"; -displayImage.style.display = "none"; const imgContainerAddPhoto = document.createElement("img"); -imgContainerAddPhoto.src = "./assets/icons/picture-svgrepo.png"; +imgContainerAddPhoto.src = "./assets/icons/picture-svgrepo.png"; imgContainerAddPhoto.alt = "icone image"; const labelBtnContainerAddPhoto = document.createElement("label"); -labelBtnContainerAddPhoto.className = ("myfile"); +labelBtnContainerAddPhoto.className = "myfile"; labelBtnContainerAddPhoto.for = "image"; labelBtnContainerAddPhoto.innerText = "+ Ajouter photo"; +const pContainerAddPhoto = document.createElement("p"); +pContainerAddPhoto.innerText = "jpg. png : 4mo max"; + +//container pour affichage image upload +const displayImage = document.createElement("div"); +displayImage.id = "display-image"; +displayImage.style.display = "none"; const btnContainerAddPhoto = document.createElement("input"); btnContainerAddPhoto.type = "file"; btnContainerAddPhoto.id = "myfile"; @@ -96,17 +72,16 @@ btnContainerAddPhoto.name = "image"; btnContainerAddPhoto.accept = "image/png, image/jpg"; btnContainerAddPhoto.style.display = "none"; btnContainerAddPhoto.attributes.required = "required"; -const pContainerAddPhoto = document.createElement("p"); -pContainerAddPhoto.innerText = "jpg. png : 4mo max"; +// input du formulaire : titre et categorie const labelFormAddPhoto = document.createElement("label"); labelFormAddPhoto.for = "title"; labelFormAddPhoto.innerText = "Titre"; -const titleElement = document.createElement("input"); -titleElement.type ="text"; -titleElement.name = "title"; -titleElement.id = "title"; -titleElement.attributes.required ="required"; +const titlePhoto = document.createElement("input"); +titlePhoto.type = "text"; +titlePhoto.name = "title"; +titlePhoto.id = "title"; +titlePhoto.attributes.required = "required"; const labelCategorieFormAddPhoto = document.createElement("label"); labelCategorieFormAddPhoto.for = "category"; labelCategorieFormAddPhoto.innerText = "Catégorie"; @@ -115,64 +90,30 @@ selectCategorieFormAddPhoto.name = "category"; selectCategorieFormAddPhoto.id = "select-categorie"; selectCategorieFormAddPhoto.autocomplete = "off"; selectCategorieFormAddPhoto.attributes.required = "required"; -// Recupérer et afficher toutes les catégories // + +// Recupérer et afficher toutes les catégories dans le select for (let categorie of categories) { - var optionForm = document.createElement("option") - optionForm.className = "option" - optionForm.dataset.id = categorie.id; - optionForm.innerText = categorie.name; - selectCategorieFormAddPhoto.appendChild(optionForm); - console.log(optionForm) -} - - - -/*const optionFirst = document.createElement("option"); -optionFirst.value = ""; -optionFirst.innerText = "Choisissez une catégorie"; -const optionSecond = document.createElement("option"); -optionSecond.value = "Objets"; -optionSecond.dataset.id = "1"; -optionSecond.innerText = "Objets"; -const optionThird = document.createElement("option"); -optionThird.value = "appartements"; -optionThird.innerText = "Appartements"; -optionThird.dataset.id = "2"; -const optionFour = document.createElement("option"); -optionFour.value = "hotels-restaurants"; -optionFour.innerText = "Hôtels & restaurants"; -optionFour.dataset.id = "3";*/ + var optionForm = document.createElement("option"); + optionForm.className = "option"; + optionForm.value = categorie.id; + optionForm.innerText = categorie.name; + selectCategorieFormAddPhoto.appendChild(optionForm); + }; + +//footer du formulaire const hrAddPhoto = document.createElement("hr"); const btnFormAddPhoto = document.createElement("input"); -//btnFormAddPhoto.type = "submit"; btnFormAddPhoto.id = "valider"; btnFormAddPhoto.value = "valider"; -modalProjetPhoto.appendChild(secondModalContainer); -secondModalContainer.appendChild(imgArrowBack); -secondModalContainer.appendChild(imgSecondModalClose); -secondModalContainer.appendChild(h3SecondModalContainer); -secondModalContainer.appendChild(formAddPhoto); -formAddPhoto.appendChild(containerAddPhoto); -containerAddPhoto.appendChild(displayImage); -containerAddPhoto.appendChild(imgContainerAddPhoto); -containerAddPhoto.appendChild(labelBtnContainerAddPhoto); -labelBtnContainerAddPhoto.appendChild(btnContainerAddPhoto); -containerAddPhoto.appendChild(pContainerAddPhoto); - -formAddPhoto.appendChild(labelFormAddPhoto); -formAddPhoto.appendChild(titleElement); -formAddPhoto.appendChild(labelCategorieFormAddPhoto); -formAddPhoto.appendChild(selectCategorieFormAddPhoto); -/*selectCategorieFormAddPhoto.appendChild(optionFirst); -selectCategorieFormAddPhoto.appendChild(optionSecond); -selectCategorieFormAddPhoto.appendChild(optionThird); -selectCategorieFormAddPhoto.appendChild(optionFour);*/ - -formAddPhoto.appendChild(hrAddPhoto); -formAddPhoto.appendChild(btnFormAddPhoto); +modalProjetPhoto.append(secondModalContainer); +secondModalContainer.append(imgArrowBack, imgSecondModalClose, h3SecondModalContainer, formAddPhoto); +formAddPhoto.append(containerAddPhoto, labelFormAddPhoto, titlePhoto, labelCategorieFormAddPhoto, selectCategorieFormAddPhoto, hrAddPhoto, btnFormAddPhoto); +containerAddPhoto.append(imgContainerAddPhoto, labelBtnContainerAddPhoto, pContainerAddPhoto, displayImage); +labelBtnContainerAddPhoto.append(btnContainerAddPhoto); +//fonctionnement modale // récupère la 1ere modale var firstModal = document.getElementById("modal-projet"); @@ -183,21 +124,21 @@ var btnOpenModal = document.getElementById("modal-projet-btn"); var btnCloseModal = document.getElementById("first-modal-close"); // ouverture de la modale au click -btnOpenModal.addEventListener("click", function() { +btnOpenModal.addEventListener("click", function () { firstModal.style.display = "block"; }); // fermeture de la modale -btnCloseModal.addEventListener("click", function() { +btnCloseModal.addEventListener("click", function () { firstModal.style.display = "none"; }); // fermeture de la modale si clic en dehors de la modale -window.addEventListener("click", function(event) { +window.addEventListener("click", function (event) { if (event.target == firstModal) { - firstModal.style.display = "none"; - secondModal.style.display = "none"; - } + firstModal.style.display = "none"; + secondModal.style.display = "none"; + }; }); // récupère la 2eme modale @@ -210,61 +151,45 @@ var btnOpenSecondModal = document.getElementById("btn-add-photo"); var btnCloseModal = document.getElementById("second-modal-close"); // récupère le bouton qui retourne à la 1ere modale -var btnReturnModal = document.getElementById("arrow-back") +var btnReturnModal = document.getElementById("arrow-back"); // ouverture de la 2eme modale au click btnOpenSecondModal.addEventListener("click", function () { - firstModal.style.display = "none"; - secondModal.style.display = "block"; - }); - -// retour sur la 1ere modale -btnReturnModal.addEventListener("click", function() { - secondModal.style.display = "none"; - firstModal.style.display = "block"; + firstModal.style.display = "none"; + secondModal.style.display = "block"; + //reset formulaire displayImage.style.display = "none"; imgContainerAddPhoto.style.display = "block"; labelBtnContainerAddPhoto.style.display = "flex"; pContainerAddPhoto.style.display = "block"; - //reset formulaire - btnContainerAddPhoto.value =""; - titleElement.value = ""; + btnContainerAddPhoto.value = ""; + titlePhoto.value = ""; selectCategorieFormAddPhoto.value = ""; - btnFormAddPhoto.id = ("valider"); + btnFormAddPhoto.id = "valider"; + spanElement.innerText = ""; + spanElement.className = ""; +}); + +// retour sur la 1ere modale +btnReturnModal.addEventListener("click", function () { + secondModal.style.display = "none"; + firstModal.style.display = "block"; }); + // fermeture de la modale -btnCloseModal.addEventListener("click", function() { +btnCloseModal.addEventListener("click", function () { secondModal.style.display = "none"; - displayImage.style.display = "none"; - imgContainerAddPhoto.style.display = "block"; - labelBtnContainerAddPhoto.style.display = "flex"; - pContainerAddPhoto.style.display = "block"; - //reset formulaire - btnContainerAddPhoto.value =""; - titleElement.value = ""; - selectCategorieFormAddPhoto.value = ""; - btnFormAddPhoto.id = ("valider"); }); // fermeture de la modale si clic en dehors de la modale -window.addEventListener("click", function(event) { +window.addEventListener("click", function (event) { if (event.target == secondModal) { secondModal.style.display = "none"; firstModal.style.display = "none"; - displayImage.style.display = "none"; - imgContainerAddPhoto.style.display = "block"; - labelBtnContainerAddPhoto.style.display = "flex"; - pContainerAddPhoto.style.display = "block"; - //reset formulaire - btnContainerAddPhoto.value =""; - titleElement.value = ""; - selectCategorieFormAddPhoto.value = ""; - btnFormAddPhoto.id = ("valider") }; -}); - +}); -// afficher tous les travaux // +// afficher tous les travaux dans la modale function displayWorksModal(works) { for (let work of works) { // Récupération de l'élément du DOM qui accueillera les travaux @@ -272,21 +197,21 @@ function displayWorksModal(works) { // Création d’une balise dédiée à un work const workElement = document.createElement("figure"); workElement.dataset.id = work.id; - // Création des balises + // Création des balises const imageElement = document.createElement("img"); imageElement.src = work.imageUrl; imageElement.alt = work.title; imageElement.crossOrigin = "anonymous"; const buttonElement = document.createElement("button"); - buttonElement.className ="photo-remove"; + buttonElement.className = "photo-remove"; const imageButtonElement = document.createElement("img"); //imageButtonElement.className ="photo-remove"; - imageButtonElement.src ="./assets/icons/remove.png"; - imageButtonElement.alt ="remove"; + imageButtonElement.src = "./assets/icons/remove.png"; + imageButtonElement.alt = "remove"; imageButtonElement.dataset.id = work.id; const figcaptionElement = document.createElement("figcaption"); figcaptionElement.innerText = "éditer"; - + galleryModalContainer.appendChild(workElement); workElement.appendChild(imageElement); workElement.appendChild(buttonElement); @@ -296,34 +221,31 @@ function displayWorksModal(works) { }; displayWorksModal(works); +// effacer image de la galerie suite à click sur icone -//effacer image de la galerie suite à click sur icone - - const buttonsPhotoRemove = document.querySelectorAll(".photo-remove"); - for(let button of buttonsPhotoRemove) { - button.addEventListener("click", async function (event) { +const buttonsPhotoRemove = document.querySelectorAll(".photo-remove"); +for (let button of buttonsPhotoRemove) { + button.addEventListener("click", async function (event) { event.preventDefault(); const photoId = String(event.target.dataset.id); const token = localStorage.getItem("Token"); - console.log(photoId) - // supprime information sur l'API works - const responseWorksDelete = await fetch("http://localhost:5678/api/works/" + photoId, { + // supprime information sur l'API works + const responseWorksDelete = await fetch("http://localhost:5678/api/works/" + photoId, { method: "DELETE", - headers: { "Authorization" : `Bearer ${token}`}, + headers: { Authorization: `Bearer ${token}` }, body: JSON.stringify(), - }); + }); // supprime élément dans le DOM if (responseWorksDelete.ok) { const worksElement = document.querySelectorAll("figure"); - for (let workElement of worksElement){ - if (workElement.dataset.id === photoId){ - workElement.remove(); - }; + for (let workElement of worksElement) { + if (workElement.dataset.id === photoId) { + workElement.remove(); }; }; - }); - }; - + }; + }); +}; // affichage image avant upload const imageNewWork = document.querySelector("#myfile"); @@ -343,62 +265,69 @@ imageNewWork.addEventListener("change", function () { }); //verification formulaire complet et changement couleur btn submit +//pour affichage message erreur let spanElement = document.createElement("span"); -spanElement.innerText =""; +spanElement.innerText = ""; +spanElement.className = ""; -formAddPhoto.addEventListener("change", function () { - //creation objet newWork +formAddPhoto.addEventListener("click", function () { + //creation objet newWork pour validation formulaire const newWork = { - imageUrl: document.querySelector("[name = 'image']").value, + imageUrl: document.querySelector("input[type=file]").value, title: document.querySelector("[name ='title']").value, - categoryId: parseInt(document.querySelector("option").dataset.id) + categoryId: document.querySelector("select[name='category']").value, }; - /*const optionsForm = document.querySelectorAll(".option") - for (let option of optionsForm) { - option.addEventListener("click", (event) => { - newWork.categoryId = event.target.dataset.id; - }) - console.log(newWork.categoryId) - }*/ - //console.log(newWork) - if (!newWork.imageUrl || !newWork.title || !newWork.categoryId) { - hrAddPhoto.insertAdjacentElement("afterend",spanElement); - spanElement.className = "message-error-login"; - spanElement.innerText = "Veuillez compléter l'ensemble des champs à saisir"; - }else{ - spanElement.innerText =""; + + if (newWork.imageUrl && newWork.title && newWork.categoryId) { + spanElement.innerText = ""; spanElement.className = ""; - // envoi possible du formulaire - btnFormAddPhoto.id = ("valider-submit"); + btnFormAddPhoto.id = "valider-submit"; btnFormAddPhoto.type = "submit"; - - btnFormAddPhoto.addEventListener("click", function (e) { - e.preventDefault(); - //Récupération objet FormData et envoi - var formAddPhoto = document.getElementById("formAddPhoto"); - var formData = new FormData(formAddPhoto); - formData.append("image", newWork.imageUrl); - formData.append("title", newWork.title); - formData.append("category", newWork.categoryId); - console.log(formData) - //var request = new XMLHttpRequest(); - const token = localStorage.getItem("Token") - console.log(token) - /* request.open("POST", "http://localhost:5678/api/works"); - request.setRequestHeader("Authorization", `Bearer ${token}`); - request.setRequestHeader("Accept", "application/json") - request.setRequestBody("formData") - console.log(formData) - request.send(formData);*/ - const responseFormData = fetch("http://localhost:5678/api/works", { - method: "POST", - headers: { "Authorization" : `Bearer ${token}`, - "Accept": "application/json", - /*"Content-Type" : "multipart/formData"*/}, - body: "formData" - }); - }); + }else { + btnFormAddPhoto.addEventListener("click", function() { + hrAddPhoto.insertAdjacentElement("afterend", spanElement); + spanElement.className = "message-error-login"; + spanElement.innerText = "Veuillez compléter l'ensemble des champs à saisir"; + btnFormAddPhoto.id = "valider"; + btnFormAddPhoto.type = "" + }); }; }); +// envoi formData sur api +btnFormAddPhoto.addEventListener("click", async function (e) { + e.preventDefault(); + // creation formData + const formData = new FormData(); + formData.append("image", document.querySelector("input[type=file]").files[0]); + formData.append("title", document.querySelector("[name ='title']").value); + formData.append("category", document.querySelector("select[name='category']").value); + + const token = localStorage.getItem("Token"); + + const responseFormData = await fetch("http://localhost:5678/api/works", { + method: "POST", + headers: {"Authorization" : `Bearer ${token}`}, + body: formData + }); + + // affiche élément dans le DOM + if (responseFormData.ok) { + works.push(await responseFormData.json()); + const galleryModalContainer = document.querySelector(".gallery-modal"); + galleryModalContainer.innerHTML= ""; + displayWorksModal(works); + const portfolioGallery = document.querySelector(".gallery"); + portfolioGallery.innerHTML= ""; + displayWorks(works); + //fermeture modale + secondModal.style.display = "none"; + firstModal.style.display = "block"; + displayImage.style.display = "none"; + imgContainerAddPhoto.style.display = "block"; + labelBtnContainerAddPhoto.style.display = "flex"; + pContainerAddPhoto.style.display = "block"; + }; +}); + From 6b426bf66606941e3f5648931328e0f2022912e0 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Mon, 27 Feb 2023 16:42:06 +0100 Subject: [PATCH 15/19] validator code --- FrontEnd/assets/css/style.css | 453 ++++++++++++++++++---------------- FrontEnd/assets/js/index.js | 4 +- FrontEnd/assets/js/modal.js | 75 +++--- FrontEnd/index.html | 201 ++++++++------- FrontEnd/login.html | 82 +++--- 5 files changed, 417 insertions(+), 398 deletions(-) diff --git a/FrontEnd/assets/css/style.css b/FrontEnd/assets/css/style.css index 31dd4012a..4f869d3b2 100644 --- a/FrontEnd/assets/css/style.css +++ b/FrontEnd/assets/css/style.css @@ -54,46 +54,8 @@ body { font-size: 14px; } -.edition-mode { - display: none; -} - -.edition-mode.active { - display: contents; -} - -#edition-header { - display: flex; - justify-content: center; - align-items: center; - margin:0; - height : 59px; - background-color: black; - color: white; - box-sizing: border-box; -} - -.edition-mode img { - color: white; -} - -.edition-mode span{ - font-weight: 400; - font-size: 16px; - line-height: 19px; - margin: 0 21px 0 13px; -} - -.edition-mode button { - padding : 0 2.5% 0 2.5%; - font-weight: 500; - line-height: 16px; - background: white; - border-radius: 30px; - height: 38px; - border: none; -} +/** header **/ header { display: flex; justify-content: space-between; @@ -153,7 +115,151 @@ nav li a span { font-weight: 600; } -/* Formulaire Log In */ +#introduction { + display: flex; + align-items: center; + width: 100%; + margin-left: 80px; +} + +#photo-presentation { + flex: 1; +} +#introduction button { + display: flex; +} + +#introduction img { + margin: auto; + width: 80%; +} + +#introduction article { + flex: 1; + color: #3D3D3D; + line-height: 16px; + margin-right: 80px; +} + +#introduction h2 { + margin-bottom: 1em; +} + +#introduction p { + margin-bottom: 0.5em; + width: 80%; + text-align: justify; +} + +#edition-portfolio { + display: flex; + justify-content: center; + margin-bottom: 1em; +} + +#portfolio { + margin : 20px 80px 30px 0; +} + +#portfolio h2{ + padding-right: 16px; + margin-bottom: 20px; +} + +/* ajout bouton filtre catégorie*/ +.filters { + display: flex; + justify-content: center; + margin-bottom: 2rem; + margin-left: 3rem; +} +.filter-btn { + border-radius: 60px; + text-align: center; + border: 1px solid #1D6154; + color: #1D6154; + background: white; + padding: 9px 30px 9px 28px; + font-size: 16px; + font-weight: 700; + font-family: 'Syne'; + line-height: 19px; + margin-right: 8px; +} + +.filter-btn.active { + color: white; + background: #1D6154; +} + +.gallery { + width: 90%; + display: grid; + grid-template-columns: 1fr 1fr 1fr; + grid-column-gap: 20px; + grid-row-gap: 20px; + margin-left: 80px; + margin-right: 80px; +} + +.gallery img { + width: 100%; +} + +#contact { + width: 50%; + margin: auto; +} +#contact > * { + text-align: center; +} + +#contact h2{ + margin-bottom: 20px; +} + +#contact form { + text-align: left; + margin-top:30px; + display: flex; + flex-direction: column; +} + +#contact input { + height: 50px; + font-size: 1.2em; + border: none; + box-shadow: 0px 4px 14px rgba(0, 0, 0, 0.09); +} + +#contact label { + margin: 2em 0 1em 0; +} + +#contact textarea { + border: none; + box-shadow: 0px 4px 14px rgba(0, 0, 0, 0.09); +} + +input[type="submit"]{ + font-family: 'Syne'; + font-weight: 700; + color: white; + background-color: #1D6154; + margin : 2em auto ; + width: 180px; + text-align: center; + border-radius: 60px ; +} + +footer nav ul { + display: flex; + justify-content: flex-end; + margin: 2em; + font-weight: 300; +} + +/** Formulaire Log In **/ form { margin: auto; display: flex; @@ -191,7 +297,7 @@ form input { form a { color: #3D3D3D; } - +/* message erreur */ .message-error-login { background-color: white; color: #D65353; @@ -199,10 +305,54 @@ form a { border: 2px dashed #D65353; font-weight: 700; text-align: center; - width: 110%; - margin : 10px 0 20px 0; + width: 100%; + margin : 10px 0 10px 0; +} + +/** mode edition **/ +.edition-mode { + display: none; +} + +.edition-mode.active { + display: contents; +} + +#edition-header { + display: flex; + justify-content: center; + align-items: center; + margin:0; + height : 59px; + background-color: black; + color: white; + box-sizing: border-box; +} + +.edition-mode span{ + font-weight: 400; + font-size: 16px; + line-height: 19px; + margin: 0 21px 0 13px; +} + +.edition-mode button { + padding : 0 2.5% 0 2.5%; + font-weight: 500; + line-height: 16px; + background: white; + border-radius: 30px; + height: 38px; + border: none; +} +.edition-mode a { + text-decoration: none; + color : black; } +#modal-projet-btn { + padding-top: 6px; +} /* bouton lien modifier modale */ .square-pen { @@ -210,7 +360,7 @@ form a { width: 18px; } -.edition-mode button[type="button"]{ +.edition-mode button[type="button"] { display: flex; justify-content: space-between; align-items: center; @@ -221,14 +371,13 @@ form a { /* modale*/ -.modal{ +.modal { position: fixed; display: none; top: 0; left: 0; width: 100%; height: 100%; - z-index: 1; /* Sit on top */ overflow: auto; background: rgba(0, 0,0, 0.4); } @@ -238,7 +387,7 @@ form a { flex-direction: column; padding: 4% 6% 4% 6%; background-color: white; - width: 630px; + max-width: 630px; border-radius: 10px; margin: 15% auto; } @@ -269,6 +418,7 @@ form a { width: 21px; height: 21px; } + .photo-remove img { position: relative; top: -135px; @@ -280,6 +430,7 @@ form a { .gallery-modal figure img { width: 100%; } + .gallery-modal figcaption { display: inline; margin-left: -22px; @@ -287,7 +438,6 @@ form a { .modal-container hr { width: 90%; - size: 1px; color: #B3B3B3; } @@ -320,6 +470,13 @@ form a { top: 15px; } +#form-add-photo { + display: flex; + flex-direction: column; + justify-content: center; + width: 100%; + margin: auto; +} .container-add-photo { display: flex; @@ -330,11 +487,10 @@ form a { height: 169px; background-color: #E8F1F7; border-radius: 3px; - margin: 30px auto; - padding : 0 40px 0 40px; + margin-top: 30px; } -.container-add-photo img{ +.container-add-photo img { width: 58px; height: 58px; color: #B9C5CC; @@ -345,204 +501,63 @@ form a { font-weight: 400; } -.modal-container form { - margin: 20px; - width: 90%; - margin: auto; -} - -.modal-container label, select { +.modal-container label { + display: flex; font-weight: 500; color: #3D3D3D; line-height: 16px; - width: 90%; + width: 25%; + margin-top: 10px; + margin-left: 35px; +} + +#label-file { + padding : 2%; + justify-content: center; + margin: 20px auto; + background-color: #CBD6DC; + border-radius: 50px; + border: none; } .modal-container input, select { box-shadow: 0 4px 14px rgba(0,0,0,0.09); - width: 100%; + width: 90%; } -select{ - background-color: white; - box-shadow: 0 4px 14px rgba(0,0,0,0.09); + +#form-add-photo hr{ + width: 90%; +} + +.modal-container select{ border: none; height: 51px; margin-bottom: 40px; } -.myfile { - display: flex; - justify-content: center; - color: #306685; - background-color: #CBD6DC; - border-radius: 50px; - margin: auto; - height: 36px; - border: none; - font-weight: 500; - line-height: 16px; - align-items: center; -} + #valider { width: 237px; height: 36px; color: white; background-color: #A7A7A7; border-radius: 60px; - text-align: center; line-height: 17px; font-size: 16px; - + outline : none; } #valider-submit { background-color: #1D6154; -} - -#introduction { - display: flex; - align-items: center; - width: 100%; - margin-left: 80px; -} - -#photo-presentation { - flex: 1; -} -#introduction button { - display: flex; -} - -#introduction img { - margin: auto; - width: 80%; -} - -#introduction article { - flex: 1; - color: #3D3D3D; - line-height: 16px; -} - -#introduction h2 { - margin-bottom: 1em; -} - -#introduction p { - margin-bottom: 0.5em; - width: 80%; - text-align: justify; - -} -#edition-portfolio { - display: flex; - justify-content: center; - margin-bottom: 1em; -} -#portfolio h2{ - padding-right: 16px; -} - -/* ajout bouton filtre catégorie*/ -.filtres { - display: flex; - justify-content: center; - margin-bottom: 2rem; - margin-left: 3rem; -} -.filter-btn { - border-radius: 60px; - text-align: center; - border: 1px solid #1D6154; - color: #1D6154; - background: white; - padding: 9px 30px 9px 28px; - font-size: 16px; - font-weight: 700; - font-family: 'Syne'; - line-height: 19px; - margin-right: 8px; -} - -.filter-btn.active { - color: white; - background: #1D6154; + width: 237px; + height: 36px; border-radius: 60px; text-align: center; - border: 1px solid #1D6154; - padding: 9px 30px 9px 28px; + line-height: 17px; font-size: 16px; - font-weight: 700; - font-family: 'Syne'; - line-height: 19px; - margin-right: 8px; -} - -.gallery { - width: 90%; - display: grid; - grid-template-columns: 1fr 1fr 1fr; - grid-column-gap: 20px; - grid-row-gap: 20px; - margin-left: 80px; - margin-right: 80px; -} - -.gallery img { - width: 100%; -} - -#contact { - width: 50%; - margin: auto; -} -#contact > * { - text-align: center; - -} -#contact h2{ - margin-bottom: 20px; -} -#contact form { - text-align: left; - margin-top:30px; - display: flex; - flex-direction: column; -} - -#contact input { - height: 50px; - font-size: 1.2em; - border: none; - box-shadow: 0px 4px 14px rgba(0, 0, 0, 0.09); -} -#contact label { - margin: 2em 0 1em 0; -} -#contact textarea { - border: none; - box-shadow: 0px 4px 14px rgba(0, 0, 0, 0.09); -} - -input[type="submit"]{ - font-family: 'Syne'; - font-weight: 700; - color: white; - background-color: #1D6154; - margin : 2em auto ; - width: 180px; - text-align: center; - border-radius: 60px ; - -} - -footer nav ul { - display: flex; - justify-content: flex-end; - margin: 2em; - font-weight: 300; } +/* affichage image upload */ #display-image { width : 129px; height: 193px; diff --git a/FrontEnd/assets/js/index.js b/FrontEnd/assets/js/index.js index 619699e35..fce8f088e 100644 --- a/FrontEnd/assets/js/index.js +++ b/FrontEnd/assets/js/index.js @@ -7,7 +7,7 @@ displayWorks(works); // Recupérer et afficher toutes les catégories // async function displayCategories(categories) { for (let categorie of categories) { - const buttonsFilter = document.querySelector(".filtres") + const buttonsFilter = document.querySelector(".filters") const buttonFilter = document.createElement("button"); buttonFilter.className = "filter-btn"; buttonFilter.dataset.id = categorie.id; @@ -68,7 +68,7 @@ if (token){ for (let data of modeEdition) { data.classList.add("active"); }; - const modeEditionFilter = document.querySelector(".filtres"); + const modeEditionFilter = document.querySelector(".filters"); modeEditionFilter.style.display = "none"; const logout = document.getElementById("login-logout"); logout.setAttribute("href", "./index.html"); diff --git a/FrontEnd/assets/js/modal.js b/FrontEnd/assets/js/modal.js index b83108908..26c7d4b65 100644 --- a/FrontEnd/assets/js/modal.js +++ b/FrontEnd/assets/js/modal.js @@ -44,7 +44,7 @@ const h3SecondModalContainer = document.createElement("h3"); h3SecondModalContainer.innerText = "Ajout photo"; //formulaire const formAddPhoto = document.createElement("form"); -formAddPhoto.id = "formAddPhoto"; +formAddPhoto.id = "form-add-photo"; formAddPhoto.name = "formAddPhoto"; formAddPhoto.method = "post"; formAddPhoto.enctype ="multipart/form-data"; @@ -55,7 +55,7 @@ const imgContainerAddPhoto = document.createElement("img"); imgContainerAddPhoto.src = "./assets/icons/picture-svgrepo.png"; imgContainerAddPhoto.alt = "icone image"; const labelBtnContainerAddPhoto = document.createElement("label"); -labelBtnContainerAddPhoto.className = "myfile"; +labelBtnContainerAddPhoto.id = "label-file"; labelBtnContainerAddPhoto.for = "image"; labelBtnContainerAddPhoto.innerText = "+ Ajouter photo"; const pContainerAddPhoto = document.createElement("p"); @@ -222,30 +222,39 @@ function displayWorksModal(works) { displayWorksModal(works); // effacer image de la galerie suite à click sur icone - -const buttonsPhotoRemove = document.querySelectorAll(".photo-remove"); -for (let button of buttonsPhotoRemove) { - button.addEventListener("click", async function (event) { - event.preventDefault(); - const photoId = String(event.target.dataset.id); - const token = localStorage.getItem("Token"); - // supprime information sur l'API works - const responseWorksDelete = await fetch("http://localhost:5678/api/works/" + photoId, { - method: "DELETE", - headers: { Authorization: `Bearer ${token}` }, - body: JSON.stringify(), - }); - // supprime élément dans le DOM - if (responseWorksDelete.ok) { - const worksElement = document.querySelectorAll("figure"); - for (let workElement of worksElement) { - if (workElement.dataset.id === photoId) { - workElement.remove(); +function deleteWorks() { + const buttonsPhotoRemove = document.querySelectorAll(".photo-remove"); + for (let button of buttonsPhotoRemove) { + button.addEventListener("click", async function (event) { + event.preventDefault(); + const photoId = String(event.target.dataset.id); + const token = localStorage.getItem("Token"); + // supprime information sur l'API works + const responseWorksDelete = await fetch("http://localhost:5678/api/works/" + photoId, { + method: "DELETE", + headers: { Authorization: `Bearer ${token}` }, + body: JSON.stringify(), + }); + + if (responseWorksDelete.ok) { + // supprime élément dans le DOM + const worksElement = document.querySelectorAll("figure"); + for (let workElement of worksElement) { + if (workElement.dataset.id === photoId) { + workElement.remove(); + }; }; - }; - }; - }); + // supprime element dans works + const worksIndex = works.findIndex(index); + function index (work){ + return work === photoId + }; + works.splice(worksIndex,1); + }; + }); + }; }; +deleteWorks(works); // affichage image avant upload const imageNewWork = document.querySelector("#myfile"); @@ -290,7 +299,7 @@ formAddPhoto.addEventListener("click", function () { spanElement.className = "message-error-login"; spanElement.innerText = "Veuillez compléter l'ensemble des champs à saisir"; btnFormAddPhoto.id = "valider"; - btnFormAddPhoto.type = "" + btnFormAddPhoto.type = ""; }); }; }); @@ -298,12 +307,13 @@ formAddPhoto.addEventListener("click", function () { // envoi formData sur api btnFormAddPhoto.addEventListener("click", async function (e) { e.preventDefault(); - // creation formData + + // creation formData const formData = new FormData(); formData.append("image", document.querySelector("input[type=file]").files[0]); formData.append("title", document.querySelector("[name ='title']").value); formData.append("category", document.querySelector("select[name='category']").value); - + const token = localStorage.getItem("Token"); const responseFormData = await fetch("http://localhost:5678/api/works", { @@ -311,7 +321,7 @@ btnFormAddPhoto.addEventListener("click", async function (e) { headers: {"Authorization" : `Bearer ${token}`}, body: formData }); - + // affiche élément dans le DOM if (responseFormData.ok) { works.push(await responseFormData.json()); @@ -321,13 +331,10 @@ btnFormAddPhoto.addEventListener("click", async function (e) { const portfolioGallery = document.querySelector(".gallery"); portfolioGallery.innerHTML= ""; displayWorks(works); - //fermeture modale + //fermeture 2 modales secondModal.style.display = "none"; - firstModal.style.display = "block"; - displayImage.style.display = "none"; - imgContainerAddPhoto.style.display = "block"; - labelBtnContainerAddPhoto.style.display = "flex"; - pContainerAddPhoto.style.display = "block"; + firstModal.style.display = "none"; + deleteWorks(works); }; }); diff --git a/FrontEnd/index.html b/FrontEnd/index.html index 50d1e3fa2..ed23098ec 100644 --- a/FrontEnd/index.html +++ b/FrontEnd/index.html @@ -1,106 +1,105 @@ - - - Sophie Bluel - Architecte d'intérieur - - - - - - - - - - - - - - - - -
-
- icone modifier blanc - Mode édition - -
-
-
-

Sophie Bluel Architecte d'intérieur

- -
-
-
-
- -
- -
-
-
-
- -
-

Designer d'espace

-

Je raconte votre histoire, je valorise vos idées. Je vous accompagne de la conception à la livraison finale du chantier.

-

Chaque projet sera étudié en commun, de façon à mettre en valeur les volumes, les matières et les couleurs dans le respect de l’esprit des lieux et le choix adapté des matériaux. Le suivi du chantier sera assuré dans le souci du détail, le respect du planning et du budget.

-

En cas de besoin, une équipe pluridisciplinaire peut-être constituée : architecte DPLG, décorateur(trice).

-
-
-
-
-

Mes Projets

-
- + + + Sophie Bluel - Architecte d'intérieur + + + + + + + + + + + + + + + +
+
+ icone modifier en blanc + Mode édition +
-
- -
- -
-
-

Contact

-

Vous avez un projet ? Discutons-en !

-
- - - - - - - -
-
-
- -
- -
- - + +
+

Sophie Bluel Architecte d'intérieur

+ +
+ +
+
+
+ +
+ +
+
+
+
+ +
+

Designer d'espace

+

Je raconte votre histoire, je valorise vos idées. Je vous accompagne de la conception à la livraison finale du chantier.

+

Chaque projet sera étudié en commun, de façon à mettre en valeur les volumes, les matières et les couleurs dans le respect de l’esprit des lieux et le choix adapté des matériaux. Le suivi du chantier sera assuré dans le souci du détail, le respect du planning et du budget.

+

En cas de besoin, une équipe pluridisciplinaire peut-être constituée : architecte DPLG, décorateur(trice).

+
+
+
+
+

Mes Projets

+ +
+
+ +
+ +
+
+

Contact

+

Vous avez un projet ? Discutons-en !

+
+ + + + + + + +
+
+
+
+ +
+ diff --git a/FrontEnd/login.html b/FrontEnd/login.html index 5be2a3493..01b4ccce9 100644 --- a/FrontEnd/login.html +++ b/FrontEnd/login.html @@ -1,45 +1,43 @@ - - - Sophie Bluel - Architecte d'intérieur - - - - - - - - - -
-

Sophie Bluel Architecte d'intérieur

- -
- -
-

Log In

- - - - - - - Mot de passe oublié -
- -
- -
+ + + Sophie Bluel - Architecte d'intérieur + + + + + + + + + +
+

Sophie Bluel Architecte d'intérieur

+ +
+
+

Log In

+ + + + + + Mot de passe oublié +
+
+ +
+ \ No newline at end of file From 3921e9b9c87beeb1d6236f4f4add11740fd610fc Mon Sep 17 00:00:00 2001 From: studentsjj Date: Tue, 28 Feb 2023 12:33:17 +0100 Subject: [PATCH 16/19] form upload image, add features size type --- FrontEnd/assets/js/{fetch.js => data.js} | 2 +- FrontEnd/assets/js/index.js | 2 +- FrontEnd/assets/js/modal.js | 63 +++++++++++++++--------- 3 files changed, 43 insertions(+), 24 deletions(-) rename FrontEnd/assets/js/{fetch.js => data.js} (95%) diff --git a/FrontEnd/assets/js/fetch.js b/FrontEnd/assets/js/data.js similarity index 95% rename from FrontEnd/assets/js/fetch.js rename to FrontEnd/assets/js/data.js index d27f78a37..d244b3e97 100644 --- a/FrontEnd/assets/js/fetch.js +++ b/FrontEnd/assets/js/data.js @@ -22,7 +22,7 @@ export function displayWorks(works) { const titleElement = document.createElement("figcaption"); titleElement.innerText = work.title; - // On rattache la balise figure à la section gallery + // On rattache la balise figure à gallery portfolioGallery.appendChild(workElement); // On rattache l’image et figcaption à workElement (la balise figure) workElement.appendChild(imageElement); diff --git a/FrontEnd/assets/js/index.js b/FrontEnd/assets/js/index.js index fce8f088e..49525c64b 100644 --- a/FrontEnd/assets/js/index.js +++ b/FrontEnd/assets/js/index.js @@ -1,5 +1,5 @@ // Récupération des travaux et catégories depuis l'API -import { works , categories, displayWorks } from "./fetch.js"; +import { works , categories, displayWorks } from "./data.js"; //affichage de tous les travaux displayWorks(works); diff --git a/FrontEnd/assets/js/modal.js b/FrontEnd/assets/js/modal.js index 26c7d4b65..563cdce5b 100644 --- a/FrontEnd/assets/js/modal.js +++ b/FrontEnd/assets/js/modal.js @@ -1,5 +1,9 @@ -import { works, categories, displayWorks } from "./fetch.js"; +import { works, categories, displayWorks } from "./data.js"; +//pour affichage message erreur +let spanElement = document.createElement("span"); +spanElement.innerText = ""; +spanElement.className = ""; // création première modale galerie photo const modalProjet = document.querySelector("#modal-projet"); @@ -93,12 +97,12 @@ selectCategorieFormAddPhoto.attributes.required = "required"; // Recupérer et afficher toutes les catégories dans le select for (let categorie of categories) { - var optionForm = document.createElement("option"); - optionForm.className = "option"; - optionForm.value = categorie.id; - optionForm.innerText = categorie.name; - selectCategorieFormAddPhoto.appendChild(optionForm); - }; + var optionForm = document.createElement("option"); + optionForm.className = "option"; + optionForm.value = categorie.id; + optionForm.innerText = categorie.name; + selectCategorieFormAddPhoto.appendChild(optionForm); +}; //footer du formulaire const hrAddPhoto = document.createElement("hr"); @@ -256,29 +260,44 @@ function deleteWorks() { }; deleteWorks(works); -// affichage image avant upload +// affichage image avant upload avec verification taille et type image const imageNewWork = document.querySelector("#myfile"); var uploadedImage = ""; imageNewWork.addEventListener("change", function () { + spanElement.className = ""; + spanElement.innerText = ""; const reader = new FileReader(); - reader.addEventListener("load", () => { - displayImage.style.display = "block"; - imgContainerAddPhoto.style.display = "none"; - labelBtnContainerAddPhoto.style.display = "none"; - pContainerAddPhoto.style.display = "none"; - uploadedImage = reader.result; - document.querySelector("#display-image").style.backgroundImage = `url(${uploadedImage})`; - }); - reader.readAsDataURL(this.files[0]); + const size = document.getElementById("myfile").files[0].size; + const type = document.getElementById("myfile").files[0].type; + console.log(size) + console.log(type) + if (type !=="image/png" && type !=="image/jpeg" && type !=="image/jpg") { + spanElement.className = ""; + spanElement.innerText = ""; + hrAddPhoto.insertAdjacentElement("afterend", spanElement); + spanElement.className = "message-error-login"; + spanElement.innerText = "Veuillez sélectionner un fichier au format jpg ou png"; + } else if( size > "4000000") { + spanElement.className = ""; + spanElement.innerText = ""; + hrAddPhoto.insertAdjacentElement("afterend", spanElement); + spanElement.className = "message-error-login"; + spanElement.innerText = "Veuillez sélectionner un fichier dont la taille est de 4mo au maximun"; + } else { + reader.addEventListener("load", () => { + displayImage.style.display = "block"; + imgContainerAddPhoto.style.display = "none"; + labelBtnContainerAddPhoto.style.display = "none"; + pContainerAddPhoto.style.display = "none"; + uploadedImage = reader.result; + document.querySelector("#display-image").style.backgroundImage = `url(${uploadedImage})`; + }); + reader.readAsDataURL(this.files[0]); + }; }); //verification formulaire complet et changement couleur btn submit -//pour affichage message erreur -let spanElement = document.createElement("span"); -spanElement.innerText = ""; -spanElement.className = ""; - formAddPhoto.addEventListener("click", function () { //creation objet newWork pour validation formulaire const newWork = { From c275430fa4c10b19af9c0b6659b358252019c621 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Tue, 28 Feb 2023 15:59:16 +0100 Subject: [PATCH 17/19] linter js --- FrontEnd/assets/js/index.js | 2 +- FrontEnd/assets/js/modal.js | 31 +++++++++++++++---------------- 2 files changed, 16 insertions(+), 17 deletions(-) diff --git a/FrontEnd/assets/js/index.js b/FrontEnd/assets/js/index.js index 49525c64b..a81bdf40d 100644 --- a/FrontEnd/assets/js/index.js +++ b/FrontEnd/assets/js/index.js @@ -74,7 +74,7 @@ if (token){ logout.setAttribute("href", "./index.html"); logout.innerText = "logout"; logout.style.fontWeight ="700"; - logout.addEventListener("click", function (event) { + logout.addEventListener("click", function () { localStorage.removeItem("Token"); }); }; diff --git a/FrontEnd/assets/js/modal.js b/FrontEnd/assets/js/modal.js index 563cdce5b..b79ae8c22 100644 --- a/FrontEnd/assets/js/modal.js +++ b/FrontEnd/assets/js/modal.js @@ -102,7 +102,7 @@ for (let categorie of categories) { optionForm.value = categorie.id; optionForm.innerText = categorie.name; selectCategorieFormAddPhoto.appendChild(optionForm); -}; +} //footer du formulaire const hrAddPhoto = document.createElement("hr"); @@ -142,7 +142,7 @@ window.addEventListener("click", function (event) { if (event.target == firstModal) { firstModal.style.display = "none"; secondModal.style.display = "none"; - }; + } }); // récupère la 2eme modale @@ -152,7 +152,7 @@ var secondModal = document.getElementById("modal-projet-photo"); var btnOpenSecondModal = document.getElementById("btn-add-photo"); // récupère le bouton qui ferme la modale -var btnCloseModal = document.getElementById("second-modal-close"); +var btnCloseSecondModal = document.getElementById("second-modal-close"); // récupère le bouton qui retourne à la 1ere modale var btnReturnModal = document.getElementById("arrow-back"); @@ -181,7 +181,7 @@ btnReturnModal.addEventListener("click", function () { }); // fermeture de la modale -btnCloseModal.addEventListener("click", function () { +btnCloseSecondModal.addEventListener("click", function () { secondModal.style.display = "none"; }); @@ -190,7 +190,7 @@ window.addEventListener("click", function (event) { if (event.target == secondModal) { secondModal.style.display = "none"; firstModal.style.display = "none"; - }; + } }); // afficher tous les travaux dans la modale @@ -221,7 +221,7 @@ function displayWorksModal(works) { workElement.appendChild(buttonElement); buttonElement.appendChild(imageButtonElement); workElement.appendChild(figcaptionElement); - }; + } }; displayWorksModal(works); @@ -246,17 +246,18 @@ function deleteWorks() { for (let workElement of worksElement) { if (workElement.dataset.id === photoId) { workElement.remove(); - }; + } }; // supprime element dans works const worksIndex = works.findIndex(index); - function index (work){ - return work === photoId + // eslint-disable-next-line no-inner-declarations + function index (work){ + return work === photoId }; works.splice(worksIndex,1); - }; + } }); - }; + } }; deleteWorks(works); @@ -270,8 +271,6 @@ imageNewWork.addEventListener("change", function () { const reader = new FileReader(); const size = document.getElementById("myfile").files[0].size; const type = document.getElementById("myfile").files[0].type; - console.log(size) - console.log(type) if (type !=="image/png" && type !=="image/jpeg" && type !=="image/jpg") { spanElement.className = ""; spanElement.innerText = ""; @@ -294,7 +293,7 @@ imageNewWork.addEventListener("change", function () { document.querySelector("#display-image").style.backgroundImage = `url(${uploadedImage})`; }); reader.readAsDataURL(this.files[0]); - }; + } }); //verification formulaire complet et changement couleur btn submit @@ -320,7 +319,7 @@ formAddPhoto.addEventListener("click", function () { btnFormAddPhoto.id = "valider"; btnFormAddPhoto.type = ""; }); - }; + } }); // envoi formData sur api @@ -354,6 +353,6 @@ btnFormAddPhoto.addEventListener("click", async function (e) { secondModal.style.display = "none"; firstModal.style.display = "none"; deleteWorks(works); - }; + } }); From c4bf7add1db579235a7e01dad0f099424d744d98 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Thu, 2 Mar 2023 13:16:11 +0100 Subject: [PATCH 18/19] button add photo ok --- FrontEnd/assets/css/style.css | 5 +- FrontEnd/assets/js/data.js | 1 + FrontEnd/assets/js/index.js | 5 +- FrontEnd/assets/js/login.js | 3 +- FrontEnd/assets/js/modal.js | 164 ++++++++++++++++++++++------------ 5 files changed, 115 insertions(+), 63 deletions(-) diff --git a/FrontEnd/assets/css/style.css b/FrontEnd/assets/css/style.css index 4f869d3b2..fe5953559 100644 --- a/FrontEnd/assets/css/style.css +++ b/FrontEnd/assets/css/style.css @@ -453,6 +453,7 @@ form a { text-decoration-line: none; margin: 16px 0 16px 0; } + .modal-container button { color:#D65353; background-color: white; @@ -559,6 +560,8 @@ form a { /* affichage image upload */ #display-image { - width : 129px; + width : 35%; height: 193px; + background-position: center; + background-size: cover; } \ No newline at end of file diff --git a/FrontEnd/assets/js/data.js b/FrontEnd/assets/js/data.js index d244b3e97..c4d3bede7 100644 --- a/FrontEnd/assets/js/data.js +++ b/FrontEnd/assets/js/data.js @@ -1,3 +1,4 @@ +/* eslint-disable no-extra-semi */ const reponseWorks = await fetch("http://localhost:5678/api/works"); const works = await reponseWorks.json(); export {works}; diff --git a/FrontEnd/assets/js/index.js b/FrontEnd/assets/js/index.js index a81bdf40d..1848f990c 100644 --- a/FrontEnd/assets/js/index.js +++ b/FrontEnd/assets/js/index.js @@ -1,3 +1,4 @@ +/* eslint-disable no-extra-semi */ // Récupération des travaux et catégories depuis l'API import { works , categories, displayWorks } from "./data.js"; @@ -61,7 +62,7 @@ async function filterCategories() { filterCategories(); // affichage mode edition -const token = localStorage.getItem("Token"); +const token = sessionStorage.getItem("Token"); if (token){ const modeEdition = document.querySelectorAll(".edition-mode"); @@ -75,7 +76,7 @@ if (token){ logout.innerText = "logout"; logout.style.fontWeight ="700"; logout.addEventListener("click", function () { - localStorage.removeItem("Token"); + sessionStorage.removeItem("Token"); }); }; diff --git a/FrontEnd/assets/js/login.js b/FrontEnd/assets/js/login.js index 1b7fc0fd9..6b150c88b 100644 --- a/FrontEnd/assets/js/login.js +++ b/FrontEnd/assets/js/login.js @@ -1,3 +1,4 @@ +/* eslint-disable no-extra-semi */ const formLogin = document.querySelector("form"); let spanElement = document.createElement("span"); let inputPassword = document.querySelector("[name='password']"); @@ -31,7 +32,7 @@ formLogin.addEventListener("submit", async function (event) { // Retour en fonction du statut de la réponse if (reponseState) { - localStorage.setItem("Token", reponseToken); + sessionStorage.setItem("Token", reponseToken); window.location.replace("index.html"); } else { inputPassword.insertAdjacentElement("afterend",spanElement); diff --git a/FrontEnd/assets/js/modal.js b/FrontEnd/assets/js/modal.js index b79ae8c22..c612549ec 100644 --- a/FrontEnd/assets/js/modal.js +++ b/FrontEnd/assets/js/modal.js @@ -1,3 +1,4 @@ +/* eslint-disable no-extra-semi */ import { works, categories, displayWorks } from "./data.js"; //pour affichage message erreur @@ -26,7 +27,14 @@ btnAddPhoto.innerText = "Ajouter une photo"; const btnRemoveGallery = document.createElement("button"); btnRemoveGallery.innerText = "Supprimer la galerie"; modalProjet.append(modalContainer); -modalContainer.append(imgModalContainer, h3ModalContainer, galleryModalContainer, hrModalContainer, btnAddPhoto, btnRemoveGallery); +modalContainer.append( + imgModalContainer, + h3ModalContainer, + galleryModalContainer, + hrModalContainer, + btnAddPhoto, + btnRemoveGallery +); //creation seconde modale ajout photo const modalProjetPhoto = document.querySelector("#modal-projet-photo"); @@ -51,7 +59,7 @@ const formAddPhoto = document.createElement("form"); formAddPhoto.id = "form-add-photo"; formAddPhoto.name = "formAddPhoto"; formAddPhoto.method = "post"; -formAddPhoto.enctype ="multipart/form-data"; +formAddPhoto.enctype = "multipart/form-data"; //container image avant upload const containerAddPhoto = document.createElement("div"); containerAddPhoto.className = "container-add-photo"; @@ -111,12 +119,29 @@ btnFormAddPhoto.id = "valider"; btnFormAddPhoto.value = "valider"; modalProjetPhoto.append(secondModalContainer); -secondModalContainer.append(imgArrowBack, imgSecondModalClose, h3SecondModalContainer, formAddPhoto); -formAddPhoto.append(containerAddPhoto, labelFormAddPhoto, titlePhoto, labelCategorieFormAddPhoto, selectCategorieFormAddPhoto, hrAddPhoto, btnFormAddPhoto); -containerAddPhoto.append(imgContainerAddPhoto, labelBtnContainerAddPhoto, pContainerAddPhoto, displayImage); +secondModalContainer.append( + imgArrowBack, + imgSecondModalClose, + h3SecondModalContainer, + formAddPhoto +); +formAddPhoto.append( + containerAddPhoto, + labelFormAddPhoto, + titlePhoto, + labelCategorieFormAddPhoto, + selectCategorieFormAddPhoto, + hrAddPhoto, + btnFormAddPhoto +); +containerAddPhoto.append( + imgContainerAddPhoto, + labelBtnContainerAddPhoto, + pContainerAddPhoto, + displayImage +); labelBtnContainerAddPhoto.append(btnContainerAddPhoto); - //fonctionnement modale // récupère la 1ere modale var firstModal = document.getElementById("modal-projet"); @@ -188,12 +213,12 @@ btnCloseSecondModal.addEventListener("click", function () { // fermeture de la modale si clic en dehors de la modale window.addEventListener("click", function (event) { if (event.target == secondModal) { - secondModal.style.display = "none"; - firstModal.style.display = "none"; + secondModal.style.display = "none"; + firstModal.style.display = "none"; } }); -// afficher tous les travaux dans la modale +// afficher tous les travaux dans la modale function displayWorksModal(works) { for (let work of works) { // Récupération de l'élément du DOM qui accueillera les travaux @@ -222,7 +247,7 @@ function displayWorksModal(works) { buttonElement.appendChild(imageButtonElement); workElement.appendChild(figcaptionElement); } -}; +} displayWorksModal(works); // effacer image de la galerie suite à click sur icone @@ -232,14 +257,17 @@ function deleteWorks() { button.addEventListener("click", async function (event) { event.preventDefault(); const photoId = String(event.target.dataset.id); - const token = localStorage.getItem("Token"); + const token = sessionStorage.getItem("Token"); // supprime information sur l'API works - const responseWorksDelete = await fetch("http://localhost:5678/api/works/" + photoId, { - method: "DELETE", - headers: { Authorization: `Bearer ${token}` }, - body: JSON.stringify(), - }); - + const responseWorksDelete = await fetch( + "http://localhost:5678/api/works/" + photoId, + { + method: "DELETE", + headers: { Authorization: `Bearer ${token}` }, + body: JSON.stringify(), + } + ); + if (responseWorksDelete.ok) { // supprime élément dans le DOM const worksElement = document.querySelectorAll("figure"); @@ -247,18 +275,18 @@ function deleteWorks() { if (workElement.dataset.id === photoId) { workElement.remove(); } - }; + } // supprime element dans works const worksIndex = works.findIndex(index); // eslint-disable-next-line no-inner-declarations - function index (work){ - return work === photoId - }; - works.splice(worksIndex,1); - } + function index(work) { + return work === photoId; + } + works.splice(worksIndex, 1); + } }); } -}; +} deleteWorks(works); // affichage image avant upload avec verification taille et type image @@ -271,88 +299,106 @@ imageNewWork.addEventListener("change", function () { const reader = new FileReader(); const size = document.getElementById("myfile").files[0].size; const type = document.getElementById("myfile").files[0].type; - if (type !=="image/png" && type !=="image/jpeg" && type !=="image/jpg") { + if (type !== "image/png" && type !== "image/jpeg" && type !== "image/jpg") { spanElement.className = ""; spanElement.innerText = ""; hrAddPhoto.insertAdjacentElement("afterend", spanElement); spanElement.className = "message-error-login"; - spanElement.innerText = "Veuillez sélectionner un fichier au format jpg ou png"; - } else if( size > "4000000") { + spanElement.innerText = + "Veuillez sélectionner un fichier au format jpg ou png"; + } else if (size > "4000000") { spanElement.className = ""; spanElement.innerText = ""; hrAddPhoto.insertAdjacentElement("afterend", spanElement); spanElement.className = "message-error-login"; - spanElement.innerText = "Veuillez sélectionner un fichier dont la taille est de 4mo au maximun"; - } else { + spanElement.innerText = + "Veuillez sélectionner un fichier dont la taille est de 4mo au maximun"; + } else { reader.addEventListener("load", () => { displayImage.style.display = "block"; imgContainerAddPhoto.style.display = "none"; labelBtnContainerAddPhoto.style.display = "none"; pContainerAddPhoto.style.display = "none"; uploadedImage = reader.result; - document.querySelector("#display-image").style.backgroundImage = `url(${uploadedImage})`; + document.querySelector( + "#display-image" + ).style.backgroundImage = `url(${uploadedImage})`; }); reader.readAsDataURL(this.files[0]); } }); -//verification formulaire complet et changement couleur btn submit -formAddPhoto.addEventListener("click", function () { + + +//changement couleur bouton ajout +formAddPhoto.addEventListener("change" && "input", function () { //creation objet newWork pour validation formulaire - const newWork = { - imageUrl: document.querySelector("input[type=file]").value, - title: document.querySelector("[name ='title']").value, - categoryId: document.querySelector("select[name='category']").value, - }; - +const newWork = { + imageUrl: document.querySelector("input[type=file]").value, + title: document.querySelector("[name ='title']").value, + categoryId: document.querySelector("select[name='category']").value, +}; if (newWork.imageUrl && newWork.title && newWork.categoryId) { spanElement.innerText = ""; spanElement.className = ""; // envoi possible du formulaire btnFormAddPhoto.id = "valider-submit"; btnFormAddPhoto.type = "submit"; - }else { - btnFormAddPhoto.addEventListener("click", function() { + }; +}); + +//validation formulaire complet +btnFormAddPhoto.addEventListener("click", function () { + //creation objet newWork pour validation formulaire + const newWork = { + imageUrl: document.querySelector("input[type=file]").value, + title: document.querySelector("[name ='title']").value, + categoryId: document.querySelector("select[name='category']").value, + }; + if (!newWork.imageUrl || !newWork.title || !newWork.categoryId) { hrAddPhoto.insertAdjacentElement("afterend", spanElement); spanElement.className = "message-error-login"; spanElement.innerText = "Veuillez compléter l'ensemble des champs à saisir"; btnFormAddPhoto.id = "valider"; - btnFormAddPhoto.type = ""; - }); - } + btnFormAddPhoto.type = ""; + }; }); -// envoi formData sur api +//envoi formData sur api btnFormAddPhoto.addEventListener("click", async function (e) { e.preventDefault(); - - // creation formData + // creation formData const formData = new FormData(); - formData.append("image", document.querySelector("input[type=file]").files[0]); + formData.append( + "image", + document.querySelector("input[type=file]").files[0] + ); formData.append("title", document.querySelector("[name ='title']").value); - formData.append("category", document.querySelector("select[name='category']").value); + formData.append( + "category", + document.querySelector("select[name='category']").value + ); + + const token = sessionStorage.getItem("Token"); - const token = localStorage.getItem("Token"); - const responseFormData = await fetch("http://localhost:5678/api/works", { method: "POST", - headers: {"Authorization" : `Bearer ${token}`}, - body: formData + headers: { Authorization: `Bearer ${token}` }, + body: formData, }); - // affiche élément dans le DOM + // affiche élément dans le DOM if (responseFormData.ok) { works.push(await responseFormData.json()); const galleryModalContainer = document.querySelector(".gallery-modal"); - galleryModalContainer.innerHTML= ""; + galleryModalContainer.innerHTML = ""; displayWorksModal(works); const portfolioGallery = document.querySelector(".gallery"); - portfolioGallery.innerHTML= ""; - displayWorks(works); - //fermeture 2 modales + portfolioGallery.innerHTML = ""; + displayWorks(works); + //fermeture 2 modales secondModal.style.display = "none"; firstModal.style.display = "none"; deleteWorks(works); } -}); - +}); From 43bf480cd971ff2cb2b9b3d6b0f9b1e2c937fd06 Mon Sep 17 00:00:00 2001 From: studentsjj Date: Fri, 3 Mar 2023 16:22:17 +0100 Subject: [PATCH 19/19] gallery modal adjust photo --- FrontEnd/assets/css/style.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/FrontEnd/assets/css/style.css b/FrontEnd/assets/css/style.css index fe5953559..5fef8a223 100644 --- a/FrontEnd/assets/css/style.css +++ b/FrontEnd/assets/css/style.css @@ -409,7 +409,7 @@ form a { display: grid; grid-template-columns: 1fr 1fr 1fr 1fr 1fr; grid-column-gap: 10px; - grid-row-gap: 10px; + grid-row-gap: 20px; margin: auto; padding: 40px 0 20px 0; } @@ -427,8 +427,9 @@ form a { padding: 5px; } -.gallery-modal figure img { +.gallery-modal figure>img { width: 100%; + height: 140px; } .gallery-modal figcaption {