From 6a830341425c3f75ad8b92cf3703c6a5a56d3de8 Mon Sep 17 00:00:00 2001 From: Sean Wright <89875863+Swright88@users.noreply.github.com> Date: Mon, 12 Jun 2023 15:27:57 +0100 Subject: [PATCH 01/70] Adding test docs folder and docs --- Test Documents/Acebook-Test-Plan.md | 83 ++ package-lock.json | 1095 ++++----------------------- package.json | 2 +- 3 files changed, 226 insertions(+), 954 deletions(-) create mode 100644 Test Documents/Acebook-Test-Plan.md diff --git a/Test Documents/Acebook-Test-Plan.md b/Test Documents/Acebook-Test-Plan.md new file mode 100644 index 000000000..4e0e73e30 --- /dev/null +++ b/Test Documents/Acebook-Test-Plan.md @@ -0,0 +1,83 @@ +# Acebook Test Plan + +## Objective + +This test plan intends to outline the testing that will be performed on the Acebook code that is being developed by our team. +It will aim to highlight potential bugs in the software and provide information on their severity and priority prior to deployment. + +The Acebook website is a piece of software that aims to allow a user to: + - Sign up + - Log in + - Edit and update their profile + - Create and publish a post + - View a list of users that they can send a friend request to + - Approve and deny friend requests + - View a list of their friends + - View feed + - Comment and like posts from other users + - Log out + + +## Scope of testing + +We are going to test all of the main pieces of functionality from a users perspective. We will also include some validation checking for areas such as email addresses and user passwords. In addition we will be testing the database functionaility for items such as unique user ID's and the integration between each database. + +## Test environment + +These test sessions will be conducted in VSCode as well as multiple modern browsers starting with Chrome and moving to Firefox. + +## Test Team + +The test team consists of 4 testers. + +- Sean Wright +- James Turnbull +- Chris Hall +- Patrick Hagan + +## Features to be tested + +- User sign up and field validity checks +- Login +- Log out +- Page navigation (once logged in) +- Duplicate user accounts (blocked) +- Users can create a post (can consist of text and/or pictures) +- Editing profile +- Check that a user can add a profile picture +- Check name and picture appears beside their own posts +- Sending friend requests +- Approving/denying a friend request +- View list of friends +- View list of users they may know +- Be able to comment on a post in their feed +- Be able to like a post in their feed and view the number of likes for that post + +## Assumptions + +During these tests certain assumptions will be made to make testing more effective and efficient. These assumptions are as follows: + +- Only users logged in will be able to make a post +- The language will be English +- + +## Defect management + +When a defect is found it will be noted and a bug report will be created containing the details of the issue as well as the steps to reproduce. These will then be placed onto the teams Trello board in the 'Reviewed - Needs action' list. From here it will be picked up by the development team and then resubmitted for review by the test team. Once the tests have been conducted and the team is happy the task will be placed into the 'Done' list. + +## Risks + +| Risk | Mitigation | +| ---- | ---------- | +| Friction within the team. | Talk through issues/use coaches where needed. | +| Recent intermittent internet access in testers home. | Use of hot spot if necessary. | +| Time limit not allowing for all features to be tested. | Limit straying or chasing rabit holes. | +| Lack of knowledge of language and codebase for testers. | Use coaches/devs and the internet to upskill | + +## Exit criteria + +The project will be deemed completed once all of the tasks on the Trello board are placed into done or when the time limit has been reached (02/06/2023). + + + + diff --git a/package-lock.json b/package-lock.json index 27002c86c..cb33785d5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "mongodb": "^3.4.1", "mongoose": "^5.8.11", "morgan": "~1.9.1", - "nodemon": "^2.0.15" + "nodemon": "^2.0.22" }, "devDependencies": { "cypress": "^9.5.1", @@ -1141,14 +1141,6 @@ "@jridgewell/sourcemap-codec": "^1.4.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==", - "engines": { - "node": ">=6" - } - }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -1167,17 +1159,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@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==", - "dependencies": { - "defer-to-connect": "^1.0.1" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/@tootallnate/once": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", @@ -1538,14 +1519,6 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "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==", - "dependencies": { - "string-width": "^4.1.0" - } - }, "node_modules/ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -1586,6 +1559,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, "engines": { "node": ">=8" } @@ -1594,6 +1568,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "dependencies": { "color-convert": "^2.0.1" }, @@ -1909,38 +1884,6 @@ "node": ">=0.6" } }, - "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==", - "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/boxen/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "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", @@ -2060,31 +2003,6 @@ "node": ">= 0.8" } }, - "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==", - "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" - } - }, - "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==", - "engines": { - "node": ">=8" - } - }, "node_modules/cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -2138,6 +2056,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -2153,6 +2072,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, "dependencies": { "has-flag": "^4.0.0" }, @@ -2236,17 +2156,6 @@ "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==", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -2301,14 +2210,6 @@ "wrap-ansi": "^7.0.0" } }, - "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=", - "dependencies": { - "mimic-response": "^1.0.0" - } - }, "node_modules/co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -2329,6 +2230,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "dependencies": { "color-name": "~1.1.4" }, @@ -2339,7 +2241,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "node_modules/colorette": { "version": "2.0.16", @@ -2382,22 +2285,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "node_modules/configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "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/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -2473,14 +2360,6 @@ "node": ">= 8" } }, - "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==", - "engines": { - "node": ">=8" - } - }, "node_modules/cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", @@ -2631,31 +2510,12 @@ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, - "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=", - "dependencies": { - "mimic-response": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, - "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==", - "engines": { - "node": ">=4.0.0" - } - }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -2671,11 +2531,6 @@ "node": ">=0.10.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==" - }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -2757,22 +2612,6 @@ "node": ">=8" } }, - "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==", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -2809,7 +2648,8 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "node_modules/encodeurl": { "version": "1.0.2", @@ -2823,6 +2663,7 @@ "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, "dependencies": { "once": "^1.4.0" } @@ -2857,14 +2698,6 @@ "node": ">=6" } }, - "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==", - "engines": { - "node": ">=8" - } - }, "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -3742,6 +3575,7 @@ "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" }, @@ -3806,6 +3640,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.0.tgz", "integrity": "sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==", + "dev": true, "dependencies": { "ini": "2.0.0" }, @@ -3831,42 +3666,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "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" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/got/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==", - "dependencies": { - "pump": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, "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==" + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true }, "node_modules/handlebars": { "version": "4.7.7", @@ -3904,14 +3708,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "engines": { - "node": ">=8" - } - }, - "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" } @@ -3947,11 +3744,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "node_modules/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==" - }, "node_modules/http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -4123,14 +3915,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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=", - "engines": { - "node": ">=4" - } - }, "node_modules/import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -4154,6 +3938,7 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true, "engines": { "node": ">=0.8.19" } @@ -4186,6 +3971,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true, "engines": { "node": ">=10" } @@ -4251,6 +4037,7 @@ "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==", + "dev": true, "engines": { "node": ">=8" } @@ -4279,6 +4066,7 @@ "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" @@ -4290,17 +4078,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==", - "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", @@ -4309,18 +4086,11 @@ "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==", - "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, "engines": { "node": ">=8" } @@ -4346,7 +4116,8 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "node_modules/is-unicode-supported": { "version": "0.1.0", @@ -4360,11 +4131,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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==" - }, "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -5297,11 +5063,6 @@ "node": ">=4" } }, - "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=" - }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -5376,14 +5137,6 @@ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" }, - "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==", - "dependencies": { - "json-buffer": "3.0.0" - } - }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -5393,17 +5146,6 @@ "node": ">=6" } }, - "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==", - "dependencies": { - "package-json": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/lazy-ass": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", @@ -5569,18 +5311,11 @@ "node": ">=8" } }, - "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==", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -5592,6 +5327,7 @@ "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==", + "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -5606,6 +5342,7 @@ "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" } @@ -5723,14 +5460,6 @@ "node": ">=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==", - "engines": { - "node": ">=4" - } - }, "node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -5927,21 +5656,20 @@ "dev": true }, "node_modules/nodemon": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.16.tgz", - "integrity": "sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==", - "hasInstallScript": true, + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "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" @@ -6016,14 +5744,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==", - "engines": { - "node": ">=8" - } - }, "node_modules/npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -6065,6 +5785,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -6118,14 +5839,6 @@ "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=", "dev": true }, - "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==", - "engines": { - "node": ">=6" - } - }, "node_modules/p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -6177,28 +5890,6 @@ "node": ">=6" } }, - "node_modules/package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "dependencies": { - "got": "^9.6.0", - "registry-auth-token": "^4.0.0", - "registry-url": "^5.0.0", - "semver": "^6.2.0" - }, - "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==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6349,14 +6040,6 @@ "node": ">= 0.8.0" } }, - "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=", - "engines": { - "node": ">=4" - } - }, "node_modules/pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -6446,6 +6129,7 @@ "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" @@ -6460,17 +6144,6 @@ "node": ">=6" } }, - "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==", - "dependencies": { - "escape-goat": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", @@ -6510,33 +6183,6 @@ "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==", - "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==" - }, - "node_modules/rc/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=", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -6590,28 +6236,6 @@ "url": "https://github.com/sponsors/mysticatea" } }, - "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==", - "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==", - "dependencies": { - "rc": "^1.2.8" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -6694,14 +6318,6 @@ "node": ">=10" } }, - "node_modules/responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "dependencies": { - "lowercase-keys": "^1.0.0" - } - }, "node_modules/restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -6797,6 +6413,7 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -6807,25 +6424,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==", - "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==", - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -6897,7 +6495,27 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "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==", + "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==", + "bin": { + "semver": "bin/semver.js" + } }, "node_modules/sisteransi": { "version": "1.0.5", @@ -7050,6 +6668,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7063,6 +6682,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7239,14 +6859,6 @@ "node": ">=4" } }, - "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==", - "engines": { - "node": ">=6" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -7343,6 +6955,7 @@ "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" }, @@ -7366,6 +6979,7 @@ "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" } @@ -7398,17 +7012,6 @@ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" }, - "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==", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -7426,56 +7029,13 @@ "node": ">= 0.8" } }, - "node_modules/untildify": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", - "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", - "dev": true, - "engines": { - "node": ">=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==", - "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/update-notifier/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==" - }, - "node_modules/update-notifier/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==", - "dependencies": { - "ci-info": "^2.0.0" - }, - "bin": { - "is-ci": "bin.js" + "node_modules/untildify": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/untildify/-/untildify-4.0.0.tgz", + "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", + "dev": true, + "engines": { + "node": ">=8" } }, "node_modules/uri-js": { @@ -7487,17 +7047,6 @@ "punycode": "^2.1.0" } }, - "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=", - "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", @@ -7680,17 +7229,6 @@ "node": ">= 8" } }, - "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==", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -7709,6 +7247,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -7724,12 +7263,14 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "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", @@ -7758,14 +7299,6 @@ } } }, - "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==", - "engines": { - "node": ">=8" - } - }, "node_modules/xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -7790,7 +7323,8 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "node_modules/yargs": { "version": "16.2.0", @@ -8696,11 +8230,6 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "@sindresorhus/is": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", - "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==" - }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -8719,14 +8248,6 @@ "@sinonjs/commons": "^1.7.0" } }, - "@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==", - "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", @@ -9036,14 +8557,6 @@ "uri-js": "^4.2.2" } }, - "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==", - "requires": { - "string-width": "^4.1.0" - } - }, "ansi-colors": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", @@ -9070,12 +8583,14 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true }, "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" } @@ -9313,28 +8828,6 @@ } } }, - "boxen": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz", - "integrity": "sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ==", - "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" - }, - "dependencies": { - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==" - } - } - }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -9412,27 +8905,6 @@ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" }, - "cacheable-request": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", - "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", - "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": { - "lowercase-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", - "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" - } - } - }, "cachedir": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/cachedir/-/cachedir-2.3.0.tgz", @@ -9467,6 +8939,7 @@ "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" @@ -9476,6 +8949,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, "requires": { "has-flag": "^4.0.0" } @@ -9537,11 +9011,6 @@ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": 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==" - }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -9582,14 +9051,6 @@ "wrap-ansi": "^7.0.0" } }, - "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", - "requires": { - "mimic-response": "^1.0.0" - } - }, "co": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", @@ -9606,6 +9067,7 @@ "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" } @@ -9613,7 +9075,8 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "colorette": { "version": "2.0.16", @@ -9647,19 +9110,6 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, - "configstore": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", - "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", - "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" - } - }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -9722,11 +9172,6 @@ "which": "^2.0.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==" - }, "cssom": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.4.4.tgz", @@ -9857,25 +9302,12 @@ "integrity": "sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ==", "dev": true }, - "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", - "requires": { - "mimic-response": "^1.0.0" - } - }, "dedent": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=", "dev": true }, - "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==" - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -9888,11 +9320,6 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "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==" - }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -9952,19 +9379,6 @@ } } }, - "dot-prop": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", - "requires": { - "is-obj": "^2.0.0" - } - }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -9995,7 +9409,8 @@ "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true }, "encodeurl": { "version": "1.0.2", @@ -10006,6 +9421,7 @@ "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" } @@ -10034,11 +9450,6 @@ "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", "dev": 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==" - }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -10706,6 +10117,7 @@ "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" } @@ -10755,6 +10167,7 @@ "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" } @@ -10768,38 +10181,11 @@ "type-fest": "^0.20.2" } }, - "got": { - "version": "9.6.0", - "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", - "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", - "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" - }, - "dependencies": { - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^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==" + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "dev": true }, "handlebars": { "version": "4.7.7", @@ -10825,12 +10211,8 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" - }, - "has-yarn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", - "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true }, "hbs": { "version": "4.2.0", @@ -10856,11 +10238,6 @@ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", "dev": true }, - "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==" - }, "http-errors": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", @@ -10979,11 +10356,6 @@ "resolve-from": "^4.0.0" } }, - "import-lazy": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", - "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=" - }, "import-local": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", @@ -10997,7 +10369,8 @@ "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=" + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true }, "indent-string": { "version": "4.0.0", @@ -11023,7 +10396,8 @@ "ini": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==" + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "dev": true }, "ipaddr.js": { "version": "1.9.1", @@ -11070,7 +10444,8 @@ "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==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true }, "is-generator-fn": { "version": "2.1.0", @@ -11090,30 +10465,22 @@ "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-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==" - }, "is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==" - }, "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==" + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true }, "is-potential-custom-element-name": { "version": "1.0.1", @@ -11130,7 +10497,8 @@ "is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=" + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true }, "is-unicode-supported": { "version": "0.1.0", @@ -11138,11 +10506,6 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "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==" - }, "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", @@ -11869,11 +11232,6 @@ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", "dev": true }, - "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" - }, "json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", @@ -11937,28 +11295,12 @@ "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.2.tgz", "integrity": "sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ==" }, - "keyv": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", - "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", - "requires": { - "json-buffer": "3.0.0" - } - }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", "dev": true }, - "latest-version": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", - "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", - "requires": { - "package-json": "^6.3.0" - } - }, "lazy-ass": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/lazy-ass/-/lazy-ass-1.6.0.tgz", @@ -12082,15 +11424,11 @@ } } }, - "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" - }, "lru-cache": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, "requires": { "yallist": "^4.0.0" } @@ -12099,6 +11437,7 @@ "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==", + "dev": true, "requires": { "semver": "^6.0.0" }, @@ -12106,7 +11445,8 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true } } }, @@ -12201,11 +11541,6 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, - "mimic-response": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", - "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" - }, "minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -12354,20 +11689,20 @@ "dev": true }, "nodemon": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.16.tgz", - "integrity": "sha512-zsrcaOfTWRuUzBn3P44RDliLlp263Z/76FPoHFr3cFFkOz0lTPAcIw8dCzfdVIx/t3AtDYCZRCDkoCojJqaG3w==", + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", "requires": { "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" }, "dependencies": { "debug": { @@ -12416,11 +11751,6 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" }, - "normalize-url": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.1.tgz", - "integrity": "sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA==" - }, "npm-run-path": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", @@ -12453,6 +11783,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -12494,11 +11825,6 @@ "integrity": "sha1-EnZjl3Sj+O8lcvf+QoDg6kVQwHs=", "dev": true }, - "p-cancelable": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", - "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==" - }, "p-limit": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", @@ -12532,24 +11858,6 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, - "package-json": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", - "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", - "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==" - } - } - }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -12661,11 +11969,6 @@ "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "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=" - }, "pretty-bytes": { "version": "5.6.0", "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", @@ -12736,6 +12039,7 @@ "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" @@ -12747,14 +12051,6 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, - "pupa": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", - "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", - "requires": { - "escape-goat": "^2.0.0" - } - }, "qs": { "version": "6.5.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", @@ -12782,29 +12078,6 @@ "unpipe": "1.0.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "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==" - }, - "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=" - } - } - }, "react-is": { "version": "17.0.2", "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", @@ -12851,22 +12124,6 @@ "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", "dev": true }, - "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==", - "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==", - "requires": { - "rc": "^1.2.8" - } - }, "request-progress": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/request-progress/-/request-progress-3.0.0.tgz", @@ -12927,14 +12184,6 @@ "integrity": "sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ==", "dev": true }, - "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", - "requires": { - "lowercase-keys": "^1.0.0" - } - }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", @@ -13001,25 +12250,11 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, "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==", - "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==" - } - } - }, "send": { "version": "0.16.2", "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", @@ -13079,7 +12314,23 @@ "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==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "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==", + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==" + } + } }, "sisteransi": { "version": "1.0.5", @@ -13207,6 +12458,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -13217,6 +12469,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -13347,11 +12600,6 @@ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", "dev": true }, - "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==" - }, "to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -13426,7 +12674,8 @@ "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==" + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true }, "type-is": { "version": "1.6.18", @@ -13441,6 +12690,7 @@ "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" } @@ -13464,14 +12714,6 @@ "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==" }, - "unique-string": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", - "requires": { - "crypto-random-string": "^2.0.0" - } - }, "universalify": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", @@ -13489,42 +12731,6 @@ "integrity": "sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==", "dev": true }, - "update-notifier": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.1.0.tgz", - "integrity": "sha512-ItnICHbeMh9GqUy31hFPrD1kcuZ3rpxDZbf4KUDavXwS0bW5m7SLbDQpGX3UYr072cbrF5hFUs3r5tUsPwjfHw==", - "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" - }, - "dependencies": { - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==" - }, - "is-ci": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", - "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", - "requires": { - "ci-info": "^2.0.0" - } - } - } - }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -13534,14 +12740,6 @@ "punycode": "^2.1.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=", - "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", @@ -13694,14 +12892,6 @@ "isexe": "^2.0.0" } }, - "widest-line": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", - "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", - "requires": { - "string-width": "^4.0.0" - } - }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -13717,6 +12907,7 @@ "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", @@ -13726,12 +12917,14 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "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", @@ -13746,11 +12939,6 @@ "dev": true, "requires": {} }, - "xdg-basedir": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", - "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==" - }, "xml-name-validator": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", @@ -13772,7 +12960,8 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true }, "yargs": { "version": "16.2.0", diff --git a/package.json b/package.json index b0b63690e..5ac5a33bc 100644 --- a/package.json +++ b/package.json @@ -26,7 +26,7 @@ "mongodb": "^3.4.1", "mongoose": "^5.8.11", "morgan": "~1.9.1", - "nodemon": "^2.0.15" + "nodemon": "^2.0.22" }, "devDependencies": { "cypress": "^9.5.1", From 695b1a713a7b0afdd8bd9f8c14bf42d4c6971b59 Mon Sep 17 00:00:00 2001 From: Sean Wright <89875863+Swright88@users.noreply.github.com> Date: Tue, 13 Jun 2023 09:46:19 +0100 Subject: [PATCH 02/70] Reversed posts --- controllers/posts.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/controllers/posts.js b/controllers/posts.js index 4b521304d..3241eb9bb 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -6,8 +6,11 @@ const PostsController = { if (err) { throw err; } - - res.render("posts/index", { posts: posts }); + + // Reverse the order of posts array + const reversedPosts = posts.reverse(); + + res.render("posts/index", { posts: reversedPosts }); }); }, New: (req, res) => { From 3cb3a409c6a98dfc346a47b41bd8a83ee91dbcd6 Mon Sep 17 00:00:00 2001 From: "kate.dollete" Date: Tue, 13 Jun 2023 12:21:42 +0100 Subject: [PATCH 03/70] Install dotenv --- package-lock.json | 17 +++++++++++++++++ package.json | 1 + 2 files changed, 18 insertions(+) diff --git a/package-lock.json b/package-lock.json index cb33785d5..357dbfe45 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,6 +11,7 @@ "dependencies": { "cookie-parser": "~1.4.4", "debug": "~2.6.9", + "dotenv": "^16.1.4", "express": "~4.16.1", "express-session": "^1.17.2", "hbs": "^4.1.0", @@ -2612,6 +2613,17 @@ "node": ">=8" } }, + "node_modules/dotenv": { + "version": "16.1.4", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz", + "integrity": "sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/motdotla/dotenv?sponsor=1" + } + }, "node_modules/ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", @@ -9379,6 +9391,11 @@ } } }, + "dotenv": { + "version": "16.1.4", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.1.4.tgz", + "integrity": "sha512-m55RtE8AsPeJBpOIFKihEmqUcoVncQIwo7x9U8ZwLEZw9ZpXboz2c+rvog+jUaJvVrZ5kBOeYQBX5+8Aa/OZQw==" + }, "ecc-jsbn": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", diff --git a/package.json b/package.json index 5ac5a33bc..b0814de37 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,7 @@ "dependencies": { "cookie-parser": "~1.4.4", "debug": "~2.6.9", + "dotenv": "^16.1.4", "express": "~4.16.1", "express-session": "^1.17.2", "hbs": "^4.1.0", From cdc17ede8761ef00d6c01926d87a4a9e04bc1c88 Mon Sep 17 00:00:00 2001 From: "kate.dollete" Date: Tue, 13 Jun 2023 12:23:42 +0100 Subject: [PATCH 04/70] Set up production environment --- bin/www | 90 +++++++++++++++++++++++++++++---------------------------- 1 file changed, 46 insertions(+), 44 deletions(-) diff --git a/bin/www b/bin/www index 663edde49..feb33a12f 100755 --- a/bin/www +++ b/bin/www @@ -1,39 +1,41 @@ -#!/usr/bin/env node +// #!/usr/bin/env node /** * Module dependencies. */ -var app = require("../app"); -var debug = require("debug")("acebook:server"); -var http = require("http"); -var mongoose = require("mongoose"); +let app = require("../app"); +let debug = require("debug")("acebook:server"); +let http = require("http"); +let mongoose = require("mongoose"); /** * Get port from environment and store in Express. */ -var port = normalizePort(process.env.PORT || "3000"); +let port = normalizePort(process.env.PORT || "3000"); app.set("port", port); /** * Connect to MongoDB **/ -var mongoDbUrl = process.env.MONGODB_URL || "mongodb://0.0.0.0/acebook"; +require("dotenv").config(); + +let mongoDbUrl = process.env.MONGODB_URL || "mongodb://0.0.0.0/acebook"; mongoose.connect(mongoDbUrl, { - useNewUrlParser: true, - useUnifiedTopology: true, + useNewUrlParser: true, + useUnifiedTopology: true, }); -var db = mongoose.connection; +let db = mongoose.connection; db.on("error", console.error.bind(console, "MongoDB connection error:")); /** * Create HTTP server. */ -var server = http.createServer(app); +let server = http.createServer(app); /** * Listen on provided port, on all network interfaces. @@ -48,19 +50,19 @@ server.on("listening", onListening); */ function normalizePort(val) { - var port = parseInt(val, 10); + let port = parseInt(val, 10); - if (isNaN(port)) { - // named pipe - return val; - } + if (isNaN(port)) { + // named pipe + return val; + } - if (port >= 0) { - // port number - return port; - } + if (port >= 0) { + // port number + return port; + } - return false; + return false; } /** @@ -68,25 +70,25 @@ function normalizePort(val) { */ function onError(error) { - if (error.syscall !== "listen") { - throw error; - } - - var bind = typeof port === "string" ? "Pipe " + port : "Port " + port; - - // handle specific listen errors with friendly messages - switch (error.code) { - case "EACCES": - console.error(bind + " requires elevated privileges"); - process.exit(1); - break; - case "EADDRINUSE": - console.error(bind + " is already in use"); - process.exit(1); - break; - default: - throw error; - } + if (error.syscall !== "listen") { + throw error; + } + + let bind = typeof port === "string" ? "Pipe " + port : "Port " + port; + + // handle specific listen errors with friendly messages + switch (error.code) { + case "EACCES": + console.error(bind + " requires elevated privileges"); + process.exit(1); + break; + case "EADDRINUSE": + console.error(bind + " is already in use"); + process.exit(1); + break; + default: + throw error; + } } /** @@ -94,8 +96,8 @@ function onError(error) { */ function onListening() { - var addr = server.address(); - var bind = typeof addr === "string" ? "pipe " + addr : "port " + addr.port; - console.log("Now listening on " + bind); - debug("Listening on " + bind); + let addr = server.address(); + let bind = typeof addr === "string" ? "pipe " + addr : "port " + addr.port; + console.log("Now listening on " + bind); + debug("Listening on " + bind); } From 57982b69b3cad6ac0675e87542bc458dda384910 Mon Sep 17 00:00:00 2001 From: "kate.dollete" Date: Tue, 13 Jun 2023 12:24:15 +0100 Subject: [PATCH 05/70] Add first and last names --- models/user.js | 6 ++++-- views/users/new.hbs | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/models/user.js b/models/user.js index 27406b498..a96f1b410 100644 --- a/models/user.js +++ b/models/user.js @@ -1,8 +1,10 @@ const mongoose = require("mongoose"); const UserSchema = new mongoose.Schema({ - email: String, - password: String, + firstName: String, + lastName: String, + email: String, + password: String, }); const User = mongoose.model("User", UserSchema); diff --git a/views/users/new.hbs b/views/users/new.hbs index 13e3b4fc1..d4d9897b6 100644 --- a/views/users/new.hbs +++ b/views/users/new.hbs @@ -1,4 +1,8 @@
+ + + + From cbc2ab10909e5cea0d56b77a2531a319dd6b4b61 Mon Sep 17 00:00:00 2001 From: Chrise Date: Tue, 13 Jun 2023 15:38:42 +0100 Subject: [PATCH 06/70] changes --- cypress/fixtures/example.json | 5 ++ cypress/integration/user_can_log_in_spec.js | 0 spec/models/post.spec.js | 28 +++++++++- test_cases.md | 59 +++++++++++++++++++++ 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 cypress/fixtures/example.json create mode 100644 cypress/integration/user_can_log_in_spec.js create mode 100644 test_cases.md diff --git a/cypress/fixtures/example.json b/cypress/fixtures/example.json new file mode 100644 index 000000000..02e425437 --- /dev/null +++ b/cypress/fixtures/example.json @@ -0,0 +1,5 @@ +{ + "name": "Using fixtures to represent data", + "email": "hello@cypress.io", + "body": "Fixtures are a great way to mock data for responses to routes" +} diff --git a/cypress/integration/user_can_log_in_spec.js b/cypress/integration/user_can_log_in_spec.js new file mode 100644 index 000000000..e69de29bb diff --git a/spec/models/post.spec.js b/spec/models/post.spec.js index 3acfd48ce..e400f5441 100644 --- a/spec/models/post.spec.js +++ b/spec/models/post.spec.js @@ -37,4 +37,30 @@ describe("Post model", () => { }); }); }); -}); + + it("shows post chronologically", (done) => { + var post = new Post({ message: "hi"}); + var post1 = new Post({ message: "hello"}); + + post.save((err) => { + expect(err).toBeNull(); + + Post.find((err, posts) => { + expect(err).toBeNull(); + + expect(posts[0]).toMatchObject({ message: "hi" }); + done(); + }); + }); + + post1.save((err) => { + expect(err).toBeNull(); + + Post.find((posts) => { + + expect(posts[0]).toMatchObject({ message: "hello" }); + done(); + }); + }); + }) +}); \ No newline at end of file diff --git a/test_cases.md b/test_cases.md new file mode 100644 index 000000000..4ae3675df --- /dev/null +++ b/test_cases.md @@ -0,0 +1,59 @@ +## PAGES: +1 - Homepage/login +2 - Sign up +3 - Feed +4 - Profile +5 - Users + + +## TEST CASES: + +*** 1 *** + +Homepage: +- Title is visible and reads 'Acebook' +- Check login fields on page +- Check sign up button and redirects to sign up page + +Login: +- Error if username or password wrong +- Log in with correct details and redirected to feed page + + +*** 2 *** + +- Username (email) & password validation checks (Unit test maybe) +- After succesful sign up returned to homepage, possibly with confirmation message +- Error messages if details incorrect +- Button to return to homepage + + +*** 3 *** + +- User can submit a post +- User can like a post +- User can react/comment on a post +- Likes are shown +- Username is shown for the post +- Posts are in chronological order +- All posts are shown +- User can edit/delete a post (nice-to-have) +- Hide certain user posts (nice-to-have) + + +*** 4 *** + +- User can upload/edit profile picture +- Users friends can be seen +- User can edit/update personal details +- User can't view other users password/personal info +- Users posts are viewable +- Button to feed/logout/other profiles (possibly) are in navbar + + +*** 5 *** + +- View all users +- Add friends +- Remove friends +- Pending requests \ No newline at end of file From 05da992cb50448d22ba91f9f485d39295fc758db Mon Sep 17 00:00:00 2001 From: MMal87 Date: Tue, 13 Jun 2023 16:47:52 +0100 Subject: [PATCH 07/70] working on posts and comments --- README.md | 2 +- app.js | 4 ++ controllers/comments.js | 22 ++++++++++ controllers/posts.js | 41 +++++++++++++++++-- .../integration/user_can_submit_posts_spec.js | 9 ++++ models/comments.js | 8 ++++ models/post.js | 7 +++- models/user.js | 17 +++++++- routes/posts.js | 3 ++ views/layout.hbs | 3 -- views/posts/index.hbs | 6 ++- views/posts/new.hbs | 9 +++- views/posts/show.hbs | 14 +++++++ views/sessions/new.hbs | 3 ++ views/users/new.hbs | 4 +- 15 files changed, 139 insertions(+), 13 deletions(-) create mode 100644 controllers/comments.js create mode 100644 models/comments.js create mode 100644 views/posts/show.hbs diff --git a/README.md b/README.md index eee74593d..0b5850f83 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ It uses: ## Card wall -REPLACE THIS TEXT WITH A LINK TO YOUR CARD WALL +https://trello.com/invite/b/Fv5Elopq/ATTI7a7e4a5260b33e9bf40ad2a5da74932bF6FF7822/acebook-team-neutral ## Quickstart diff --git a/app.js b/app.js index bb2057955..53320823a 100644 --- a/app.js +++ b/app.js @@ -10,6 +10,7 @@ const homeRouter = require("./routes/home"); const postsRouter = require("./routes/posts"); const sessionsRouter = require("./routes/sessions"); const usersRouter = require("./routes/users"); +const commentsRouter = require("./routes/posts"); const app = express(); @@ -55,9 +56,12 @@ const sessionChecker = (req, res, next) => { // route setup app.use("/", homeRouter); +app.use("//:postId", sessionChecker, postsRouter) app.use("/posts", sessionChecker, postsRouter); app.use("/sessions", sessionsRouter); app.use("/users", usersRouter); +app.use("/:postId/comments", commentsRouter) + // catch 404 and forward to error handler app.use((req, res, next) => { diff --git a/controllers/comments.js b/controllers/comments.js new file mode 100644 index 000000000..1f5c05271 --- /dev/null +++ b/controllers/comments.js @@ -0,0 +1,22 @@ +const Comment = require("../models/comments"); +const Post = require('../models/post'); + +const CommentsController = { + CreateComment: (req, res) => { + const comment = new Comment(req.body); + comment + .save() + .then(() => Post.findById(req.params.postId)) + .then((post) => { + post.comments.unshift(comment); + return post.save(); + }) + .then(() => res.redirect('/post/:postId')) + .catch((err) => { + console.log(err); + }); + } +}; + + +module.exports = CommentsController; diff --git a/controllers/posts.js b/controllers/posts.js index 4b521304d..2cdd4c34e 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -6,8 +6,11 @@ const PostsController = { if (err) { throw err; } - - res.render("posts/index", { posts: posts }); + + // Reverse the order of posts array + const reversedPosts = posts.reverse(); + + res.render("posts/index", { posts: reversedPosts }); }); }, New: (req, res) => { @@ -19,10 +22,42 @@ const PostsController = { if (err) { throw err; } - + res.status(201).redirect("/posts"); }); + }, + + Show: (req, res) => { + Post + .findById(req.params.id).lean().populate('comments') + .then((post) => res.render('posts/show', { post })) + .catch((err) => { + console.log(err.message); + }); + } }; module.exports = PostsController; + + + + + // CreateComment: (req, res) => { + // const { comment } = req.body; + + // const newComment = { + // content: comment, + // createdAt: new Date() + // }; + + // const post = new Post(); + // post.comment.push(newComment); + + // post.save((err) => { + // if (err) { + // throw err; + // } + // res.status(201).redirect("/posts"); + // }); + // } \ No newline at end of file diff --git a/cypress/integration/user_can_submit_posts_spec.js b/cypress/integration/user_can_submit_posts_spec.js index 019075937..06ccc43e4 100644 --- a/cypress/integration/user_can_submit_posts_spec.js +++ b/cypress/integration/user_can_submit_posts_spec.js @@ -20,5 +20,14 @@ describe("Timeline", () => { cy.get("#new-post-form").submit(); cy.get(".posts").should("contain", "Hello, world!"); + + // // Add a comment + // cy.visit("/posts"); + + + // cy.get("#comment-form").find('[type="text"]').type("Hello!"); + // cy.get("#comment-form").submit(); + + // cy.get(".comments").should("contain", "Hello!"); }); }); diff --git a/models/comments.js b/models/comments.js new file mode 100644 index 000000000..52e7f4d2c --- /dev/null +++ b/models/comments.js @@ -0,0 +1,8 @@ +const { Schema, model } = require('mongoose'); + +const commentSchema = new Schema({ + content: { type: String, required: true }, + author: { type: String, required: true}, +}, { timestamps: true }); + +module.exports = model('Comment', commentSchema); \ No newline at end of file diff --git a/models/post.js b/models/post.js index 3ef06ae2d..0095fafa2 100644 --- a/models/post.js +++ b/models/post.js @@ -1,8 +1,13 @@ const mongoose = require("mongoose"); +const { Schema } = require('mongoose'); const PostSchema = new mongoose.Schema({ message: String, - likes: { type: Number, default: 0 } + image_url: String, + timestamp: { type : Date, default: Date.now }, + author: Object, + likes: Array, + comments: [{ type: Schema.Types.ObjectId, ref: 'Comment' }] }); const Post = mongoose.model("Post", PostSchema); diff --git a/models/user.js b/models/user.js index 27406b498..3b294f2a7 100644 --- a/models/user.js +++ b/models/user.js @@ -1,8 +1,21 @@ const mongoose = require("mongoose"); const UserSchema = new mongoose.Schema({ - email: String, - password: String, + username: { + type: String, + required: true, + }, + email: { + type: String, + required: true, + }, + password: { + type: String, + required: true, + }, + profilePic: String, + birthday: Date, + livesIn: String, }); const User = mongoose.model("User", UserSchema); diff --git a/routes/posts.js b/routes/posts.js index d4ec2d937..8517b94c7 100644 --- a/routes/posts.js +++ b/routes/posts.js @@ -2,9 +2,12 @@ const express = require("express"); const router = express.Router(); const PostsController = require("../controllers/posts"); +const CommentController = require("../controllers/comments"); router.get("/", PostsController.Index); router.post("/", PostsController.Create); router.get("/new", PostsController.New); +router.get("/:postId", PostsController.Show); +router.post("/:postId/comments", CommentController.CreateComment); module.exports = router; diff --git a/views/layout.hbs b/views/layout.hbs index 17645b71e..068eb6bee 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -5,9 +5,6 @@ - - - {{{body}}} diff --git a/views/posts/index.hbs b/views/posts/index.hbs index 4a4bca1d8..69c103653 100644 --- a/views/posts/index.hbs +++ b/views/posts/index.hbs @@ -1,9 +1,13 @@ +
+ +

Timeline

    {{#each posts}} -
  • {{this.message}}
  • +
  • {{this.message}}
  • {{this.likes}} likes
  • {{/each}}
+ New post diff --git a/views/posts/new.hbs b/views/posts/new.hbs index a80541cdf..2cf44f28b 100644 --- a/views/posts/new.hbs +++ b/views/posts/new.hbs @@ -1,5 +1,12 @@ +
+ +
+
+ + - +
+ diff --git a/views/posts/show.hbs b/views/posts/show.hbs new file mode 100644 index 000000000..7e3e09f7a --- /dev/null +++ b/views/posts/show.hbs @@ -0,0 +1,14 @@ + +{{!--

{{post.message}}

--}} +

This is a post

+ +{{#each post.comments}} +
    +
  • {{this.content}}
  • +
+
+ + + +
+{{/each}} \ No newline at end of file diff --git a/views/sessions/new.hbs b/views/sessions/new.hbs index 86de20b62..888146c6e 100644 --- a/views/sessions/new.hbs +++ b/views/sessions/new.hbs @@ -1,3 +1,6 @@ +
+ +
diff --git a/views/users/new.hbs b/views/users/new.hbs index 13e3b4fc1..d6d92a860 100644 --- a/views/users/new.hbs +++ b/views/users/new.hbs @@ -1,7 +1,9 @@ + + - +
From f609f274ccdd46cd04e1d7188ec3beadcaeb4f1f Mon Sep 17 00:00:00 2001 From: MMal87 Date: Wed, 14 Jun 2023 10:19:27 +0100 Subject: [PATCH 08/70] working on comments --- app.js | 1 + controllers/comments.js | 2 +- controllers/posts.js | 1 + views/posts/show.hbs | 3 +++ 4 files changed, 6 insertions(+), 1 deletion(-) diff --git a/app.js b/app.js index 53320823a..79ee10ea3 100644 --- a/app.js +++ b/app.js @@ -6,6 +6,7 @@ const logger = require("morgan"); const session = require("express-session"); const methodOverride = require("method-override"); + const homeRouter = require("./routes/home"); const postsRouter = require("./routes/posts"); const sessionsRouter = require("./routes/sessions"); diff --git a/controllers/comments.js b/controllers/comments.js index 1f5c05271..6e73eae58 100644 --- a/controllers/comments.js +++ b/controllers/comments.js @@ -11,7 +11,7 @@ const CommentsController = { post.comments.unshift(comment); return post.save(); }) - .then(() => res.redirect('/post/:postId')) + .then(() => res.redirect('/posts/:postId')) .catch((err) => { console.log(err); }); diff --git a/controllers/posts.js b/controllers/posts.js index 2cdd4c34e..88c2370cf 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -42,6 +42,7 @@ module.exports = PostsController; + // CreateComment: (req, res) => { // const { comment } = req.body; diff --git a/views/posts/show.hbs b/views/posts/show.hbs index 7e3e09f7a..e6d569185 100644 --- a/views/posts/show.hbs +++ b/views/posts/show.hbs @@ -1,3 +1,6 @@ +
+ + {{!--

{{post.message}}

--}}

This is a post

From be596edb7b198ad94f8763130a40f95edbca2925 Mon Sep 17 00:00:00 2001 From: Chrise Date: Wed, 14 Jun 2023 10:33:11 +0100 Subject: [PATCH 09/70] changes --- cypress/integration/user_can_log_in_spec.js | 0 spec/models/user.spec.js | 64 +++++++++++++++++++++ 2 files changed, 64 insertions(+) delete mode 100644 cypress/integration/user_can_log_in_spec.js diff --git a/cypress/integration/user_can_log_in_spec.js b/cypress/integration/user_can_log_in_spec.js deleted file mode 100644 index e69de29bb..000000000 diff --git a/spec/models/user.spec.js b/spec/models/user.spec.js index ed1c93ef5..bfe86fdcb 100644 --- a/spec/models/user.spec.js +++ b/spec/models/user.spec.js @@ -54,4 +54,68 @@ describe("User model", () => { }); }); }); + + test("returns false for empty password", () => { + const user = new User({ + email: "someone@example.com", + password: "", + }); + expect((user.password).toBe(false)) + }) + + test("returns false for password without numbers", () => { + const user = new User({ + email: "someone@example.com", + password: "aksfhigto", + }); + expect((user.password).toBe(false)) + }) + + test("returns false for password without letters", () => { + const user = new User({ + email: "someone@example.com", + password: "12341234", + }); + expect((user.password).toBe(false)) + }) + + test("returns false for password without letters", () => { + const user = new User({ + email: "someone@example.com", + password: "12341234", + }); + expect((user.password).toBe(false)) + }) + + test("returns true for password with numbers, letters and 8 or more chars", () => { + const user = new User({ + email: "someone@example.com", + password: "password1", + }); + expect((user.password).toBe(true)) + }) + + test("returns false for password with numbers, letters but less than 8 chars", () => { + const user = new User({ + email: "someone@example.com", + password: "pass1", + }); + expect((user.password).toBe(false)) + }) + + test("returns true for password with numbers, caps and 8 or more chars", () => { + const user = new User({ + email: "someone@example.com", + password: "1234ABCD", + }); + expect((user.password).toBe(true)) + }) + + test("returns true for password with numbers, letters caps and lower with 8 or more chars", () => { + const user = new User({ + email: "someone@example.com", + password: "1234ABab", + }); + expect((user.password).toBe(true)) + }) }); From 783fd8733b26238c0af1afd5f0fd277333adc905 Mon Sep 17 00:00:00 2001 From: Alex Buzea Date: Wed, 14 Jun 2023 12:32:40 +0100 Subject: [PATCH 10/70] add seed data to development, create profile page/routes --- app.js | 2 + controllers/profile.js | 18 +++++++++ db/seed_data.js | 16 ++++++++ models/user.js | 82 +++++++++++++++++++++++++++++++++++++++-- routes/profile.js | 8 ++++ views/layout.hbs | 4 +- views/profile/index.hbs | 29 +++++++++++++++ 7 files changed, 153 insertions(+), 6 deletions(-) create mode 100644 controllers/profile.js create mode 100644 db/seed_data.js create mode 100644 routes/profile.js create mode 100644 views/profile/index.hbs diff --git a/app.js b/app.js index bb2057955..9c9d8c6d7 100644 --- a/app.js +++ b/app.js @@ -10,6 +10,7 @@ const homeRouter = require("./routes/home"); const postsRouter = require("./routes/posts"); const sessionsRouter = require("./routes/sessions"); const usersRouter = require("./routes/users"); +const profileRouter = require("./routes/profile"); const app = express(); @@ -58,6 +59,7 @@ app.use("/", homeRouter); app.use("/posts", sessionChecker, postsRouter); app.use("/sessions", sessionsRouter); app.use("/users", usersRouter); +app.use("/profile", profileRouter); // catch 404 and forward to error handler app.use((req, res, next) => { diff --git a/controllers/profile.js b/controllers/profile.js new file mode 100644 index 000000000..f1ab54ab5 --- /dev/null +++ b/controllers/profile.js @@ -0,0 +1,18 @@ +const User = require("../models/user"); + + +const ProfileController = { + Index: (req, res) => { + User.find((err, users) => { + if (err) { + throw err; + } + + + + res.render("profile/index", { users: users}); + }); + }, +}; + +module.exports = ProfileController; diff --git a/db/seed_data.js b/db/seed_data.js new file mode 100644 index 000000000..9141af727 --- /dev/null +++ b/db/seed_data.js @@ -0,0 +1,16 @@ +// const User = require('../models/user') + + + +// const User1 = new User({firstName: "Alex", lastName: "Buzea", email: "alex@alex.com", password: 123, friends: ['joe@joe.com', 'chris@chris.com', 'sue@sue.com'] }) +// User1.save() +// const User2= new User({firstName: "Joe", lastName: "Brown", email: "joe@joe.com", password: 123, friends: ['johny@johny.com', 'chris@chris.com', 'stan@stan.com'] }) +// User2.save() +// const User3= new User({firstName: "Chris", lastName: "Brown", email: "chris@chris.com", password: 123, friends: ['johny@johny.com', 'chris@chris.com', 'stan@stan.com'] }) +// User3.save() +// const User4= new User({firstName: "Sue", lastName: "Brown", email: "sue@sue.com", password: 123, friends: ['johny@johny.com', 'chris@chris.com', 'stan@stan.com'] }) +// User4.save() +// const User5= new User({firstName: "Susie", lastName: "Smith", email: "susie@susie.com", password: 123, friends: [] }) +// User5.save() +// const User6= new User({firstName: "Peter", lastName: "Smith", email: "peter@peter.com", password: 123, friends: [] }) +// User6.save() \ No newline at end of file diff --git a/models/user.js b/models/user.js index a96f1b410..0bc93dbfc 100644 --- a/models/user.js +++ b/models/user.js @@ -1,12 +1,86 @@ const mongoose = require("mongoose"); const UserSchema = new mongoose.Schema({ - firstName: String, - lastName: String, - email: String, - password: String, + firstName: String, + lastName: String, + email: String, + password: String, + friends: { + type: [String], + default: [], + }, }); const User = mongoose.model("User", UserSchema); +User.collection.drop(); + +//fake Users + +const usersData = [ + { + firstName: "Alex", + lastName: "Buzea", + email: "alex@alex.com", + password: "123", + friends: ["joe@joe.com", "chris@chris.com", "sue@sue.com"], + }, + { + firstName: "Joe", + lastName: "Brown", + email: "joe@joe.com", + password: "123", + friends: ["johny@johny.com", "chris@chris.com", "stan@stan.com"], + }, + { + firstName: "Chris", + lastName: "Robinson", + email: "chris@chris.com", + password: "123", + friends: ["johny@johny.com", "chris@chris.com", "stan@stan.com"], + }, + { + firstName: "Sue", + lastName: "Mason", + email: "sue@sue.com", + password: "123", + friends: ["johny@johny.com", "chris@chris.com", "stan@stan.com"], + }, + { + firstName: "Susie", + lastName: "Smith", + email: "susie@susie.com", + password: "123", + friends: [], + }, + { + firstName: "Peter", + lastName: "Smith", + email: "peter@peter.com", + password: "123", + friends: [], + }, +]; + +User.insertMany(usersData, (error, users) => { + if (error) { + console.log(error); + } else { + console.log("Users added successfully!"); + } +}); + module.exports = User; + +// const User1 = new User({firstName: "Alex", lastName: "Buzea", email: "alex@alex.com", password: 123, friends: ['joe@joe.com', 'chris@chris.com', 'sue@sue.com'] }) +// User1.save() +// const User2= new User({firstName: "Joe", lastName: "Brown", email: "joe@joe.com", password: 123, friends: ['johny@johny.com', 'chris@chris.com', 'stan@stan.com'] }) +// User2.save() +// const User3= new User({firstName: "Chris", lastName: "Brown", email: "chris@chris.com", password: 123, friends: ['johny@johny.com', 'chris@chris.com', 'stan@stan.com'] }) +// User3.save() +// const User4= new User({firstName: "Sue", lastName: "Brown", email: "sue@sue.com", password: 123, friends: ['johny@johny.com', 'chris@chris.com', 'stan@stan.com'] }) +// User4.save() +// const User5= new User({firstName: "Susie", lastName: "Smith", email: "susie@susie.com", password: 123, friends: [] }) +// User5.save() +// const User6= new User({firstName: "Peter", lastName: "Smith", email: "peter@peter.com", password: 123, friends: [] }) +// User6.save() diff --git a/routes/profile.js b/routes/profile.js new file mode 100644 index 000000000..9ec51d50d --- /dev/null +++ b/routes/profile.js @@ -0,0 +1,8 @@ +const express = require("express"); +const router = express.Router(); + +const ProfileController = require("../controllers/profile"); + +router.get("/", ProfileController.Index); + +module.exports = router; diff --git a/views/layout.hbs b/views/layout.hbs index 17645b71e..15cffd797 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -5,9 +5,9 @@ - + {{!-- - + --}} {{{body}}} diff --git a/views/profile/index.hbs b/views/profile/index.hbs new file mode 100644 index 000000000..b6b2db1c2 --- /dev/null +++ b/views/profile/index.hbs @@ -0,0 +1,29 @@ +

Name

+Timeline +
+ +
+ +
+

Friends

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

Users

+
    + {{#each users}} +
  • {{this.email}}
  • + {{/each}} +
+
+ +
+
\ No newline at end of file From 376c2332a4a016d7e8940432e3df5fb66f4dca61 Mon Sep 17 00:00:00 2001 From: "kate.dollete" Date: Wed, 14 Jun 2023 13:33:10 +0100 Subject: [PATCH 11/70] Add login and signup links --- views/home/index.hbs | 2 ++ views/layout.hbs | 3 --- views/posts/index.hbs | 3 +++ views/sessions/new.hbs | 4 ++++ views/users/new.hbs | 6 ++++++ 5 files changed, 15 insertions(+), 3 deletions(-) diff --git a/views/home/index.hbs b/views/home/index.hbs index 7ad30d847..dc3b990be 100644 --- a/views/home/index.hbs +++ b/views/home/index.hbs @@ -1,2 +1,4 @@

{{title}}

Welcome to {{title}}

+Log in +Sign Up \ No newline at end of file diff --git a/views/layout.hbs b/views/layout.hbs index 17645b71e..068eb6bee 100644 --- a/views/layout.hbs +++ b/views/layout.hbs @@ -5,9 +5,6 @@ -
- -
{{{body}}} diff --git a/views/posts/index.hbs b/views/posts/index.hbs index 4a4bca1d8..b77da5646 100644 --- a/views/posts/index.hbs +++ b/views/posts/index.hbs @@ -1,4 +1,7 @@

Timeline

+
+ +
    {{#each posts}}
  • {{this.message}}
  • diff --git a/views/sessions/new.hbs b/views/sessions/new.hbs index 86de20b62..af781d6a2 100644 --- a/views/sessions/new.hbs +++ b/views/sessions/new.hbs @@ -1,7 +1,11 @@
    +

    +

    +

    + Create new account
    diff --git a/views/users/new.hbs b/views/users/new.hbs index d4d9897b6..2c6f629e7 100644 --- a/views/users/new.hbs +++ b/views/users/new.hbs @@ -1,11 +1,17 @@
    +

    +

    +

    +

    +

    + Already have an account? Log in.
    From 54aec4381ce4bd9f7bb8f1738aa28adea921e48d Mon Sep 17 00:00:00 2001 From: "kate.dollete" Date: Wed, 14 Jun 2023 13:33:34 +0100 Subject: [PATCH 12/70] Install bcrypt --- package-lock.json | 604 +++++++++++++++++++++++++++++++++++++++++----- package.json | 1 + 2 files changed, 539 insertions(+), 66 deletions(-) diff --git a/package-lock.json b/package-lock.json index 357dbfe45..a6a521b2d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.0.0", "license": "CC BY-NC-SA", "dependencies": { + "bcrypt": "^5.1.0", "cookie-parser": "~1.4.4", "debug": "~2.6.9", "dotenv": "^16.1.4", @@ -1142,6 +1143,39 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "node_modules/@mapbox/node-pre-gyp": { + "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", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -1460,7 +1494,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "dependencies": { "debug": "4" }, @@ -1472,7 +1505,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -1488,8 +1520,7 @@ "node_modules/agent-base/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/aggregate-error": { "version": "3.1.0", @@ -1560,7 +1591,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -1592,6 +1622,11 @@ "node": ">= 8" } }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, "node_modules/arch": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", @@ -1612,6 +1647,31 @@ } ] }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -1819,6 +1879,19 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" }, + "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/bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -2136,6 +2209,14 @@ "node": ">= 6" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/ci-info": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", @@ -2245,6 +2326,14 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "dev": true }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colorette": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", @@ -2286,6 +2375,11 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "node_modules/content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -2541,6 +2635,11 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "node_modules/denque": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", @@ -2562,6 +2661,14 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -2660,8 +2767,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -3525,11 +3631,32 @@ "node": ">=10" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { "version": "2.3.2", @@ -3556,6 +3683,25 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -3620,7 +3766,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3725,6 +3870,11 @@ "node": ">=8" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "node_modules/hbs": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.2.0.tgz", @@ -3825,7 +3975,6 @@ "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==", - "dev": true, "dependencies": { "agent-base": "6", "debug": "4" @@ -3838,7 +3987,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -3854,8 +4002,7 @@ "node_modules/https-proxy-agent/node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/human-signals": { "version": "1.1.1", @@ -3968,7 +4115,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4049,7 +4195,6 @@ "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==", - "dev": true, "engines": { "node": ">=8" } @@ -5327,7 +5472,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -5339,7 +5483,6 @@ "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==", - "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -5354,7 +5497,6 @@ "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" } @@ -5488,6 +5630,48 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/mongodb": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", @@ -5655,6 +5839,49 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -5768,12 +5995,31 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -5797,7 +6043,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "dependencies": { "wrappy": "1" } @@ -5959,7 +6204,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6353,7 +6597,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "dependencies": { "glob": "^7.1.3" }, @@ -6425,7 +6668,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -6473,6 +6715,11 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -6507,8 +6754,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/simple-update-notifier": { "version": "1.1.0", @@ -6680,7 +6926,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -6694,7 +6939,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -6790,6 +7034,22 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -7241,6 +7501,14 @@ "node": ">= 8" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -7275,8 +7543,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/write-file-atomic": { "version": "3.0.3", @@ -7335,8 +7602,7 @@ "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/yargs": { "version": "16.2.0", @@ -8242,6 +8508,32 @@ "@jridgewell/sourcemap-codec": "^1.4.10" } }, + "@mapbox/node-pre-gyp": { + "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==", + "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" + }, + "dependencies": { + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + } + } + }, "@sinonjs/commons": { "version": "1.8.3", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", @@ -8525,7 +8817,6 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, "requires": { "debug": "4" }, @@ -8534,7 +8825,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -8542,8 +8832,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -8595,8 +8884,7 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -8616,12 +8904,38 @@ "picomatch": "^2.0.4" } }, + "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==" + }, "arch": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/arch/-/arch-2.2.0.tgz", "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", "dev": true }, + "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" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -8781,6 +9095,15 @@ } } }, + "bcrypt": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", + "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.10", + "node-addon-api": "^5.0.0" + } + }, "bcrypt-pbkdf": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", @@ -9005,6 +9328,11 @@ } } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, "ci-info": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.0.tgz", @@ -9090,6 +9418,11 @@ "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==" + }, "colorette": { "version": "2.0.16", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", @@ -9122,6 +9455,11 @@ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "content-disposition": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", @@ -9338,6 +9676,11 @@ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "denque": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/denque/-/denque-1.5.1.tgz", @@ -9353,6 +9696,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -9426,8 +9774,7 @@ "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==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -10088,11 +10435,28 @@ "universalify": "^2.0.0" } }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.2", @@ -10112,6 +10476,22 @@ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", "dev": true }, + "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" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -10161,7 +10541,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -10231,6 +10610,11 @@ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "hbs": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.2.0.tgz", @@ -10309,7 +10693,6 @@ "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==", - "dev": true, "requires": { "agent-base": "6", "debug": "4" @@ -10319,7 +10702,6 @@ "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -10327,8 +10709,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" } } }, @@ -10399,7 +10780,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -10461,8 +10841,7 @@ "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==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-fn": { "version": "2.1.0", @@ -11445,7 +11824,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -11454,7 +11832,6 @@ "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==", - "dev": true, "requires": { "semver": "^6.0.0" }, @@ -11462,8 +11839,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -11571,6 +11947,35 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" }, + "minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" + }, + "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" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, "mongodb": { "version": "3.7.3", "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.7.3.tgz", @@ -11693,6 +12098,40 @@ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" }, + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -11777,12 +12216,28 @@ "path-key": "^3.0.0" } }, + "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" + } + }, "nwsapi": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, "on-finished": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", @@ -11800,7 +12255,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { "wrappy": "1" } @@ -11916,8 +12370,7 @@ "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=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "3.1.1", @@ -12221,7 +12674,6 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -12267,7 +12719,6 @@ "version": "7.3.7", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", - "dev": true, "requires": { "lru-cache": "^6.0.0" } @@ -12303,6 +12754,11 @@ "send": "0.16.2" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "setprototypeof": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", @@ -12331,8 +12787,7 @@ "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==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-update-notifier": { "version": "1.1.0", @@ -12475,7 +12930,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -12486,7 +12940,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -12551,6 +13004,19 @@ "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", "dev": true }, + "tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, "terminal-link": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", @@ -12909,6 +13375,14 @@ "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" + } + }, "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", @@ -12934,8 +13408,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write-file-atomic": { "version": "3.0.3", @@ -12977,8 +13450,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "yargs": { "version": "16.2.0", diff --git a/package.json b/package.json index b0814de37..3e8ae025a 100644 --- a/package.json +++ b/package.json @@ -16,6 +16,7 @@ "node": ">=18.1.0" }, "dependencies": { + "bcrypt": "^5.1.0", "cookie-parser": "~1.4.4", "debug": "~2.6.9", "dotenv": "^16.1.4", From a991cefbe749c90d79422937d1766db3c0e0383b Mon Sep 17 00:00:00 2001 From: "kate.dollete" Date: Wed, 14 Jun 2023 13:34:22 +0100 Subject: [PATCH 13/70] Add password hashing feature --- controllers/sessions.js | 60 ++++++++++++++++++++++++----------------- models/user.js | 23 ++++++++++++++++ 2 files changed, 58 insertions(+), 25 deletions(-) diff --git a/controllers/sessions.js b/controllers/sessions.js index 917e2e14c..062fb1739 100644 --- a/controllers/sessions.js +++ b/controllers/sessions.js @@ -1,34 +1,44 @@ const User = require("../models/user"); +const bcrypt = require("bcrypt"); const SessionsController = { - New: (req, res) => { - res.render("sessions/new", {}); - }, + New: (req, res) => { + res.render("sessions/new", {}); + }, - Create: (req, res) => { - console.log("trying to log in"); - const email = req.body.email; - const password = req.body.password; + Create: (req, res) => { + console.log("trying to log in"); + const email = req.body.email; + const password = req.body.password; - User.findOne({ email: email }).then((user) => { - if (!user) { - res.redirect("/sessions/new"); - } else if (user.password != password) { - res.redirect("/sessions/new"); - } else { - req.session.user = user; - res.redirect("/posts"); - } - }); - }, + User.findOne({ email: email }).then((user) => { + if (!user) { + console.log("User doesn't exist!"); + res.redirect("/sessions/new"); + } else { + bcrypt.compare(password, user.password, function (error, isMatch) { + if (error) { + throw error; + } else if (!isMatch) { + console.log("Password doesn't match!"); + res.redirect("/sessions/new"); + } else { + console.log("Password matches!"); + req.session.user = user; + res.redirect("/posts"); + } + }); + } + }); + }, - Destroy: (req, res) => { - console.log("logging out"); - if (req.session.user && req.cookies.user_sid) { - res.clearCookie("user_sid"); - } - res.redirect("/sessions/new"); - }, + Destroy: (req, res) => { + console.log("logging out"); + if (req.session.user && req.cookies.user_sid) { + res.clearCookie("user_sid"); + } + res.redirect("/sessions/new"); + }, }; module.exports = SessionsController; diff --git a/models/user.js b/models/user.js index a96f1b410..57850a662 100644 --- a/models/user.js +++ b/models/user.js @@ -1,4 +1,6 @@ const mongoose = require("mongoose"); +const bcrypt = require("bcrypt"); +const saltRounds = 10; const UserSchema = new mongoose.Schema({ firstName: String, @@ -7,6 +9,27 @@ const UserSchema = new mongoose.Schema({ password: String, }); +UserSchema.pre("save", function (next) { + const user = this; + + if (this.isModified("password") || this.isNew) { + bcrypt + .genSalt(saltRounds) + .then((salt) => { + console.log("Salt: ", salt); + return bcrypt.hash(user.password, salt); + }) + .then((hash) => { + console.log("Hash: ", hash); + user.password = hash; + next(); + }) + .catch((err) => console.error(err.message)); + } else { + return next(); + } +}); + const User = mongoose.model("User", UserSchema); module.exports = User; From eba3db64bef02ccb43dbda24b13d2c5bca6f904c Mon Sep 17 00:00:00 2001 From: MMal87 Date: Wed, 14 Jun 2023 14:13:54 +0100 Subject: [PATCH 14/70] comments working --- app.js | 4 ++-- controllers/comments.js | 53 ++++++++++++++++++++++++++++------------- controllers/posts.js | 27 +++------------------ models/comments.js | 12 +++++----- models/post.js | 12 ++++++++-- models/user.js | 21 ++++------------ views/posts/index.hbs | 6 ++++- views/posts/show.hbs | 30 +++++++++++++---------- 8 files changed, 84 insertions(+), 81 deletions(-) diff --git a/app.js b/app.js index 79ee10ea3..1a65379b1 100644 --- a/app.js +++ b/app.js @@ -57,11 +57,11 @@ const sessionChecker = (req, res, next) => { // route setup app.use("/", homeRouter); -app.use("//:postId", sessionChecker, postsRouter) app.use("/posts", sessionChecker, postsRouter); app.use("/sessions", sessionsRouter); app.use("/users", usersRouter); -app.use("/:postId/comments", commentsRouter) +app.use("/:postId", sessionChecker, postsRouter) +app.use("/:postId/comments", sessionChecker, commentsRouter) // catch 404 and forward to error handler diff --git a/controllers/comments.js b/controllers/comments.js index 6e73eae58..3f590b08d 100644 --- a/controllers/comments.js +++ b/controllers/comments.js @@ -1,22 +1,41 @@ -const Comment = require("../models/comments"); -const Post = require('../models/post'); +//const Comment = require("../models/comments"); +const Post = require("../models/post"); const CommentsController = { - CreateComment: (req, res) => { - const comment = new Comment(req.body); - comment - .save() - .then(() => Post.findById(req.params.postId)) + CreateComment: (req, res) => { + const { message } = req.body; // Extract the comment data from the request body + + Post.findById(req.params.postId) .then((post) => { - post.comments.unshift(comment); - return post.save(); + post.comments = post.comments || []; + // Create a new comment object + const newComment = { message }; + + // Add the new comment to the comments array of the post + post.comments.unshift(newComment); + + return post.save(); // Save the updated post with the new comment }) - .then(() => res.redirect('/posts/:postId')) + .then(() => res.redirect(`/posts/${req.params.postId}`)) .catch((err) => { - console.log(err); - }); - } -}; - - -module.exports = CommentsController; + console.log(err); + }); + } + + }; + + + module.exports = CommentsController; + + + // const comment = new Comment(req.body); + // comment.save() + // .then(() => Post.findById(req.params.postId)) + // .then((post) => { + // post.comments.unshift(comment); + // return post.save(); + // }) + // .then(() => res.redirect(`/posts/${req.params.postId}`)) + // .catch((err) => { + // console.log(err); + // }); \ No newline at end of file diff --git a/controllers/posts.js b/controllers/posts.js index 88c2370cf..dcaf7d2ea 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -1,4 +1,5 @@ const Post = require("../models/post"); +//const Comment = require("./comments"); const PostsController = { Index: (req, res) => { @@ -30,35 +31,13 @@ const PostsController = { Show: (req, res) => { Post - .findById(req.params.id).lean().populate('comments') + .findById(req.params.postId).populate('comments') .then((post) => res.render('posts/show', { post })) .catch((err) => { console.log(err.message); - }); + }); } }; module.exports = PostsController; - - - - - // CreateComment: (req, res) => { - // const { comment } = req.body; - - // const newComment = { - // content: comment, - // createdAt: new Date() - // }; - - // const post = new Post(); - // post.comment.push(newComment); - - // post.save((err) => { - // if (err) { - // throw err; - // } - // res.status(201).redirect("/posts"); - // }); - // } \ No newline at end of file diff --git a/models/comments.js b/models/comments.js index 52e7f4d2c..05b69f1c1 100644 --- a/models/comments.js +++ b/models/comments.js @@ -1,8 +1,8 @@ -const { Schema, model } = require('mongoose'); +// const { Schema, model } = require('mongoose'); -const commentSchema = new Schema({ - content: { type: String, required: true }, - author: { type: String, required: true}, -}, { timestamps: true }); +// const commentSchema = new Schema({ +// content: { type: String, required: true }, +// author: { type: String, required: true}, +// }, { timestamps: true }); -module.exports = model('Comment', commentSchema); \ No newline at end of file +// module.exports = model('Comment', commentSchema); \ No newline at end of file diff --git a/models/post.js b/models/post.js index 0095fafa2..ec3864e21 100644 --- a/models/post.js +++ b/models/post.js @@ -1,5 +1,5 @@ const mongoose = require("mongoose"); -const { Schema } = require('mongoose'); + const PostSchema = new mongoose.Schema({ message: String, @@ -7,7 +7,15 @@ const PostSchema = new mongoose.Schema({ timestamp: { type : Date, default: Date.now }, author: Object, likes: Array, - comments: [{ type: Schema.Types.ObjectId, ref: 'Comment' }] + comments: { + type: [ + { + message: String, + author: String + } + ], + default: [] + } }); const Post = mongoose.model("Post", PostSchema); diff --git a/models/user.js b/models/user.js index 3b294f2a7..ad7b6fe80 100644 --- a/models/user.js +++ b/models/user.js @@ -1,23 +1,12 @@ const mongoose = require("mongoose"); const UserSchema = new mongoose.Schema({ - username: { - type: String, - required: true, - }, - email: { - type: String, - required: true, - }, - password: { - type: String, - required: true, - }, - profilePic: String, - birthday: Date, - livesIn: String, + firstName: String, + lastName: String, + email: String, + password: String, }); const User = mongoose.model("User", UserSchema); -module.exports = User; +module.exports = User; \ No newline at end of file diff --git a/views/posts/index.hbs b/views/posts/index.hbs index 69c103653..b0302840c 100644 --- a/views/posts/index.hbs +++ b/views/posts/index.hbs @@ -8,6 +8,10 @@
  • {{this.likes}} likes
  • {{/each}}
- +{{!--
    + {{#each post.comments}} +
  • {{ this.content }} - {{ this.author }}
  • + {{/each}} +
--}} New post diff --git a/views/posts/show.hbs b/views/posts/show.hbs index e6d569185..5bc2f5a29 100644 --- a/views/posts/show.hbs +++ b/views/posts/show.hbs @@ -1,17 +1,21 @@
- +
+ +

{{ post.message }}

+

Author: {{ post.author }}

+

Likes: {{ post.likes }}

+ + +
    + {{#each post.comments}} +
  • {{ this.message }}
  • + {{/each}} +
+ +
+ + +
-{{!--

{{post.message}}

--}} -

This is a post

-{{#each post.comments}} -
    -
  • {{this.content}}
  • -
-
- - - -
-{{/each}} \ No newline at end of file From f17c9fa81c0fa2b90026906139e30c55de0f0467 Mon Sep 17 00:00:00 2001 From: Sean Wright <89875863+Swright88@users.noreply.github.com> Date: Wed, 14 Jun 2023 14:20:16 +0100 Subject: [PATCH 15/70] draft posts tests --- spec/models/post.spec.js | 50 +++++++++++++++++++++++++--------------- 1 file changed, 32 insertions(+), 18 deletions(-) diff --git a/spec/models/post.spec.js b/spec/models/post.spec.js index e400f5441..114015a00 100644 --- a/spec/models/post.spec.js +++ b/spec/models/post.spec.js @@ -15,6 +15,31 @@ describe("Post model", () => { expect(post.message).toEqual("some message"); }); + it("has a user ID", () => { + var post = new Post({ message: "some message", + user_id: 5 }); + expect(post.user_id).toEqual("5"); + }); + + it("has the time of post creation", () => { + const mockDateObject = new Date("2022-04-20T13:33:42.767Z") + const spy = jest + .spyOn(global, 'Date') + .mockImplementation(() => mockDateObject) + + var post = new Post({ message: "some message"}) + + spy.mockRestore() + + expect(post.createdAt).toEqual(new Date("2022-04-20T13:33:42.767Z")) + }); + + it("can show number of likes", () => { + var post = new Post({ message: "some message"}) + + expect(post.likes.length).toEqual(0) + }) + it("can list all posts", (done) => { Post.find((err, posts) => { expect(err).toBeNull(); @@ -38,29 +63,18 @@ describe("Post model", () => { }); }); - it("shows post chronologically", (done) => { - var post = new Post({ message: "hi"}); - var post1 = new Post({ message: "hello"}); - + it("can comment on a post", (done) => { + let post = new Post({ message: "message to be commented on", comments: {message: "great comment", author: "somebody"} }); post.save((err) => { expect(err).toBeNull(); - + Post.find((err, posts) => { expect(err).toBeNull(); - - expect(posts[0]).toMatchObject({ message: "hi" }); - done(); - }); - }); - - post1.save((err) => { - expect(err).toBeNull(); - - Post.find((posts) => { - - expect(posts[0]).toMatchObject({ message: "hello" }); + expect(posts[0].message).toEqual("message to be commented on"); + expect(posts[0].comments[0].message).toContain("great comment"); + expect(posts[0].comments[0].author).toEqual("somebody") done(); }); }); }) -}); \ No newline at end of file +}); From 87d82d0931c2503a5aec767595daf371f3c92ea9 Mon Sep 17 00:00:00 2001 From: Alex Buzea Date: Wed, 14 Jun 2023 15:00:09 +0100 Subject: [PATCH 16/70] implement list of friends and non-friends on profile page first draft --- controllers/profile.js | 15 ++++++++++++--- views/posts/index.hbs | 2 ++ views/profile/index.hbs | 32 ++++++++++++++++++-------------- 3 files changed, 32 insertions(+), 17 deletions(-) diff --git a/controllers/profile.js b/controllers/profile.js index f1ab54ab5..7e9cd51f7 100644 --- a/controllers/profile.js +++ b/controllers/profile.js @@ -3,14 +3,23 @@ const User = require("../models/user"); const ProfileController = { Index: (req, res) => { - User.find((err, users) => { + const currentUser = req.session.user; // Get the currently signed-in user from the session + User.find({}, (err, allUsers) => { if (err) { throw err; } + const friends = currentUser.friends; + const friends_names = allUsers.filter( + (user) => friends.includes(user.email) + ); + console.log(friends) + console.log(currentUser) + const nonFriends = allUsers.filter( + (user) => !friends.includes(user.email) && (user.email !=currentUser.email) + ); - - res.render("profile/index", { users: users}); + res.render("profile/index", { friends_names: friends_names, nonFriends: nonFriends }); }); }, }; diff --git a/views/posts/index.hbs b/views/posts/index.hbs index 4a4bca1d8..3fe2a12be 100644 --- a/views/posts/index.hbs +++ b/views/posts/index.hbs @@ -6,4 +6,6 @@ {{/each}} +My profile + New post diff --git a/views/profile/index.hbs b/views/profile/index.hbs index b6b2db1c2..f8ee068f1 100644 --- a/views/profile/index.hbs +++ b/views/profile/index.hbs @@ -1,5 +1,6 @@ +

Name

-Timeline +Timeline
@@ -7,23 +8,26 @@

Friends

    + {{#each friends_names}} +
    +
  • {{this.firstName}} {{this.lastName}} + + {{!--
  • {{this}}
  • --}} + {{/each}} +
- - -
- -

Users

-
    - {{#each users}} -
  • {{this.email}}
  • - {{/each}} -
-
- -
+
    + {{#each nonFriends}} + {{!--
  • {{this.email}}
  • --}} +
    +
  • {{this.firstName}} {{this.lastName}} + + {{/each}} +
+
\ No newline at end of file From ed399e393defe59bca747d8cd3e33589f842cdd7 Mon Sep 17 00:00:00 2001 From: Alex Buzea Date: Wed, 14 Jun 2023 16:02:42 +0100 Subject: [PATCH 17/70] ability to add and remove friends from database and show on html page --- controllers/profile.js | 76 ++++++++++++++++++++++++++++++++++++----- routes/profile.js | 4 ++- views/profile/index.hbs | 16 ++++----- 3 files changed, 76 insertions(+), 20 deletions(-) diff --git a/controllers/profile.js b/controllers/profile.js index 7e9cd51f7..e11b3301a 100644 --- a/controllers/profile.js +++ b/controllers/profile.js @@ -1,27 +1,85 @@ const User = require("../models/user"); - const ProfileController = { Index: (req, res) => { - const currentUser = req.session.user; // Get the currently signed-in user from the session + const currentUser = req.session.user; + User.find({}, (err, allUsers) => { if (err) { throw err; } const friends = currentUser.friends; - const friends_names = allUsers.filter( - (user) => friends.includes(user.email) - ); - console.log(friends) - console.log(currentUser) + const friends_names = allUsers.filter((user) => friends.includes(user.email)); const nonFriends = allUsers.filter( - (user) => !friends.includes(user.email) && (user.email !=currentUser.email) + (user) => !friends.includes(user.email) && user.email !== currentUser.email ); res.render("profile/index", { friends_names: friends_names, nonFriends: nonFriends }); }); }, + + RemoveFriend: (req, res) => { + const currentUser = req.session.user; + const friendEmail = req.body.friendEmail; + + User.findOneAndUpdate( + { email: currentUser.email }, + { $pull: { friends: friendEmail } }, + { new: true }, + (err, updatedUser) => { + if (err) { + throw err; + } + + // Re-query the user data with updated friends list + User.find({}, (err, allUsers) => { + if (err) { + throw err; + } + + const friends = updatedUser.friends; + const friends_names = allUsers.filter((user) => friends.includes(user.email)); + const nonFriends = allUsers.filter( + (user) => !friends.includes(user.email) && user.email !== updatedUser.email + ); + + res.render("profile/index", { friends_names: friends_names, nonFriends: nonFriends }); + }); + } + ); + }, + + AddFriend: (req, res) => { + const currentUser = req.session.user; + const friendEmail = req.body.friendEmail; + + User.findOneAndUpdate( + { email: currentUser.email }, + { $push: { friends: friendEmail } }, + { new: true }, + (err, updatedUser) => { + if (err) { + throw err; + } + + // Re-query the user data with updated friends list + User.find({}, (err, allUsers) => { + if (err) { + throw err; + } + + const friends = updatedUser.friends; + const friends_names = allUsers.filter((user) => friends.includes(user.email)); + const nonFriends = allUsers.filter( + (user) => !friends.includes(user.email) && user.email !== updatedUser.email + ); + + res.render("profile/index", { friends_names: friends_names, nonFriends: nonFriends }); + }); + } + ); + }, }; -module.exports = ProfileController; +module.exports = ProfileController; \ No newline at end of file diff --git a/routes/profile.js b/routes/profile.js index 9ec51d50d..0c0e30751 100644 --- a/routes/profile.js +++ b/routes/profile.js @@ -4,5 +4,7 @@ const router = express.Router(); const ProfileController = require("../controllers/profile"); router.get("/", ProfileController.Index); +router.post("/remove-friend", ProfileController.RemoveFriend); +router.post("/add-friend", ProfileController.AddFriend); -module.exports = router; +module.exports = router; \ No newline at end of file diff --git a/views/profile/index.hbs b/views/profile/index.hbs index f8ee068f1..d3600b8c9 100644 --- a/views/profile/index.hbs +++ b/views/profile/index.hbs @@ -1,4 +1,3 @@ -

Name

Timeline
@@ -9,25 +8,22 @@

Friends

    {{#each friends_names}} - -
  • {{this.firstName}} {{this.lastName}} +
    + +
  • {{this.firstName}} {{this.lastName}}
  • - {{!--
  • {{this}}
  • --}} {{/each}}
- -

Users

    {{#each nonFriends}} - {{!--
  • {{this.email}}
  • --}} -
    -
  • {{this.firstName}} {{this.lastName}} +
    + +
  • {{this.firstName}} {{this.lastName}}
  • {{/each}}
-
\ No newline at end of file From 9a21f63df0a95adf593e9768c647b1337d5183ca Mon Sep 17 00:00:00 2001 From: "kate.dollete" Date: Wed, 14 Jun 2023 16:32:14 +0100 Subject: [PATCH 18/70] Update seed data --- models/user.js | 110 ++++++++++++++++++++++++------------------------- 1 file changed, 55 insertions(+), 55 deletions(-) diff --git a/models/user.js b/models/user.js index 0bc93dbfc..8867526c9 100644 --- a/models/user.js +++ b/models/user.js @@ -1,14 +1,14 @@ const mongoose = require("mongoose"); const UserSchema = new mongoose.Schema({ - firstName: String, - lastName: String, - email: String, - password: String, - friends: { - type: [String], - default: [], - }, + firstName: String, + lastName: String, + email: String, + password: String, + friends: { + type: [String], + default: [], + }, }); const User = mongoose.model("User", UserSchema); @@ -18,56 +18,56 @@ User.collection.drop(); //fake Users const usersData = [ - { - firstName: "Alex", - lastName: "Buzea", - email: "alex@alex.com", - password: "123", - friends: ["joe@joe.com", "chris@chris.com", "sue@sue.com"], - }, - { - firstName: "Joe", - lastName: "Brown", - email: "joe@joe.com", - password: "123", - friends: ["johny@johny.com", "chris@chris.com", "stan@stan.com"], - }, - { - firstName: "Chris", - lastName: "Robinson", - email: "chris@chris.com", - password: "123", - friends: ["johny@johny.com", "chris@chris.com", "stan@stan.com"], - }, - { - firstName: "Sue", - lastName: "Mason", - email: "sue@sue.com", - password: "123", - friends: ["johny@johny.com", "chris@chris.com", "stan@stan.com"], - }, - { - firstName: "Susie", - lastName: "Smith", - email: "susie@susie.com", - password: "123", - friends: [], - }, - { - firstName: "Peter", - lastName: "Smith", - email: "peter@peter.com", - password: "123", - friends: [], - }, + { + firstName: "Alex", + lastName: "Buzea", + email: "alex@alex.com", + password: "123", + friends: ["joe@joe.com", "chris@chris.com", "sue@sue.com"], + }, + { + firstName: "Joe", + lastName: "Brown", + email: "joe@joe.com", + password: "123", + friends: ["alex@alex.com", "chris@chris.com", "peter@peter.com"], + }, + { + firstName: "Chris", + lastName: "Robinson", + email: "chris@chris.com", + password: "123", + friends: ["susie@susie.com", "joe@joe.com"], + }, + { + firstName: "Sue", + lastName: "Mason", + email: "sue@sue.com", + password: "123", + friends: ["alex@alex.com", "chris@chris.com", "joe@joe.com"], + }, + { + firstName: "Susie", + lastName: "Smith", + email: "susie@susie.com", + password: "123", + friends: [], + }, + { + firstName: "Peter", + lastName: "Smith", + email: "peter@peter.com", + password: "123", + friends: [], + }, ]; User.insertMany(usersData, (error, users) => { - if (error) { - console.log(error); - } else { - console.log("Users added successfully!"); - } + if (error) { + console.log(error); + } else { + console.log("Users added successfully!"); + } }); module.exports = User; From 2614eabeb6ef999bdf068c4aeb567fc43f80e033 Mon Sep 17 00:00:00 2001 From: MMal87 Date: Wed, 14 Jun 2023 16:50:46 +0100 Subject: [PATCH 19/70] like button work --- app.js | 5 +++-- controllers/posts.js | 50 +++++++++++++++++++++++++++++++++++++++++-- routes/posts.js | 2 ++ views/posts/index.hbs | 8 ++----- views/posts/show.hbs | 29 ++++++++++++++++++++++++- 5 files changed, 83 insertions(+), 11 deletions(-) diff --git a/app.js b/app.js index 1a65379b1..cfbf89af9 100644 --- a/app.js +++ b/app.js @@ -60,8 +60,9 @@ app.use("/", homeRouter); app.use("/posts", sessionChecker, postsRouter); app.use("/sessions", sessionsRouter); app.use("/users", usersRouter); -app.use("/:postId", sessionChecker, postsRouter) -app.use("/:postId/comments", sessionChecker, commentsRouter) +app.use("/:postId", sessionChecker, postsRouter); +app.use("/:postId/comments", sessionChecker, commentsRouter); +app.use("/:postId/like", sessionChecker, postsRouter); // catch 404 and forward to error handler diff --git a/controllers/posts.js b/controllers/posts.js index dcaf7d2ea..3146a04a3 100644 --- a/controllers/posts.js +++ b/controllers/posts.js @@ -36,8 +36,54 @@ const PostsController = { .catch((err) => { console.log(err.message); }); - } + }, + + likePost: (req, res) => { + const postId = req.params.postId; + //const userId = req.user.id; // Assuming you have user authentication and can access the user ID + //const likesCount = post.likes.length; + + // Find the post by ID in the database + Post.findById(postId) + .then((post) => { + const a = 'a'//need to get rid of this and add the userid + // Check if the user has already liked the post + if (post.likes.includes(a)) { + return res.status(400).json({ error: "User has already liked the post." }); + }else{ + + // Add the user ID to the likes array + post.likes.push(a); + //post.likesCount += 1; + } + + // Save the updated post + return post.save(); + }) + .then((updatedPost) => { + res.json({ likesCount: updatedPost.likes.length }); + }) + .catch((err) => { + console.log(err); + res.status(500).json({ error: "An error occurred while processing your request." }); + }); + }, }; -module.exports = PostsController; + +// Likes: (req, res) => { +// Post.findByIdAndUpdate(req.params.postId, { $inc: { likesCount: 1 } }, { new: true }) +// .populate('likes') +// .then((post) => { +// res.render('posts/show', { post }); +// }) +// .catch((err) => { +// console.log(err.message); +// }); + +// } + +// }; + +module.exports = PostsController; diff --git a/routes/posts.js b/routes/posts.js index 8517b94c7..db946b6d7 100644 --- a/routes/posts.js +++ b/routes/posts.js @@ -5,6 +5,8 @@ const PostsController = require("../controllers/posts"); const CommentController = require("../controllers/comments"); router.get("/", PostsController.Index); +// router.post("/:postId/likes", PostsController.Likes); +router.post("/:postId/like", PostsController.likePost); router.post("/", PostsController.Create); router.get("/new", PostsController.New); router.get("/:postId", PostsController.Show); diff --git a/views/posts/index.hbs b/views/posts/index.hbs index b0302840c..820b10034 100644 --- a/views/posts/index.hbs +++ b/views/posts/index.hbs @@ -5,13 +5,9 @@
    {{#each posts}}
  • {{this.message}}
  • -
  • {{this.likes}} likes
  • +
  • {{this.likes}} likes
  • {{/each}}
-{{!--
    - {{#each post.comments}} -
  • {{ this.content }} - {{ this.author }}
  • - {{/each}} -
--}} + New post diff --git a/views/posts/show.hbs b/views/posts/show.hbs index 5bc2f5a29..baceadd16 100644 --- a/views/posts/show.hbs +++ b/views/posts/show.hbs @@ -3,7 +3,34 @@

{{ post.message }}

Author: {{ post.author }}

-

Likes: {{ post.likes }}

+ + +{{ post.likes.length }} likes + + + + + + + From c443d256f1ff5589f150fb82b9c9e39cdde61c60 Mon Sep 17 00:00:00 2001 From: Alex Buzea Date: Mon, 19 Jun 2023 15:33:32 +0100 Subject: [PATCH 63/70] fixed issue with remove friend button so that it reflects the current friends --- controllers/profile.js | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/controllers/profile.js b/controllers/profile.js index d31dc9b28..f8ca38ec4 100644 --- a/controllers/profile.js +++ b/controllers/profile.js @@ -48,6 +48,7 @@ const ProfileController = { RemoveFriend: (req, res) => { const currentUser = req.session.user; const friendEmail = req.body.friendEmail; + // Remove the friend from the current user's friends list User.findOneAndUpdate( { email: currentUser.email }, @@ -57,6 +58,7 @@ const ProfileController = { if (err) { throw err; } + // Remove the current user from the friend's friends list User.findOneAndUpdate( { email: friendEmail }, @@ -66,22 +68,28 @@ const ProfileController = { if (err) { throw err; } + // Re-query the user data with updated friends list User.find({}, (err, allUsers) => { if (err) { throw err; } - const friends = updatedUser.friends; + + // Update the friend lists in the session + currentUser.friends = updatedUser.friends; + updatedFriendUser.friends = updatedFriendUser.friends; + const friends_names = allUsers.filter((user) => - friends.includes(user.email) + updatedUser.friends.includes(user.email) ); + const nonFriends = allUsers.filter( (user) => - !friends.includes(user.email) && + !updatedUser.friends.includes(user.email) && user.email !== updatedUser.email ); - // console.log("friends_names:", friends_names); - // console.log("nonFriends:", nonFriends); + + // Render the updated data res.render("profile/index", { friends_names: friends_names, nonFriends: nonFriends, @@ -93,6 +101,7 @@ const ProfileController = { } ); }, + // AddFriend function in ProfileController AddFriend: (req, res) => { const currentUserEmail = req.session.user.email; From 701f1316c34ac59bb9a66c68c86eec16b7051b7c Mon Sep 17 00:00:00 2001 From: Alex Buzea Date: Mon, 19 Jun 2023 16:03:52 +0100 Subject: [PATCH 64/70] fixed bug where when adding a friend and removing another one, it was resetting the add friend and could send request again when shouldn't --- app.js | 114 ++++++++++++++++++++-------------------- controllers/profile.js | 37 +++++-------- views/profile/index.hbs | 1 + 3 files changed, 72 insertions(+), 80 deletions(-) diff --git a/app.js b/app.js index 3ac1e5b60..8d490c0cf 100644 --- a/app.js +++ b/app.js @@ -16,6 +16,7 @@ const { handlebars } = require("hbs"); const moment = require("./public/javascripts/moment.min"); const app = express(); + // view engine setup app.set("views", path.join(__dirname, "views")); app.set("view engine", "hbs"); @@ -37,60 +38,61 @@ app.use( expires: 600000, }, }) -); - -// clear the cookies after user logs out -app.use((req, res, next) => { - if (req.cookies.user_sid && !req.session.user) { - res.clearCookie("user_sid"); - req.session.friendRequestSent = null; // Clear the friendRequestSent value - } - next(); - }); - -// middleware function to check for logged-in users -const sessionChecker = (req, res, next) => { - if (!req.session.user && !req.cookies.user_sid) { - res.redirect("/sessions/new"); - } else { + ); + + // clear the cookies and session after user logs out + app.use((req, res, next) => { + if (req.cookies.user_sid && !req.session.user) { + res.clearCookie("user_sid"); + req.session.friendRequestSent = null; // Clear the friendRequestSent value + } next(); - } -}; - -// route setup -app.use("/", homeRouter); -app.use("/posts", sessionChecker, postsRouter); -app.use("/sessions", sessionsRouter); -app.use("/users", usersRouter); -app.use("/profile", profileRouter); -app.use("/:postId", sessionChecker, postsRouter); -app.use("/:postId/comments", sessionChecker, commentsRouter); -app.use("/:postId/like", sessionChecker, postsRouter); - - -// catch 404 and forward to error handler -app.use((req, res, next) => { - console.log("Hellooooooo"); - next(createError(404)); -}); - -app.use((req, res, next) => { - console.log("Hellooooooo"); - next(createError(400)); -}); - -// error handler -app.use((err, req, res) => { - // set locals, only providing error in development - res.locals.message = err.message; - res.locals.error = req.app.get("env") === "development" ? err : {}; - - // render the error page - res.status(err.status || 500); - res.render("error"); -}); - -handlebars.registerHelper("timeAgo", (date) => moment(date).fromNow()); - -module.exports = app; -module.exports.sessionChecker = sessionChecker; + }); + + // middleware function to check for logged-in users + const sessionChecker = (req, res, next) => { + if (!req.session.user && !req.cookies.user_sid) { + res.redirect("/sessions/new"); + } else { + next(); + } + }; + + // route setup + app.use("/", homeRouter); + app.use("/posts", sessionChecker, postsRouter); + app.use("/sessions", sessionsRouter); + app.use("/users", usersRouter); + app.use("/profile", profileRouter); + app.use("/:postId", sessionChecker, postsRouter); + app.use("/:postId/comments", sessionChecker, commentsRouter); + app.use("/:postId/like", sessionChecker, postsRouter); + + + // catch 404 and forward to error handler + app.use((req, res, next) => { + console.log("Hellooooooo"); + next(createError(404)); + }); + + app.use((req, res, next) => { + console.log("Hellooooooo"); + next(createError(400)); + }); + + // error handler + app.use((err, req, res) => { + // set locals, only providing error in development + res.locals.message = err.message; + res.locals.error = req.app.get("env") === "development" ? err : {}; + + // render the error page + res.status(err.status || 500); + res.render("error"); + }); + + handlebars.registerHelper("timeAgo", (date) => moment(date).fromNow()); + + module.exports = app; + module.exports.sessionChecker = sessionChecker; + \ No newline at end of file diff --git a/controllers/profile.js b/controllers/profile.js index f8ca38ec4..e363785af 100644 --- a/controllers/profile.js +++ b/controllers/profile.js @@ -45,10 +45,13 @@ const ProfileController = { }); }); }, + + + RemoveFriend: (req, res) => { const currentUser = req.session.user; const friendEmail = req.body.friendEmail; - + // Remove the friend from the current user's friends list User.findOneAndUpdate( { email: currentUser.email }, @@ -58,43 +61,28 @@ const ProfileController = { if (err) { throw err; } - + // Remove the current user from the friend's friends list User.findOneAndUpdate( { email: friendEmail }, { $pull: { friends: currentUser.email } }, { new: true }, - (err, updatedFriendUser) => { + (err) => { if (err) { throw err; } - + // Re-query the user data with updated friends list - User.find({}, (err, allUsers) => { + User.find({}, (err) => { if (err) { throw err; } - + // Update the friend lists in the session currentUser.friends = updatedUser.friends; - updatedFriendUser.friends = updatedFriendUser.friends; - - const friends_names = allUsers.filter((user) => - updatedUser.friends.includes(user.email) - ); - - const nonFriends = allUsers.filter( - (user) => - !updatedUser.friends.includes(user.email) && - user.email !== updatedUser.email - ); - - // Render the updated data - res.render("profile/index", { - friends_names: friends_names, - nonFriends: nonFriends, - friendRequests: [], - }); + + // Redirect to the Index route to render the updated data + res.redirect('/profile'); }); } ); @@ -102,6 +90,7 @@ const ProfileController = { ); }, + // AddFriend function in ProfileController AddFriend: (req, res) => { const currentUserEmail = req.session.user.email; diff --git a/views/profile/index.hbs b/views/profile/index.hbs index caa977969..85becca15 100644 --- a/views/profile/index.hbs +++ b/views/profile/index.hbs @@ -4,6 +4,7 @@ +

Friends

    From ddd8e985bcb4d70947a091d4d2a5515fa31d90d4 Mon Sep 17 00:00:00 2001 From: "kate.dollete" Date: Mon, 19 Jun 2023 16:58:31 +0100 Subject: [PATCH 65/70] Update user seed data --- models/user.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/models/user.js b/models/user.js index 4469fbf24..633005cd5 100644 --- a/models/user.js +++ b/models/user.js @@ -65,7 +65,7 @@ const usersData = [ lastName: "Buzea", email: "alex@alex.com", password: "$2b$10$1xNFZD.MzQ50PA79QMs/TOhCQAa1wnih/IufG0AQ0lRKxfKg.ed7W", // password1 - friends: ["joe@joe.com", "chris@chris.com", "sue@sue.com"], + friends: ["joe@joe.com", "chris@chris.com", "sue@sue.com", "test@test.com"], }, { firstName: "Joe", @@ -77,6 +77,7 @@ const usersData = [ "chris@chris.com", "peter@peter.com", "sue@sue.com", + "test@test.com", ], }, { @@ -84,35 +85,47 @@ const usersData = [ lastName: "Robinson", email: "chris@chris.com", password: "$2b$10$Zk40SU.AGeyaQctsEjwRA.cjD6pKb7kqoWDciHFpQm0zCKn4uxrt.", // password1 - friends: ["joe@joe.com", "alex@alex.com", "sue@sue.com"], + friends: ["joe@joe.com", "alex@alex.com", "sue@sue.com", "test@test.com"], }, { firstName: "Sue", lastName: "Mason", email: "sue@sue.com", password: "$2b$10$STIfhgfqBgRI7ocwv5w0ZOH6RM8aLMIdPYiC/URiqqs7NG2HEs/vO", // password1 - friends: ["alex@alex.com", "chris@chris.com", "joe@joe.com"], + friends: [ + "alex@alex.com", + "chris@chris.com", + "joe@joe.com", + "test@test.com", + ], }, { firstName: "Susie", lastName: "Smith", email: "susie@susie.com", password: "$2b$10$YzSIz6AGYa8aM/38S4mPSuaFhBcIF9ziA0Vm2MA84ZUJBx5KVHpG.", // password1 - friends: [], + friends: ["test@test.com"], }, { firstName: "Peter", lastName: "Smith", email: "peter@peter.com", password: "$2b$10$g9/cBqkFlsE.FLc1wH6kPOf0aUnKpEZjUAaxLcIP9iCOLAc0F4OAG", // password1 - friends: ["joe@joe.com"], + friends: ["joe@joe.com", "test@test.com"], }, { firstName: "Test", lastName: "Test", email: "test@test.com", password: "$2b$10$T7gwCG2ZcVmgB8SCaLpGf.BvTjEX70yzgbh3mPT6gZ5oS3cK/GGUq", // Testtest1 - friends: [], + friends: [ + "alex@alex.com", + "joe@joe.com", + "chris@chris.com", + "sue@sue.com", + "susie@susie.com", + "peter@peter.com", + ], }, ]; From 8e66ad151f3708d81892e66efbccd7e06440249e Mon Sep 17 00:00:00 2001 From: Patrick Hagan Date: Fri, 16 Jun 2023 12:28:03 +0100 Subject: [PATCH 66/70] added integration tests, started structing test folders, added test notes for tickets to raise --- Test Documents/notes.md | 0 .../integration/home_page/home_page_spec.js | 18 ++++++++++++++++++ cypress/integration/home_page_spec.js | 6 ------ .../register_section/register_section_spec.js | 19 +++++++++++++++++++ 4 files changed, 37 insertions(+), 6 deletions(-) create mode 100644 Test Documents/notes.md create mode 100644 cypress/integration/home_page/home_page_spec.js delete mode 100644 cypress/integration/home_page_spec.js create mode 100644 cypress/integration/register_section/register_section_spec.js diff --git a/Test Documents/notes.md b/Test Documents/notes.md new file mode 100644 index 000000000..e69de29bb diff --git a/cypress/integration/home_page/home_page_spec.js b/cypress/integration/home_page/home_page_spec.js new file mode 100644 index 000000000..ab7394310 --- /dev/null +++ b/cypress/integration/home_page/home_page_spec.js @@ -0,0 +1,18 @@ +describe("Home Page", () => { + it("has a title", () => { + cy.visit("/"); + cy.get(".title").should("contain", "Acebook"); + }); +}); + +describe("Home Page - Login Button Check", () => { + it("has a link to sign-up", () => { + cy.get('a[href="/users/new"]').should('be.visible'); + }); +}); + +describe("Home Page - Sign-up Button Check", () => { + it("has a link to sign-up", () => { + cy.get('a[href="/sessions/new"]').should('be.visible'); + }); +}); \ No newline at end of file diff --git a/cypress/integration/home_page_spec.js b/cypress/integration/home_page_spec.js deleted file mode 100644 index e5fc9fdb9..000000000 --- a/cypress/integration/home_page_spec.js +++ /dev/null @@ -1,6 +0,0 @@ -describe("Home page", () => { - it("has a title", () => { - cy.visit("/"); - cy.get(".title").should("contain", "Acebook"); - }); -}); diff --git a/cypress/integration/register_section/register_section_spec.js b/cypress/integration/register_section/register_section_spec.js new file mode 100644 index 000000000..a81f86c72 --- /dev/null +++ b/cypress/integration/register_section/register_section_spec.js @@ -0,0 +1,19 @@ +// This test suite covers the funtionality of the landing page, log-in page and sign-up page +// End-To-End - Happy Paths only + +describe("Home Page", () => { + it("has loaded correctly", () => { + cy.visit("/"); + cy.get(".title").should("contain", "Acebook"); + cy.get('a[href="/users/new"]').should('be.visible'); + cy.get('a[href="/sessions/new"]').should('be.visible'); + }); +}); + +describe("Home Page > Sign-up Page", () => { + it("redirects to sign-up page", () => { + cy.get('a[href="/users/new"]').click() + cy.url().should("include", "/users/new") + }); +}); + From e3c5fe125a050e2939d84cce39589a08d68aec26 Mon Sep 17 00:00:00 2001 From: Patrick Hagan Date: Fri, 16 Jun 2023 15:53:19 +0100 Subject: [PATCH 67/70] added tests --- Test Documents/notes.md | 24 ++++++++++ .../integration/home_page/home_page_spec.js | 6 ++- cypress/integration/login_page/log_in_spec.js | 0 .../register_section/register_section_spec.js | 21 +++++++++ .../sign_up_page/sign_up_page_spec.js | 44 +++++++++++++++++++ .../user_can_sign_up_spec.js | 6 +-- ...user_cant_sign_up_twice_with_same_email.js | 0 .../timeline_page/timeline_page_spec.js | 21 +++++++++ 8 files changed, 117 insertions(+), 5 deletions(-) create mode 100644 cypress/integration/login_page/log_in_spec.js create mode 100644 cypress/integration/sign_up_page/sign_up_page_spec.js rename cypress/integration/{ => sign_up_page}/user_can_sign_up_spec.js (67%) rename cypress/integration/{ => sign_up_page}/user_cant_sign_up_twice_with_same_email.js (100%) create mode 100644 cypress/integration/timeline_page/timeline_page_spec.js diff --git a/Test Documents/notes.md b/Test Documents/notes.md index e69de29bb..d84edcb49 100644 --- a/Test Documents/notes.md +++ b/Test Documents/notes.md @@ -0,0 +1,24 @@ +# Exploratory Testing Notes + +## Landing Page + +## Sign-up Page + +- Validation - should numbers be allowed in first name and second name? I believe it's standard to disallow the use of number +- Validation - Should the names be allowed with any capitalization and then be manipulated to always follow capital first letter structure? +- Validation - Check database for duplicate emails +- Feature suggestion - After signing up successfully, an alert pops up after the redirect to the login page that lets the user know their account was created successfully + +## Single Post + +- Validation on commenting - Currently can submit empty comment +- Feature Recommendation - User can remove their like from a post + +### CSS + +- Fixed size for the comment text box? + +## Profile + +- BUG - Name coming through as 'Name' instead of user name +- Feature Missing / Bug - Reject friend request \ No newline at end of file diff --git a/cypress/integration/home_page/home_page_spec.js b/cypress/integration/home_page/home_page_spec.js index ab7394310..e903e9a41 100644 --- a/cypress/integration/home_page/home_page_spec.js +++ b/cypress/integration/home_page/home_page_spec.js @@ -1,3 +1,5 @@ +//Test Suite that checks the expected elements are on the page upon loading + describe("Home Page", () => { it("has a title", () => { cy.visit("/"); @@ -5,8 +7,8 @@ describe("Home Page", () => { }); }); -describe("Home Page - Login Button Check", () => { - it("has a link to sign-up", () => { +describe("Home Page - Log-in Button Check", () => { + it("has a link to log-in", () => { cy.get('a[href="/users/new"]').should('be.visible'); }); }); diff --git a/cypress/integration/login_page/log_in_spec.js b/cypress/integration/login_page/log_in_spec.js new file mode 100644 index 000000000..e69de29bb diff --git a/cypress/integration/register_section/register_section_spec.js b/cypress/integration/register_section/register_section_spec.js index a81f86c72..86acd2e0e 100644 --- a/cypress/integration/register_section/register_section_spec.js +++ b/cypress/integration/register_section/register_section_spec.js @@ -17,3 +17,24 @@ describe("Home Page > Sign-up Page", () => { }); }); +describe("Sign-up Page", () => { + it("allows user to create account", () =>{ + cy.get("#firstName").type("Cypress"); + cy.get("#lastName").type("Test"); + cy.get("#email").type("tester@example.com"); + cy.get("#password").type("password1"); + cy.get("#submit").click(); + cy.url().should("include", "/sessions/new") + }); +}); + +describe("Log-in Page", () => { + it("allows user to log in", () =>{ + cy.get("#email").type("tester@example.com"); + cy.get("#password").type("password1"); + cy.get("#submit").click(); + cy.url().should("include", "/posts"); + cy.contains("a", "New post"); + }); +}); + diff --git a/cypress/integration/sign_up_page/sign_up_page_spec.js b/cypress/integration/sign_up_page/sign_up_page_spec.js new file mode 100644 index 000000000..49358581c --- /dev/null +++ b/cypress/integration/sign_up_page/sign_up_page_spec.js @@ -0,0 +1,44 @@ +//Test Suite that checks the expected elements are on the page upon loading + +describe("Sign-up Page", () =>{ + it("has a title", () =>{ + cy.visit("/users/new"); + cy.get("h1").should("contain", "Acebook"); + }); +}); + +describe("Sign-up Page - Login Button Check", () => { + it("has a link to sign-up", () => { + cy.get('a[href="/sessions/new"]').should('be.visible'); + }); +}); + +describe("Sign-up Page - Return to Home Page Button Check", () => { + it("has a link to return to the home page", () => { + cy.get("#home-link").should('be.visible'); + }); +}); + +describe("Sign-up Page - First Name Check", () => { + it("has a text box for inputting first name", () => { + cy.get("#firstName").should("be.visible") + }); +}); + +describe("Sign-up Page - Last Name Check", () => { + it("has a text box for inputting last name", () => { + cy.get("#lastName").should("be.visible") + }); +}); + +describe("Sign-up Page - E-mail Check", () => { + it("has a text box for inputting e-mail address", () => { + cy.get("#email").should("be.visible") + }); +}); + +describe("Sign-up Page - Password Check", () => { + it("has a text box for inputting password", () => { + cy.get("#password").should("be.visible") + }); +}); \ No newline at end of file diff --git a/cypress/integration/user_can_sign_up_spec.js b/cypress/integration/sign_up_page/user_can_sign_up_spec.js similarity index 67% rename from cypress/integration/user_can_sign_up_spec.js rename to cypress/integration/sign_up_page/user_can_sign_up_spec.js index baec141fe..6012386ef 100644 --- a/cypress/integration/user_can_sign_up_spec.js +++ b/cypress/integration/sign_up_page/user_can_sign_up_spec.js @@ -2,9 +2,9 @@ describe("Registration", () => { it("A user signs up and is redirected to sign in", () => { // sign up cy.visit("/users/new"); - cy.get("#firstName").type("Homer"); - cy.get("#lastName").type("Simpson"); - cy.get("#email").type("someone@example.com"); + cy.get("#firstName").type("Cypress"); + cy.get("#lastName").type("Test"); + cy.get("#email").type("tester@example.com"); cy.get("#password").type("password1"); cy.get("#submit").click(); diff --git a/cypress/integration/user_cant_sign_up_twice_with_same_email.js b/cypress/integration/sign_up_page/user_cant_sign_up_twice_with_same_email.js similarity index 100% rename from cypress/integration/user_cant_sign_up_twice_with_same_email.js rename to cypress/integration/sign_up_page/user_cant_sign_up_twice_with_same_email.js diff --git a/cypress/integration/timeline_page/timeline_page_spec.js b/cypress/integration/timeline_page/timeline_page_spec.js new file mode 100644 index 000000000..29d109940 --- /dev/null +++ b/cypress/integration/timeline_page/timeline_page_spec.js @@ -0,0 +1,21 @@ +//Test Suite that checks the expected elements are on the page upon loading + +describe("Precondition - Log-in", () => { + it("user logging in for test suite") + cy.visit("/") + cy.get("#email").type("tester@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + cy.url().should("include", "/posts"); +}) +describe("Timeline Page", () => { + it("has a title", () => { + cy.get("h1").should("contain", 'Timeline') + }); +}); + +describe("Timeline Page - Logout Button Check", () => { + it("has a logout button", () => { + cy.get("input[type='submit']").should("be.visible") + }); +}); \ No newline at end of file From 2bc81c8840357f8eac401eb8969955fb936051f3 Mon Sep 17 00:00:00 2001 From: Patrick Hagan Date: Mon, 19 Jun 2023 16:46:54 +0100 Subject: [PATCH 68/70] added tests --- Test Documents/notes.md | 4 +- .../user_redirects_to_login_page_spec.js | 7 ++++ .../user_redirects_to_sign_up_spec.js | 7 ++++ cypress/integration/login_page/log_in_spec.js | 40 +++++++++++++++++++ ...r_can't_login_with_invalid_details_spec.js | 12 ++++++ ..._can't_login_with_invalid_password_spec.js | 12 ++++++ .../user_can_successfully_log_in_spec.js | 12 ++++++ .../user_can't_post_empty_comment_spec.js | 24 +++++++++++ .../user_can_comment_on_post_spec.js | 30 ++++++++++++++ .../user_can_comment_on_their_own_post.js | 23 +++++++++++ .../user_can_log_out_from_post_page_spec.js | 20 ++++++++++ .../user_can_view_post_details_spec.js | 15 ++----- .../sign_up_page/sign_up_page_spec.js | 2 +- .../user_has_to_fill_in_fields_sign_up.js | 0 .../post_can_be_liked_multiple_times_spec.js | 30 ++++++++++++++ .../timeline_page/timeline_page_spec.js | 24 ++++++++--- .../user_can't_create_empty_post_spec.js | 16 ++++++++ .../user_can_like_another_users_post_spec.js | 24 +++++++++++ .../user_can_like_their_own_post_spec.js | 19 +++++++++ ...ser_can_log_out_from_timeline_page_spec.js | 14 +++++++ .../user_can_submit_posts_spec.js | 18 +++++++++ 21 files changed, 334 insertions(+), 19 deletions(-) create mode 100644 cypress/integration/home_page/user_redirects_to_login_page_spec.js create mode 100644 cypress/integration/home_page/user_redirects_to_sign_up_spec.js create mode 100644 cypress/integration/login_page/user_can't_login_with_invalid_details_spec.js create mode 100644 cypress/integration/login_page/user_can't_login_with_invalid_password_spec.js create mode 100644 cypress/integration/login_page/user_can_successfully_log_in_spec.js create mode 100644 cypress/integration/post_page/user_can't_post_empty_comment_spec.js create mode 100644 cypress/integration/post_page/user_can_comment_on_post_spec.js create mode 100644 cypress/integration/post_page/user_can_comment_on_their_own_post.js create mode 100644 cypress/integration/post_page/user_can_log_out_from_post_page_spec.js rename cypress/integration/{ => post_page}/user_can_view_post_details_spec.js (52%) rename cypress/integration/{ => sign_up_page}/user_has_to_fill_in_fields_sign_up.js (100%) create mode 100644 cypress/integration/timeline_page/post_can_be_liked_multiple_times_spec.js create mode 100644 cypress/integration/timeline_page/user_can't_create_empty_post_spec.js create mode 100644 cypress/integration/timeline_page/user_can_like_another_users_post_spec.js create mode 100644 cypress/integration/timeline_page/user_can_like_their_own_post_spec.js create mode 100644 cypress/integration/timeline_page/user_can_log_out_from_timeline_page_spec.js create mode 100644 cypress/integration/timeline_page/user_can_submit_posts_spec.js diff --git a/Test Documents/notes.md b/Test Documents/notes.md index d84edcb49..91b773967 100644 --- a/Test Documents/notes.md +++ b/Test Documents/notes.md @@ -8,6 +8,7 @@ - Validation - Should the names be allowed with any capitalization and then be manipulated to always follow capital first letter structure? - Validation - Check database for duplicate emails - Feature suggestion - After signing up successfully, an alert pops up after the redirect to the login page that lets the user know their account was created successfully +- HTML - Consistency with element tagging - Title has a class on home page but not on sign up ## Single Post @@ -20,5 +21,4 @@ ## Profile -- BUG - Name coming through as 'Name' instead of user name -- Feature Missing / Bug - Reject friend request \ No newline at end of file +- BUG - Name coming through as 'Name' instead of user name \ No newline at end of file diff --git a/cypress/integration/home_page/user_redirects_to_login_page_spec.js b/cypress/integration/home_page/user_redirects_to_login_page_spec.js new file mode 100644 index 000000000..383fb8f4b --- /dev/null +++ b/cypress/integration/home_page/user_redirects_to_login_page_spec.js @@ -0,0 +1,7 @@ +describe("Home Page - Log-in Redirect", () => { + it("log-in button redirects", () => { + cy.visit("/") + cy.get('a[href="/sessions/new"]').click(); + cy.url().should("contain", "/sessions/new") + }); +}); \ No newline at end of file diff --git a/cypress/integration/home_page/user_redirects_to_sign_up_spec.js b/cypress/integration/home_page/user_redirects_to_sign_up_spec.js new file mode 100644 index 000000000..3703ef448 --- /dev/null +++ b/cypress/integration/home_page/user_redirects_to_sign_up_spec.js @@ -0,0 +1,7 @@ +describe("Home Page - Sign-up Redirect", () => { + it("sign-up button redirects", () => { + cy.visit("/") + cy.get('a[href="/users/new"]').click(); + cy.url().should("contain", "/users/new") + }); +}); \ No newline at end of file diff --git a/cypress/integration/login_page/log_in_spec.js b/cypress/integration/login_page/log_in_spec.js index e69de29bb..3e00d77c3 100644 --- a/cypress/integration/login_page/log_in_spec.js +++ b/cypress/integration/login_page/log_in_spec.js @@ -0,0 +1,40 @@ +//Test Suite that checks the expected elements are on the page upon loading + + +describe("Log-in Page", () =>{ + it("has a title", () =>{ + cy.visit("/sessions/new"); + cy.get("h1").should("contain", "Acebook"); + }); +}); + +describe("Log-in Page - Sign-Up Button Check", () => { + it("has a link to sign-up", () => { + cy.get('a[href="/users/new"]').should('be.visible'); + }); +}); + +describe("Log-in Page - Return to Home Page Button Check", () => { + it("has a link to return to the home page", () => { + cy.get("#home-link").should('be.visible'); + }); +}); + + +describe("Log-in Page - E-mail Check", () => { + it("has a text box for inputting e-mail address", () => { + cy.get("#email").should("be.visible") + }); +}); + +describe("Log-in Page - Password Check", () => { + it("has a text box for inputting password", () => { + cy.get("#password").should("be.visible") + }); +}); + +describe("Log-in Page - Log-in Button Check", () => { + it("has a button for logging in", () => { + cy.get("#submit").should("be.visible") + }); +}); \ No newline at end of file diff --git a/cypress/integration/login_page/user_can't_login_with_invalid_details_spec.js b/cypress/integration/login_page/user_can't_login_with_invalid_details_spec.js new file mode 100644 index 000000000..b163e9a72 --- /dev/null +++ b/cypress/integration/login_page/user_can't_login_with_invalid_details_spec.js @@ -0,0 +1,12 @@ +describe("Log-in Page - Log-in Functionality - Wrong Details", () => { + it("user can't log-in successfully without correct details", () => { + + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("tet@test.com"); + cy.get("#password").type("123"); + cy.get("#submit").click(); + + cy.url().should("contain", "/sessions/new") + }); +}); \ No newline at end of file diff --git a/cypress/integration/login_page/user_can't_login_with_invalid_password_spec.js b/cypress/integration/login_page/user_can't_login_with_invalid_password_spec.js new file mode 100644 index 000000000..56f23d033 --- /dev/null +++ b/cypress/integration/login_page/user_can't_login_with_invalid_password_spec.js @@ -0,0 +1,12 @@ +describe("Log-in Page - Log-in Functionality - Wrong Password", () => { + it("user can't log-in successfully without correct password", () => { + + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("123"); + cy.get("#submit").click(); + + cy.url().should("contain", "/sessions/new") + }); +}); \ No newline at end of file diff --git a/cypress/integration/login_page/user_can_successfully_log_in_spec.js b/cypress/integration/login_page/user_can_successfully_log_in_spec.js new file mode 100644 index 000000000..e8e936021 --- /dev/null +++ b/cypress/integration/login_page/user_can_successfully_log_in_spec.js @@ -0,0 +1,12 @@ +describe("Log-in Page - Log-in Functionality", () => { + it("user can log-in successfully", () => { + + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + cy.url().should("contain", "/posts") + }); +}); \ No newline at end of file diff --git a/cypress/integration/post_page/user_can't_post_empty_comment_spec.js b/cypress/integration/post_page/user_can't_post_empty_comment_spec.js new file mode 100644 index 000000000..58da79199 --- /dev/null +++ b/cypress/integration/post_page/user_can't_post_empty_comment_spec.js @@ -0,0 +1,24 @@ +// Not yet implemented + +describe("Post Page - Comment Functionality - Null Value", () => { + it("user can't post an empty comment", () => { + + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + // submit a post + cy.visit("/posts"); + cy.contains("New post").click(); + + cy.get("#new-post-form").find('[type="text"]').type("Testing Comment Function - Empty Comment"); + cy.get("#new-post-form").submit(); + + cy.contains("Testing Comment Function - Empty Comment").click(); + + cy.get("button[type='submit']").click(); + cy.get(".comments").should("be.empty") + }); +}); \ No newline at end of file diff --git a/cypress/integration/post_page/user_can_comment_on_post_spec.js b/cypress/integration/post_page/user_can_comment_on_post_spec.js new file mode 100644 index 000000000..c99a0ce56 --- /dev/null +++ b/cypress/integration/post_page/user_can_comment_on_post_spec.js @@ -0,0 +1,30 @@ +describe("Post Page - Comment Functionality", () => { + it("user can comment on other users post", () => { + + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + // submit a post + cy.visit("/posts"); + cy.contains("New post").click(); + + cy.get("#new-post-form").find('[type="text"]').type("Testing Comment Function - Other User"); + cy.get("#new-post-form").submit(); + + cy.get(".posts").should("contain", "Testing Comment Function - Other User"); + + cy.get("input[type='submit']").click(); + cy.get("#email").type("sue@sue.com"); + cy.get("#password").type("password1"); + cy.get("#submit").click(); + + cy.contains("Testing Comment Function - Other User").click(); + + cy.get('textarea').type("Testing Comment - Other User"); + cy.get("button[type='submit']").click(); + cy.get(".comments").should("contain", "Testing Comment - Other User"); + }); +}); \ No newline at end of file diff --git a/cypress/integration/post_page/user_can_comment_on_their_own_post.js b/cypress/integration/post_page/user_can_comment_on_their_own_post.js new file mode 100644 index 000000000..6078e5e59 --- /dev/null +++ b/cypress/integration/post_page/user_can_comment_on_their_own_post.js @@ -0,0 +1,23 @@ +describe("Post Page - Comment Functionality", () => { + it("user can comment on post", () => { + + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + // submit a post + cy.visit("/posts"); + cy.contains("New post").click(); + + cy.get("#new-post-form").find('[type="text"]').type("Testing Comment Function"); + cy.get("#new-post-form").submit(); + + cy.contains("Testing Comment Function").click(); + + cy.get('textarea').type("Testing Comment"); + cy.get("button[type='submit']").click(); + cy.get(".comments").should("contain", "Testing Comment"); + }); +}); \ No newline at end of file diff --git a/cypress/integration/post_page/user_can_log_out_from_post_page_spec.js b/cypress/integration/post_page/user_can_log_out_from_post_page_spec.js new file mode 100644 index 000000000..1bc216e40 --- /dev/null +++ b/cypress/integration/post_page/user_can_log_out_from_post_page_spec.js @@ -0,0 +1,20 @@ +describe("Post Page - Log Out Functionality", () => { + it("user can log out from post page", () => { + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + // submit a post + cy.visit("/posts"); + cy.contains("New post").click(); + + cy.get("#new-post-form").find('[type="text"]').type("Testing Post Details"); + cy.get("#new-post-form").submit(); + + cy.contains("Testing Post Details").click(); + cy.get("input[type='submit']").click(); + cy.url().should("include", "/sessions/new") + }); +}); \ No newline at end of file diff --git a/cypress/integration/user_can_view_post_details_spec.js b/cypress/integration/post_page/user_can_view_post_details_spec.js similarity index 52% rename from cypress/integration/user_can_view_post_details_spec.js rename to cypress/integration/post_page/user_can_view_post_details_spec.js index 995741400..7c97e35f5 100644 --- a/cypress/integration/user_can_view_post_details_spec.js +++ b/cypress/integration/post_page/user_can_view_post_details_spec.js @@ -1,17 +1,9 @@ describe("Feed Page", () => { - it("can view post on main feed", () => { - // sign up - cy.visit("/users/new"); - cy.get('#firstName').type("Someone"); - cy.get('#lastName').type("Someone") - cy.get("#email").type("someone@example.com"); - cy.get("#password").type("password1"); - cy.get("#submit").click(); - + it("can view post details", () => { // sign in cy.visit("/sessions/new"); - cy.get("#email").type("someone@example.com"); - cy.get("#password").type("password1"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); cy.get("#submit").click(); // submit a post @@ -23,5 +15,6 @@ describe("Feed Page", () => { cy.contains("Testing Post Details").click(); cy.get('h1').should("contain", "Testing Post Details"); + cy.get('p').should("contain", "Author: Test Test") }); }); \ No newline at end of file diff --git a/cypress/integration/sign_up_page/sign_up_page_spec.js b/cypress/integration/sign_up_page/sign_up_page_spec.js index 49358581c..541328d59 100644 --- a/cypress/integration/sign_up_page/sign_up_page_spec.js +++ b/cypress/integration/sign_up_page/sign_up_page_spec.js @@ -8,7 +8,7 @@ describe("Sign-up Page", () =>{ }); describe("Sign-up Page - Login Button Check", () => { - it("has a link to sign-up", () => { + it("has a link to log-in", () => { cy.get('a[href="/sessions/new"]').should('be.visible'); }); }); diff --git a/cypress/integration/user_has_to_fill_in_fields_sign_up.js b/cypress/integration/sign_up_page/user_has_to_fill_in_fields_sign_up.js similarity index 100% rename from cypress/integration/user_has_to_fill_in_fields_sign_up.js rename to cypress/integration/sign_up_page/user_has_to_fill_in_fields_sign_up.js diff --git a/cypress/integration/timeline_page/post_can_be_liked_multiple_times_spec.js b/cypress/integration/timeline_page/post_can_be_liked_multiple_times_spec.js new file mode 100644 index 000000000..19600bed8 --- /dev/null +++ b/cypress/integration/timeline_page/post_can_be_liked_multiple_times_spec.js @@ -0,0 +1,30 @@ +describe("Like Functionality", () => { + it("can like their own post", () => { + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + // submit a post + cy.visit("/posts"); + cy.get("a[href='/posts/new']").click() + cy.get("#new-post-form").find('[type="text"]').type("Testing Multiple Likes On Single Post"); + cy.get("#new-post-form").submit(); + + cy.get("ul > li:first-child button").click(); + cy.get("ul > li:first-child span").should("contain", '1'); + cy.get("ul > li:first-child span").should("not.have.value", '2'); + + cy.get("input[type='submit']").click(); + cy.get("#email").type("sue@sue.com"); + cy.get("#password").type("password1"); + cy.get("#submit").click(); + + cy.get("ul > li:first-child button").click(); + cy.get("ul > li:first-child span").should("contain", '2'); + cy.get("ul > li:first-child span").should("not.have.value", '1'); + + + }); +}); \ No newline at end of file diff --git a/cypress/integration/timeline_page/timeline_page_spec.js b/cypress/integration/timeline_page/timeline_page_spec.js index 29d109940..21aedd872 100644 --- a/cypress/integration/timeline_page/timeline_page_spec.js +++ b/cypress/integration/timeline_page/timeline_page_spec.js @@ -1,13 +1,15 @@ //Test Suite that checks the expected elements are on the page upon loading describe("Precondition - Log-in", () => { - it("user logging in for test suite") - cy.visit("/") - cy.get("#email").type("tester@test.com"); + it("user logging in for test suite", () =>{ + + cy.visit("/sessions/new") + cy.get("#email").type("test@test.com"); cy.get("#password").type("Testtest1"); cy.get("#submit").click(); - cy.url().should("include", "/posts"); -}) + cy.url().should("include", "/posts"); + }); +}); describe("Timeline Page", () => { it("has a title", () => { cy.get("h1").should("contain", 'Timeline') @@ -18,4 +20,16 @@ describe("Timeline Page - Logout Button Check", () => { it("has a logout button", () => { cy.get("input[type='submit']").should("be.visible") }); +}); + +describe("Timeline Page - My Profile Button Check", () => { + it("has a my profile button", () => { + cy.get("a[href='../profile']").should("be.visible") + }); +}); + +describe("Timeline Page - New Post Button Check", () => { + it("has a new post button", () => { + cy.get("a[href='/posts/new']").should("be.visible") + }); }); \ No newline at end of file diff --git a/cypress/integration/timeline_page/user_can't_create_empty_post_spec.js b/cypress/integration/timeline_page/user_can't_create_empty_post_spec.js new file mode 100644 index 000000000..172c78b64 --- /dev/null +++ b/cypress/integration/timeline_page/user_can't_create_empty_post_spec.js @@ -0,0 +1,16 @@ +describe("Timeline Page - Empty Post Check", () => { + it("user can't submit a post with no content", () => { + + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + // submit a post + cy.visit("/posts"); + cy.contains("New post").click(); + + cy.get("#new-post-form").submit(); + cy.url().should("contain", "/posts/new") + }); +}); diff --git a/cypress/integration/timeline_page/user_can_like_another_users_post_spec.js b/cypress/integration/timeline_page/user_can_like_another_users_post_spec.js new file mode 100644 index 000000000..671fac519 --- /dev/null +++ b/cypress/integration/timeline_page/user_can_like_another_users_post_spec.js @@ -0,0 +1,24 @@ +describe("Timeline - Like Functionality - Interacting with other user", () => { + it("can like another user's post", () => { + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + // submit a post + cy.visit("/posts"); + cy.get("a[href='/posts/new']").click() + cy.get("#new-post-form").find('[type="text"]').type("Testing Like Functionality - Other User"); + cy.get("#new-post-form").submit(); + + cy.get("input[type='submit']").click(); + cy.get("#email").type("sue@sue.com"); + cy.get("#password").type("password1"); + cy.get("#submit").click(); + + cy.get("ul > li:first-child button").click(); + cy.get("ul > li:first-child span").should("contain", '1'); + cy.get("ul > li:first-child span").should("not.have.value", '2'); + }); +}); \ No newline at end of file diff --git a/cypress/integration/timeline_page/user_can_like_their_own_post_spec.js b/cypress/integration/timeline_page/user_can_like_their_own_post_spec.js new file mode 100644 index 000000000..4b5d488ac --- /dev/null +++ b/cypress/integration/timeline_page/user_can_like_their_own_post_spec.js @@ -0,0 +1,19 @@ +describe("Timeline - Like Functionality", () => { + it("can like their own post", () => { + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + // submit a post + cy.visit("/posts"); + cy.get("a[href='/posts/new']").click() + cy.get("#new-post-form").find('[type="text"]').type("Testing Like Functionality"); + cy.get("#new-post-form").submit(); + + cy.get("ul > li:first-child button").click(); + cy.get("ul > li:first-child span").should("contain", '1'); + cy.get("ul > li:first-child span").should("not.have.value", '2'); + }); +}); \ No newline at end of file diff --git a/cypress/integration/timeline_page/user_can_log_out_from_timeline_page_spec.js b/cypress/integration/timeline_page/user_can_log_out_from_timeline_page_spec.js new file mode 100644 index 000000000..60ae9806b --- /dev/null +++ b/cypress/integration/timeline_page/user_can_log_out_from_timeline_page_spec.js @@ -0,0 +1,14 @@ +describe("Timeline Page - Log Out Functionality", () => { + it("user can log out from timeline page", () => { + // sign in + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + // submit a post + cy.visit("/posts"); + cy.get("input[type='submit']").click(); + cy.url().should("include", "/sessions/new") + }); +}); \ No newline at end of file diff --git a/cypress/integration/timeline_page/user_can_submit_posts_spec.js b/cypress/integration/timeline_page/user_can_submit_posts_spec.js new file mode 100644 index 000000000..ab973185d --- /dev/null +++ b/cypress/integration/timeline_page/user_can_submit_posts_spec.js @@ -0,0 +1,18 @@ +describe("Timeline", () => { + it("can submit posts, when signed in, and view them", () => { + + cy.visit("/sessions/new"); + cy.get("#email").type("test@test.com"); + cy.get("#password").type("Testtest1"); + cy.get("#submit").click(); + + // submit a post + cy.visit("/posts"); + cy.contains("New post").click(); + + cy.get("#new-post-form").find('[type="text"]').type("Successful Post Testing"); + cy.get("#new-post-form").submit(); + + cy.get(".posts").should("contain", "Successful Post Testing"); + }); +}); From f54ee931af717af988c19f21b8caf48da7cd439c Mon Sep 17 00:00:00 2001 From: Sean Wright <89875863+Swright88@users.noreply.github.com> Date: Mon, 19 Jun 2023 17:16:14 +0100 Subject: [PATCH 69/70] Added more unit tests --- spec/models/post.spec.js | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/spec/models/post.spec.js b/spec/models/post.spec.js index 3d0868bcf..5f17538ea 100644 --- a/spec/models/post.spec.js +++ b/spec/models/post.spec.js @@ -1,7 +1,9 @@ + var mongoose = require("mongoose"); require("../mongodb_helper"); var Post = require("../../models/post"); +// const { text } = require('express'); describe("Post model", () => { beforeEach((done) => { @@ -50,7 +52,7 @@ describe("Post model", () => { }); - it("can save a post", (done) => { + it("can create a post", (done) => { var post = new Post({ message: "some message" }); post.save((err) => { @@ -65,6 +67,37 @@ describe("Post model", () => { }); }); + it("can create a post with an emoji", (done) => { + var post = new Post({ message: "😂" }); + + post.save((err) => { + expect(err).toBeNull(); + + Post.find((err, posts) => { + expect(err).toBeNull(); + + expect(posts[0]).toMatchObject({ message: "😂" }); + done(); + }); + }); + }); + + it("can create a post with special characters", (done) => { + var post = new Post({ message: "!@£$%^&*()" }); + + post.save((err) => { + expect(err).toBeNull(); + + Post.find((err, posts) => { + expect(err).toBeNull(); + + expect(posts[0]).toMatchObject({ message: "!@£$%^&*()" }); + done(); + }); + }); + }); + + it("can comment on a post", (done) => { let post = new Post({ message: "message to be commented on", comments: {message: "great comment", author: "somebody"} }); post.save((err) => { @@ -116,4 +149,4 @@ describe("Post model", () => { }); }); }); -}); +}); \ No newline at end of file From 5e9d26a539412f9a07d1e5f823b13beab054eb13 Mon Sep 17 00:00:00 2001 From: Chrise Date: Fri, 16 Jun 2023 15:40:45 +0100 Subject: [PATCH 70/70] changes --- package-lock.json | 995 ++++++++++++++++++++-------------------------- package.json | 4 +- 2 files changed, 439 insertions(+), 560 deletions(-) diff --git a/package-lock.json b/package-lock.json index f1d2e56c9..81673f0a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -22,8 +22,8 @@ "mongodb": "^3.4.1", "mongoose": "^5.8.11", "morgan": "~1.9.1", - "multer": "^1.4.5-lts.1", - "nodemon": "^2.0.22" + "nodemon": "^2.0.22", + "test": "^3.3.0" }, "devDependencies": { "cypress": "^9.7.0", @@ -1990,28 +1990,16 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", - "engines": { - "node": ">=0.10.0" + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "dependencies": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/array-flatten": { @@ -2104,23 +2092,15 @@ "node": ">= 4.0.0" } }, - "node_modules/atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "bin": { - "atob": "bin/atob.js" - }, + "node_modules/available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", "engines": { - "node": ">= 4.5.0" - } - }, - "node_modules/autolinker": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", - "integrity": "sha512-zQAFO1Dlsn69eXaO6+7YZc+v84aquQKbwpzCE3L0stj56ERn9hutFxPopViLjo9G+rWwjozRhgS5KJ25Xy19cQ==", - "dependencies": { - "gulp-header": "^1.7.1" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/aws-sign2": { @@ -3330,34 +3310,19 @@ "node": ">=0.10.0" } }, - "node_modules/default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", + "node_modules/define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "dependencies": { - "kind-of": "^5.0.2" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/default-compare/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", - "dependencies": { - "is-descriptor": "^1.0.0" + "node": ">= 0.4" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/delayed-stream": { @@ -3546,12 +3511,80 @@ "is-arrayish": "^0.2.1" } }, - "node_modules/error-symbol": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/error-symbol/-/error-symbol-0.1.0.tgz", - "integrity": "sha512-VyjaKxUmeDX/m2lxm/aknsJ1GWDWUO2Ze2Ad8S1Pb9dykAm9TjSKp5CjrNyltYqZ5W/PO6TInAmO2/BfwMyT1g==", + "node_modules/es-abstract": { + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "dependencies": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "dependencies": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/escalade": { @@ -4476,23 +4509,12 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, - "node_modules/for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dependencies": { - "for-in": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" + "is-callable": "^1.1.3" } }, "node_modules/foreachasync": { @@ -4686,46 +4708,18 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-object": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/get-object/-/get-object-0.2.0.tgz", - "integrity": "sha512-7P6y6k6EzEFmO/XyUyFlXm1YLJy9xeA1x/grNV8276abX5GuwUtYgKFkRFkLixw4hf4Pz9q2vgv/8Ar42R0HuQ==", - "dependencies": { - "is-number": "^2.0.2", - "isobject": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-object/node_modules/is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-object/node_modules/isobject": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-0.2.0.tgz", - "integrity": "sha512-VaWq6XYAsbvM0wf4dyBO7WH9D7GosB7ZZlqrawI9BBiTMINBeCyqSKBa35m870MY3O4aM31pYyZi9DfGrYMJrQ==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/get-object/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "node_modules/get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "dependencies": { - "is-buffer": "^1.1.5" + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-package-type": { @@ -4752,12 +4746,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/getos": { @@ -5606,15 +5607,17 @@ "node": ">= 0.10" } }, - "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "dependencies": { - "kind-of": "^6.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-arrayish": { @@ -5645,10 +5648,31 @@ "node": ">=8" } }, - "node_modules/is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-ci": { "version": "3.0.1", @@ -5674,47 +5698,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dependencies": { - "kind-of": "^6.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-even": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-even/-/is-even-1.0.0.tgz", - "integrity": "sha512-LEhnkAdJqic4Dbqn58A0y52IXoHWlsueqQkKfMfdEnIYG8A1sm/GHidKkS6yvXlMoRrkM34csHnXQtOqcb+Jzg==", - "dependencies": { - "is-odd": "^0.1.2" + "node": ">= 0.4" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-extglob": { @@ -5788,37 +5783,18 @@ "node": ">=0.12.0" } }, - "node_modules/is-odd": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-0.1.2.tgz", - "integrity": "sha512-Ri7C2K7o5IrUU9UEI8losXJCCD/UtsaIrkR5sxIcFg4xQ9cRJXlWA5DQvTE0yDc0krvSNLsRGXN11UPS6KyfBw==", - "dependencies": { - "is-number": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-odd/node_modules/is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { - "kind-of": "^3.0.2" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-odd/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" + "node": ">= 0.4" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-path-inside": { @@ -5847,15 +5823,30 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "node_modules/is-self-closing": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-self-closing/-/is-self-closing-1.0.1.tgz", - "integrity": "sha512-E+60FomW7Blv5GXTlYee2KDrnG6srxF7Xt1SjrhWUGUEsTFIqY/nq2y3DaftCsgUMdh89V07IVfhY9KIJhLezg==", + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dependencies": { - "self-closing-tags": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.12.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-stream": { @@ -5934,12 +5925,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-windows": { + "node_modules/is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "engines": { - "node": ">=0.10.0" + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/isarray": { @@ -7928,111 +7922,44 @@ "dev": true }, "node_modules/object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "dependencies": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "dependencies": { - "is-descriptor": "^0.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "dependencies": { - "kind-of": "^3.0.2" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dependencies": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-copy/node_modules/is-descriptor/node_modules/kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "engines": { "node": ">=0.10.0" } }, - "node_modules/object-copy/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" + "node_modules/object-inspect": { + "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" } }, - "node_modules/object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "dependencies": { - "isobject": "^3.0.0" - }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, - "node_modules/object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "node_modules/object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dependencies": { - "isobject": "^3.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/on-finished": { @@ -8800,12 +8727,17 @@ } ] }, - "node_modules/safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "node_modules/safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "dependencies": { - "ret": "~0.1.10" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/safer-buffer": { @@ -9971,10 +9903,18 @@ "node": ">= 0.6" } }, - "node_modules/typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/typedarray-to-buffer": { "version": "3.1.5", @@ -12063,20 +12003,14 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==" - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==" - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==" + "array-buffer-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", + "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "requires": { + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" + } }, "array-flatten": { "version": "1.1.1", @@ -12149,18 +12083,10 @@ "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==" - }, - "autolinker": { - "version": "0.28.1", - "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-0.28.1.tgz", - "integrity": "sha512-zQAFO1Dlsn69eXaO6+7YZc+v84aquQKbwpzCE3L0stj56ERn9hutFxPopViLjo9G+rWwjozRhgS5KJ25Xy19cQ==", - "requires": { - "gulp-header": "^1.7.1" - } + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==" }, "aws-sign2": { "version": "0.7.0", @@ -13096,27 +13022,13 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, - "default-compare": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz", - "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==", - "requires": { - "kind-of": "^5.0.2" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "define-properties": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.0.tgz", + "integrity": "sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==", "requires": { - "is-descriptor": "^1.0.0" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "delayed-stream": { @@ -13262,10 +13174,66 @@ "is-arrayish": "^0.2.1" } }, - "error-symbol": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/error-symbol/-/error-symbol-0.1.0.tgz", - "integrity": "sha512-VyjaKxUmeDX/m2lxm/aknsJ1GWDWUO2Ze2Ad8S1Pb9dykAm9TjSKp5CjrNyltYqZ5W/PO6TInAmO2/BfwMyT1g==" + "es-abstract": { + "version": "1.21.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.2.tgz", + "integrity": "sha512-y/B5POM2iBnIxCiernH1G7rC9qQoM77lLIMQLuob0zhp8C56Po81+2Nj0WFKnd0pNReDTnkYryc+zhOzpEIROg==", + "requires": { + "array-buffer-byte-length": "^1.0.0", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.2.0", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.7", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", + "requires": { + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } }, "escalade": { "version": "3.1.1", @@ -13973,17 +13941,12 @@ "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", "dev": true }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==" - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha512-0OABksIGrxKK8K4kynWkQ7y1zounQxP+CWnyclVwj81KW3vlLlGUx57DKGcP/LH216GzqnstnPocF16Nxs0Ycg==", + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "requires": { - "for-in": "^1.0.1" + "is-callable": "^1.1.3" } }, "foreachasync": { @@ -14127,36 +14090,15 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, - "get-object": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/get-object/-/get-object-0.2.0.tgz", - "integrity": "sha512-7P6y6k6EzEFmO/XyUyFlXm1YLJy9xeA1x/grNV8276abX5GuwUtYgKFkRFkLixw4hf4Pz9q2vgv/8Ar42R0HuQ==", + "get-intrinsic": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.1.tgz", + "integrity": "sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==", "requires": { - "is-number": "^2.0.2", - "isobject": "^0.2.0" - }, - "dependencies": { - "is-number": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", - "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "isobject": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-0.2.0.tgz", - "integrity": "sha512-VaWq6XYAsbvM0wf4dyBO7WH9D7GosB7ZZlqrawI9BBiTMINBeCyqSKBa35m870MY3O4aM31pYyZi9DfGrYMJrQ==" - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3" } }, "get-package-type": { @@ -14174,10 +14116,14 @@ "pump": "^3.0.0" } }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==" + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } }, "getos": { "version": "3.2.1", @@ -14804,12 +14750,14 @@ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "is-array-buffer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", + "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", "requires": { - "kind-of": "^6.0.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" } }, "is-arrayish": { @@ -14834,10 +14782,19 @@ "binary-extensions": "^2.0.0" } }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==" }, "is-ci": { "version": "3.0.1", @@ -14857,37 +14814,14 @@ "has": "^1.0.3" } }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - }, - "is-even": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-even/-/is-even-1.0.0.tgz", - "integrity": "sha512-LEhnkAdJqic4Dbqn58A0y52IXoHWlsueqQkKfMfdEnIYG8A1sm/GHidKkS6yvXlMoRrkM34csHnXQtOqcb+Jzg==", + "is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "requires": { - "is-odd": "^0.1.2" + "has-tostringtag": "^1.0.0" } }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==" - }, "is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -14932,30 +14866,12 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, - "is-odd": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/is-odd/-/is-odd-0.1.2.tgz", - "integrity": "sha512-Ri7C2K7o5IrUU9UEI8losXJCCD/UtsaIrkR5sxIcFg4xQ9cRJXlWA5DQvTE0yDc0krvSNLsRGXN11UPS6KyfBw==", + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "requires": { - "is-number": "^3.0.0" - }, - "dependencies": { - "is-number": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", - "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } + "has-tostringtag": "^1.0.0" } }, "is-path-inside": { @@ -14978,12 +14894,21 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, - "is-self-closing": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-self-closing/-/is-self-closing-1.0.1.tgz", - "integrity": "sha512-E+60FomW7Blv5GXTlYee2KDrnG6srxF7Xt1SjrhWUGUEsTFIqY/nq2y3DaftCsgUMdh89V07IVfhY9KIJhLezg==", + "is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "requires": { - "self-closing-tags": "^1.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + } + }, + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" } }, "is-stream": { @@ -15032,10 +14957,13 @@ "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true }, - "is-windows": { + "is-weakref": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==" + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "requires": { + "call-bind": "^1.0.2" + } }, "isarray": { "version": "1.0.0", @@ -16588,81 +16516,25 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", - "requires": { - "kind-of": "^3.0.2" - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==" - } - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "requires": { - "is-buffer": "^1.1.5" - } - } - } + "object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==" }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", - "requires": { - "isobject": "^3.0.0" - } + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==" }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "object.assign": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "requires": { - "isobject": "^3.0.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" } }, "on-finished": { @@ -17229,12 +17101,14 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", "requires": { - "ret": "~0.1.10" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" } }, "safer-buffer": { @@ -18136,10 +18010,15 @@ "mime-types": "~2.1.24" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + } }, "typedarray-to-buffer": { "version": "3.1.5", diff --git a/package.json b/package.json index cb7042747..01c074ec6 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,8 @@ "mongodb": "^3.4.1", "mongoose": "^5.8.11", "morgan": "~1.9.1", - "multer": "^1.4.5-lts.1", - "nodemon": "^2.0.22" + "nodemon": "^2.0.22", + "test": "^3.3.0" }, "devDependencies": { "cypress": "^9.7.0",