├── .github └── FUNDING.yml ├── .gitignore ├── README.md ├── package.json ├── public ├── favicon.ico ├── index.html ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt ├── server ├── .gitignore ├── db.js ├── index.js ├── models │ └── user.js ├── package.json ├── routers │ └── user.js └── yarn.lock ├── src ├── components │ ├── FirstStep.js │ ├── Header.js │ ├── Login.js │ ├── Progress.js │ ├── SecondStep.js │ └── ThirdStep.js ├── index.js ├── router │ └── AppRouter.js ├── styles.scss └── utils │ └── constants.js └── yarn.lock /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: https://www.buymeacoffee.com/myogeshchavan97 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env.local 17 | .env.development.local 18 | .env.test.local 19 | .env.production.local 20 | 21 | npm-debug.log* 22 | yarn-debug.log* 23 | yarn-error.log* 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Steps to run this project 2 | 3 | Follow [this article](https://levelup.gitconnected.com/how-to-install-mongodb-database-on-local-environment-19a8a76f1b92?source=friends_link&sk=416b443bad1f86b292e4b72602cf5c9b) to install and start the MongoDB database on your local machine. 4 | 5 | To run the project first start the MongoDB server as explained above and then execute the following commands in sequence from the `multi-step-form-using-mern` folder. 6 | 7 | 1. yarn install 8 | 2. yarn build 9 | 3. cd server 10 | 4. yarn install 11 | 5. yarn start 12 | 13 | and access your application on http://localhost:3030/ 14 | 15 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 16 | 17 | # Getting Started with Create React App 18 | 19 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). 20 | 21 | ## Available Scripts 22 | 23 | In the project directory, you can run: 24 | 25 | ### `yarn start` 26 | 27 | Runs the app in the development mode.\ 28 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser. 29 | 30 | The page will reload if you make edits.\ 31 | You will also see any lint errors in the console. 32 | 33 | ### `yarn test` 34 | 35 | Launches the test runner in the interactive watch mode.\ 36 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. 37 | 38 | ### `yarn build` 39 | 40 | Builds the app for production to the `build` folder.\ 41 | It correctly bundles React in production mode and optimizes the build for the best performance. 42 | 43 | The build is minified and the filenames include the hashes.\ 44 | Your app is ready to be deployed! 45 | 46 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. 47 | 48 | ### `yarn eject` 49 | 50 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!** 51 | 52 | If you aren’t satisfied with the build tool and configuration choices, you can `eject` at any time. This command will remove the single build dependency from your project. 53 | 54 | Instead, it will copy all the configuration files and the transitive dependencies (webpack, Babel, ESLint, etc) right into your project so you have full control over them. All of the commands except `eject` will still work, but they will point to the copied scripts so you can tweak them. At this point you’re on your own. 55 | 56 | You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. 57 | 58 | ## Learn More 59 | 60 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). 61 | 62 | To learn React, check out the [React documentation](https://reactjs.org/). 63 | 64 | ### Code Splitting 65 | 66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/code-splitting](https://facebook.github.io/create-react-app/docs/code-splitting) 67 | 68 | ### Analyzing the Bundle Size 69 | 70 | This section has moved here: [https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size](https://facebook.github.io/create-react-app/docs/analyzing-the-bundle-size) 71 | 72 | ### Making a Progressive Web App 73 | 74 | This section has moved here: [https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app](https://facebook.github.io/create-react-app/docs/making-a-progressive-web-app) 75 | 76 | ### Advanced Configuration 77 | 78 | This section has moved here: [https://facebook.github.io/create-react-app/docs/advanced-configuration](https://facebook.github.io/create-react-app/docs/advanced-configuration) 79 | 80 | ### Deployment 81 | 82 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment) 83 | 84 | ### `yarn build` fails to minify 85 | 86 | This section has moved here: [https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify](https://facebook.github.io/create-react-app/docs/troubleshooting#npm-run-build-fails-to-minify) 87 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "multi-step-form-using-mern", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@testing-library/jest-dom": "^5.11.4", 7 | "@testing-library/react": "^11.1.0", 8 | "@testing-library/user-event": "^12.1.10", 9 | "axios": "0.21.1", 10 | "bootstrap": "4.6.0", 11 | "country-state-city": "2.0.0", 12 | "framer-motion": "3.7.0", 13 | "node-sass": "4.14.1", 14 | "react": "^17.0.1", 15 | "react-bootstrap": "1.5.0", 16 | "react-dom": "^17.0.1", 17 | "react-hook-form": "6.15.4", 18 | "react-router-dom": "5.2.0", 19 | "react-scripts": "4.0.3", 20 | "sweetalert2": "10.15.5", 21 | "web-vitals": "^1.0.1" 22 | }, 23 | "scripts": { 24 | "start": "react-scripts start", 25 | "build": "react-scripts build", 26 | "test": "react-scripts test", 27 | "eject": "react-scripts eject" 28 | }, 29 | "eslintConfig": { 30 | "extends": [ 31 | "react-app", 32 | "react-app/jest" 33 | ] 34 | }, 35 | "browserslist": { 36 | "production": [ 37 | ">0.2%", 38 | "not dead", 39 | "not op_mini all" 40 | ], 41 | "development": [ 42 | "last 1 chrome version", 43 | "last 1 firefox version", 44 | "last 1 safari version" 45 | ] 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myogeshchavan97/multi-step-form-using-mern/49789377aeddd578cccb59cde568eea28ec411ae/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | Multi Step Registration 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myogeshchavan97/multi-step-form-using-mern/49789377aeddd578cccb59cde568eea28ec411ae/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/myogeshchavan97/multi-step-form-using-mern/49789377aeddd578cccb59cde568eea28ec411ae/public/logo512.png -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /server/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules -------------------------------------------------------------------------------- /server/db.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | mongoose.connect('mongodb://127.0.0.1:27017/form-user', { 4 | useNewUrlParser: true, 5 | useCreateIndex: true, 6 | useUnifiedTopology: true 7 | }); 8 | -------------------------------------------------------------------------------- /server/index.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const express = require('express'); 3 | const userRouter = require('./routers/user'); 4 | require('./db'); 5 | 6 | const app = express(); 7 | const PORT = process.env.PORT || 3030; 8 | 9 | app.use(express.static(path.join(__dirname, '..', 'build'))); 10 | app.use(express.json()); 11 | app.use(userRouter); 12 | 13 | app.get('/', (req, res) => { 14 | res.send('

This is from index.js file

'); 15 | }); 16 | 17 | app.use((req, res, next) => { 18 | res.sendFile(path.join(__dirname, '..', 'build', 'index.html')); 19 | }); 20 | 21 | app.listen(PORT, () => { 22 | console.log(`server started on port ${PORT}`); 23 | }); 24 | -------------------------------------------------------------------------------- /server/models/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose'); 2 | 3 | const userSchema = mongoose.Schema( 4 | { 5 | first_name: { 6 | type: String, 7 | required: true, 8 | trim: true 9 | }, 10 | last_name: { 11 | type: String, 12 | required: true, 13 | trim: true 14 | }, 15 | user_email: { 16 | type: String, 17 | required: true, 18 | trim: true, 19 | validate(value) { 20 | if (!value.match(/^[^@ ]+@[^@ ]+\.[^@ .]{2,}$/)) { 21 | throw new Error('Email is not valid.'); 22 | } 23 | } 24 | }, 25 | user_password: { 26 | type: String, 27 | required: true, 28 | trim: true, 29 | minlength: 6 30 | }, 31 | country: { 32 | type: String, 33 | required: true, 34 | trim: true 35 | }, 36 | state: { 37 | type: String, 38 | trim: true 39 | }, 40 | city: { 41 | type: String, 42 | trim: true 43 | } 44 | }, 45 | { 46 | timestamps: true 47 | } 48 | ); 49 | 50 | const User = mongoose.model('User', userSchema); 51 | 52 | module.exports = User; 53 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "server", 3 | "version": "1.0.0", 4 | "main": "index.js", 5 | "license": "MIT", 6 | "scripts": { 7 | "start": "nodemon index.js" 8 | }, 9 | "dependencies": { 10 | "bcryptjs": "2.4.3", 11 | "cors": "2.8.5", 12 | "express": "4.17.1", 13 | "mongoose": "5.11.18", 14 | "nodemon": "2.0.7" 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /server/routers/user.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const User = require('../models/user'); 3 | const bcrypt = require('bcryptjs'); 4 | const router = express.Router(); 5 | 6 | router.post('/register', async (req, res) => { 7 | const { user_email, user_password } = req.body; 8 | 9 | let user = await User.findOne({ user_email }); 10 | if (user) { 11 | return res.status(400).send('User with the provided email already exist.'); 12 | } 13 | 14 | try { 15 | user = new User(req.body); 16 | user.user_password = await bcrypt.hash(user_password, 8); 17 | 18 | await user.save(); 19 | res.status(201).send(); 20 | } catch (e) { 21 | res.status(500).send('Something went wrong. Try again later.'); 22 | } 23 | }); 24 | 25 | router.post('/login', async (req, res) => { 26 | try { 27 | const user = await User.findOne({ user_email: req.body.user_email }); 28 | if (!user) { 29 | return res.status(400).send('User with provided email does not exist.'); 30 | } 31 | 32 | const isMatch = await bcrypt.compare( 33 | req.body.user_password, 34 | user.user_password 35 | ); 36 | 37 | if (!isMatch) { 38 | return res.status(400).send('Invalid credentials.'); 39 | } 40 | const { user_password, ...rest } = user.toObject(); 41 | 42 | return res.send(rest); 43 | } catch (error) { 44 | return res.status(500).send('Something went wrong. Try again later.'); 45 | } 46 | }); 47 | 48 | module.exports = router; 49 | -------------------------------------------------------------------------------- /server/yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@sindresorhus/is@^0.14.0": 6 | version "0.14.0" 7 | resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" 8 | integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== 9 | 10 | "@szmarczak/http-timer@^1.1.2": 11 | version "1.1.2" 12 | resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" 13 | integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== 14 | dependencies: 15 | defer-to-connect "^1.0.1" 16 | 17 | "@types/bson@*": 18 | version "4.0.3" 19 | resolved "https://registry.yarnpkg.com/@types/bson/-/bson-4.0.3.tgz#30889d2ffde6262abbe38659364c631454999fbf" 20 | integrity sha512-mVRvYnTOZJz3ccpxhr3wgxVmSeiYinW+zlzQz3SXWaJmD1DuL05Jeq7nKw3SnbKmbleW5qrLG5vdyWe/A9sXhw== 21 | dependencies: 22 | "@types/node" "*" 23 | 24 | "@types/mongodb@^3.5.27": 25 | version "3.6.8" 26 | resolved "https://registry.yarnpkg.com/@types/mongodb/-/mongodb-3.6.8.tgz#f80f0a3022c44d8db659a936434403ca3f4661df" 27 | integrity sha512-8qNbL5/GFrljXc/QijcuQcUMYZ1iWNcqnJ6tneROwbfU0LsAjQ9bmq3aHi5lWXM4cyBPd2F/n9INAk/pZZttHw== 28 | dependencies: 29 | "@types/bson" "*" 30 | "@types/node" "*" 31 | 32 | "@types/node@*": 33 | version "14.14.31" 34 | resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055" 35 | integrity sha512-vFHy/ezP5qI0rFgJ7aQnjDXwAMrG0KqqIH7tQG5PPv3BWBayOPIQNBjVc/P6hhdZfMx51REc6tfDNXHUio893g== 36 | 37 | abbrev@1: 38 | version "1.1.1" 39 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 40 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== 41 | 42 | accepts@~1.3.7: 43 | version "1.3.7" 44 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" 45 | integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== 46 | dependencies: 47 | mime-types "~2.1.24" 48 | negotiator "0.6.2" 49 | 50 | ansi-align@^3.0.0: 51 | version "3.0.0" 52 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.0.tgz#b536b371cf687caaef236c18d3e21fe3797467cb" 53 | integrity sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw== 54 | dependencies: 55 | string-width "^3.0.0" 56 | 57 | ansi-regex@^4.1.0: 58 | version "4.1.0" 59 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" 60 | integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== 61 | 62 | ansi-regex@^5.0.0: 63 | version "5.0.0" 64 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" 65 | integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== 66 | 67 | ansi-styles@^4.1.0: 68 | version "4.3.0" 69 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 70 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 71 | dependencies: 72 | color-convert "^2.0.1" 73 | 74 | anymatch@~3.1.1: 75 | version "3.1.1" 76 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" 77 | integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== 78 | dependencies: 79 | normalize-path "^3.0.0" 80 | picomatch "^2.0.4" 81 | 82 | array-flatten@1.1.1: 83 | version "1.1.1" 84 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 85 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= 86 | 87 | balanced-match@^1.0.0: 88 | version "1.0.0" 89 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 90 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= 91 | 92 | bcryptjs@2.4.3: 93 | version "2.4.3" 94 | resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" 95 | integrity sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms= 96 | 97 | binary-extensions@^2.0.0: 98 | version "2.2.0" 99 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" 100 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== 101 | 102 | bl@^2.2.1: 103 | version "2.2.1" 104 | resolved "https://registry.yarnpkg.com/bl/-/bl-2.2.1.tgz#8c11a7b730655c5d56898cdc871224f40fd901d5" 105 | integrity sha512-6Pesp1w0DEX1N550i/uGV/TqucVL4AM/pgThFSN/Qq9si1/DF9aIHs1BxD8V/QU0HoeHO6cQRTAuYnLPKq1e4g== 106 | dependencies: 107 | readable-stream "^2.3.5" 108 | safe-buffer "^5.1.1" 109 | 110 | bluebird@3.5.1: 111 | version "3.5.1" 112 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" 113 | integrity sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA== 114 | 115 | body-parser@1.19.0: 116 | version "1.19.0" 117 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" 118 | integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== 119 | dependencies: 120 | bytes "3.1.0" 121 | content-type "~1.0.4" 122 | debug "2.6.9" 123 | depd "~1.1.2" 124 | http-errors "1.7.2" 125 | iconv-lite "0.4.24" 126 | on-finished "~2.3.0" 127 | qs "6.7.0" 128 | raw-body "2.4.0" 129 | type-is "~1.6.17" 130 | 131 | boxen@^4.2.0: 132 | version "4.2.0" 133 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-4.2.0.tgz#e411b62357d6d6d36587c8ac3d5d974daa070e64" 134 | integrity sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ== 135 | dependencies: 136 | ansi-align "^3.0.0" 137 | camelcase "^5.3.1" 138 | chalk "^3.0.0" 139 | cli-boxes "^2.2.0" 140 | string-width "^4.1.0" 141 | term-size "^2.1.0" 142 | type-fest "^0.8.1" 143 | widest-line "^3.1.0" 144 | 145 | brace-expansion@^1.1.7: 146 | version "1.1.11" 147 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 148 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 149 | dependencies: 150 | balanced-match "^1.0.0" 151 | concat-map "0.0.1" 152 | 153 | braces@~3.0.2: 154 | version "3.0.2" 155 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" 156 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== 157 | dependencies: 158 | fill-range "^7.0.1" 159 | 160 | bson@^1.1.4: 161 | version "1.1.5" 162 | resolved "https://registry.yarnpkg.com/bson/-/bson-1.1.5.tgz#2aaae98fcdf6750c0848b0cba1ddec3c73060a34" 163 | integrity sha512-kDuEzldR21lHciPQAIulLs1LZlCXdLziXI6Mb/TDkwXhb//UORJNPXgcRs2CuO4H0DcMkpfT3/ySsP3unoZjBg== 164 | 165 | bytes@3.1.0: 166 | version "3.1.0" 167 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" 168 | integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== 169 | 170 | cacheable-request@^6.0.0: 171 | version "6.1.0" 172 | resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" 173 | integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== 174 | dependencies: 175 | clone-response "^1.0.2" 176 | get-stream "^5.1.0" 177 | http-cache-semantics "^4.0.0" 178 | keyv "^3.0.0" 179 | lowercase-keys "^2.0.0" 180 | normalize-url "^4.1.0" 181 | responselike "^1.0.2" 182 | 183 | camelcase@^5.3.1: 184 | version "5.3.1" 185 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 186 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 187 | 188 | chalk@^3.0.0: 189 | version "3.0.0" 190 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" 191 | integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== 192 | dependencies: 193 | ansi-styles "^4.1.0" 194 | supports-color "^7.1.0" 195 | 196 | chokidar@^3.2.2: 197 | version "3.5.1" 198 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" 199 | integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== 200 | dependencies: 201 | anymatch "~3.1.1" 202 | braces "~3.0.2" 203 | glob-parent "~5.1.0" 204 | is-binary-path "~2.1.0" 205 | is-glob "~4.0.1" 206 | normalize-path "~3.0.0" 207 | readdirp "~3.5.0" 208 | optionalDependencies: 209 | fsevents "~2.3.1" 210 | 211 | ci-info@^2.0.0: 212 | version "2.0.0" 213 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" 214 | integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== 215 | 216 | cli-boxes@^2.2.0: 217 | version "2.2.1" 218 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" 219 | integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== 220 | 221 | clone-response@^1.0.2: 222 | version "1.0.2" 223 | resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" 224 | integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= 225 | dependencies: 226 | mimic-response "^1.0.0" 227 | 228 | color-convert@^2.0.1: 229 | version "2.0.1" 230 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 231 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 232 | dependencies: 233 | color-name "~1.1.4" 234 | 235 | color-name@~1.1.4: 236 | version "1.1.4" 237 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 238 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 239 | 240 | concat-map@0.0.1: 241 | version "0.0.1" 242 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 243 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= 244 | 245 | configstore@^5.0.1: 246 | version "5.0.1" 247 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-5.0.1.tgz#d365021b5df4b98cdd187d6a3b0e3f6a7cc5ed96" 248 | integrity sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA== 249 | dependencies: 250 | dot-prop "^5.2.0" 251 | graceful-fs "^4.1.2" 252 | make-dir "^3.0.0" 253 | unique-string "^2.0.0" 254 | write-file-atomic "^3.0.0" 255 | xdg-basedir "^4.0.0" 256 | 257 | content-disposition@0.5.3: 258 | version "0.5.3" 259 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" 260 | integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== 261 | dependencies: 262 | safe-buffer "5.1.2" 263 | 264 | content-type@~1.0.4: 265 | version "1.0.4" 266 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 267 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== 268 | 269 | cookie-signature@1.0.6: 270 | version "1.0.6" 271 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 272 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= 273 | 274 | cookie@0.4.0: 275 | version "0.4.0" 276 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" 277 | integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== 278 | 279 | core-util-is@~1.0.0: 280 | version "1.0.2" 281 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 282 | integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= 283 | 284 | cors@2.8.5: 285 | version "2.8.5" 286 | resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" 287 | integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== 288 | dependencies: 289 | object-assign "^4" 290 | vary "^1" 291 | 292 | crypto-random-string@^2.0.0: 293 | version "2.0.0" 294 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" 295 | integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== 296 | 297 | debug@2.6.9, debug@^2.2.0: 298 | version "2.6.9" 299 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 300 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== 301 | dependencies: 302 | ms "2.0.0" 303 | 304 | debug@3.1.0: 305 | version "3.1.0" 306 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 307 | integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== 308 | dependencies: 309 | ms "2.0.0" 310 | 311 | debug@^3.2.6: 312 | version "3.2.7" 313 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" 314 | integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== 315 | dependencies: 316 | ms "^2.1.1" 317 | 318 | decompress-response@^3.3.0: 319 | version "3.3.0" 320 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" 321 | integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= 322 | dependencies: 323 | mimic-response "^1.0.0" 324 | 325 | deep-extend@^0.6.0: 326 | version "0.6.0" 327 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" 328 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== 329 | 330 | defer-to-connect@^1.0.1: 331 | version "1.1.3" 332 | resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" 333 | integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== 334 | 335 | denque@^1.4.1: 336 | version "1.5.0" 337 | resolved "https://registry.yarnpkg.com/denque/-/denque-1.5.0.tgz#773de0686ff2d8ec2ff92914316a47b73b1c73de" 338 | integrity sha512-CYiCSgIF1p6EUByQPlGkKnP1M9g0ZV3qMIrqMqZqdwazygIA/YP2vrbcyl1h/WppKJTdl1F85cXIle+394iDAQ== 339 | 340 | depd@~1.1.2: 341 | version "1.1.2" 342 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" 343 | integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= 344 | 345 | destroy@~1.0.4: 346 | version "1.0.4" 347 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 348 | integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= 349 | 350 | dot-prop@^5.2.0: 351 | version "5.3.0" 352 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" 353 | integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== 354 | dependencies: 355 | is-obj "^2.0.0" 356 | 357 | duplexer3@^0.1.4: 358 | version "0.1.4" 359 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 360 | integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= 361 | 362 | ee-first@1.1.1: 363 | version "1.1.1" 364 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 365 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= 366 | 367 | emoji-regex@^7.0.1: 368 | version "7.0.3" 369 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" 370 | integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== 371 | 372 | emoji-regex@^8.0.0: 373 | version "8.0.0" 374 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 375 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 376 | 377 | encodeurl@~1.0.2: 378 | version "1.0.2" 379 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" 380 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= 381 | 382 | end-of-stream@^1.1.0: 383 | version "1.4.4" 384 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" 385 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== 386 | dependencies: 387 | once "^1.4.0" 388 | 389 | escape-goat@^2.0.0: 390 | version "2.1.1" 391 | resolved "https://registry.yarnpkg.com/escape-goat/-/escape-goat-2.1.1.tgz#1b2dc77003676c457ec760b2dc68edb648188675" 392 | integrity sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q== 393 | 394 | escape-html@~1.0.3: 395 | version "1.0.3" 396 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 397 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 398 | 399 | etag@~1.8.1: 400 | version "1.8.1" 401 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 402 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= 403 | 404 | express@4.17.1: 405 | version "4.17.1" 406 | resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" 407 | integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== 408 | dependencies: 409 | accepts "~1.3.7" 410 | array-flatten "1.1.1" 411 | body-parser "1.19.0" 412 | content-disposition "0.5.3" 413 | content-type "~1.0.4" 414 | cookie "0.4.0" 415 | cookie-signature "1.0.6" 416 | debug "2.6.9" 417 | depd "~1.1.2" 418 | encodeurl "~1.0.2" 419 | escape-html "~1.0.3" 420 | etag "~1.8.1" 421 | finalhandler "~1.1.2" 422 | fresh "0.5.2" 423 | merge-descriptors "1.0.1" 424 | methods "~1.1.2" 425 | on-finished "~2.3.0" 426 | parseurl "~1.3.3" 427 | path-to-regexp "0.1.7" 428 | proxy-addr "~2.0.5" 429 | qs "6.7.0" 430 | range-parser "~1.2.1" 431 | safe-buffer "5.1.2" 432 | send "0.17.1" 433 | serve-static "1.14.1" 434 | setprototypeof "1.1.1" 435 | statuses "~1.5.0" 436 | type-is "~1.6.18" 437 | utils-merge "1.0.1" 438 | vary "~1.1.2" 439 | 440 | fill-range@^7.0.1: 441 | version "7.0.1" 442 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" 443 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== 444 | dependencies: 445 | to-regex-range "^5.0.1" 446 | 447 | finalhandler@~1.1.2: 448 | version "1.1.2" 449 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" 450 | integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== 451 | dependencies: 452 | debug "2.6.9" 453 | encodeurl "~1.0.2" 454 | escape-html "~1.0.3" 455 | on-finished "~2.3.0" 456 | parseurl "~1.3.3" 457 | statuses "~1.5.0" 458 | unpipe "~1.0.0" 459 | 460 | forwarded@~0.1.2: 461 | version "0.1.2" 462 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 463 | integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= 464 | 465 | fresh@0.5.2: 466 | version "0.5.2" 467 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 468 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= 469 | 470 | fsevents@~2.3.1: 471 | version "2.3.2" 472 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" 473 | integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== 474 | 475 | get-stream@^4.1.0: 476 | version "4.1.0" 477 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" 478 | integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== 479 | dependencies: 480 | pump "^3.0.0" 481 | 482 | get-stream@^5.1.0: 483 | version "5.2.0" 484 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" 485 | integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== 486 | dependencies: 487 | pump "^3.0.0" 488 | 489 | glob-parent@~5.1.0: 490 | version "5.1.1" 491 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" 492 | integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== 493 | dependencies: 494 | is-glob "^4.0.1" 495 | 496 | global-dirs@^2.0.1: 497 | version "2.1.0" 498 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-2.1.0.tgz#e9046a49c806ff04d6c1825e196c8f0091e8df4d" 499 | integrity sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ== 500 | dependencies: 501 | ini "1.3.7" 502 | 503 | got@^9.6.0: 504 | version "9.6.0" 505 | resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" 506 | integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== 507 | dependencies: 508 | "@sindresorhus/is" "^0.14.0" 509 | "@szmarczak/http-timer" "^1.1.2" 510 | cacheable-request "^6.0.0" 511 | decompress-response "^3.3.0" 512 | duplexer3 "^0.1.4" 513 | get-stream "^4.1.0" 514 | lowercase-keys "^1.0.1" 515 | mimic-response "^1.0.1" 516 | p-cancelable "^1.0.0" 517 | to-readable-stream "^1.0.0" 518 | url-parse-lax "^3.0.0" 519 | 520 | graceful-fs@^4.1.2: 521 | version "4.2.6" 522 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" 523 | integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== 524 | 525 | has-flag@^3.0.0: 526 | version "3.0.0" 527 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" 528 | integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= 529 | 530 | has-flag@^4.0.0: 531 | version "4.0.0" 532 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 533 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 534 | 535 | has-yarn@^2.1.0: 536 | version "2.1.0" 537 | resolved "https://registry.yarnpkg.com/has-yarn/-/has-yarn-2.1.0.tgz#137e11354a7b5bf11aa5cb649cf0c6f3ff2b2e77" 538 | integrity sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw== 539 | 540 | http-cache-semantics@^4.0.0: 541 | version "4.1.0" 542 | resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" 543 | integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== 544 | 545 | http-errors@1.7.2: 546 | version "1.7.2" 547 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" 548 | integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== 549 | dependencies: 550 | depd "~1.1.2" 551 | inherits "2.0.3" 552 | setprototypeof "1.1.1" 553 | statuses ">= 1.5.0 < 2" 554 | toidentifier "1.0.0" 555 | 556 | http-errors@~1.7.2: 557 | version "1.7.3" 558 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" 559 | integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== 560 | dependencies: 561 | depd "~1.1.2" 562 | inherits "2.0.4" 563 | setprototypeof "1.1.1" 564 | statuses ">= 1.5.0 < 2" 565 | toidentifier "1.0.0" 566 | 567 | iconv-lite@0.4.24: 568 | version "0.4.24" 569 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" 570 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== 571 | dependencies: 572 | safer-buffer ">= 2.1.2 < 3" 573 | 574 | ignore-by-default@^1.0.1: 575 | version "1.0.1" 576 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 577 | integrity sha1-SMptcvbGo68Aqa1K5odr44ieKwk= 578 | 579 | import-lazy@^2.1.0: 580 | version "2.1.0" 581 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 582 | integrity sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM= 583 | 584 | imurmurhash@^0.1.4: 585 | version "0.1.4" 586 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 587 | integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= 588 | 589 | inherits@2.0.3: 590 | version "2.0.3" 591 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 592 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= 593 | 594 | inherits@2.0.4, inherits@~2.0.3: 595 | version "2.0.4" 596 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 597 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 598 | 599 | ini@1.3.7: 600 | version "1.3.7" 601 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" 602 | integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== 603 | 604 | ini@~1.3.0: 605 | version "1.3.8" 606 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" 607 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== 608 | 609 | ipaddr.js@1.9.1: 610 | version "1.9.1" 611 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" 612 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== 613 | 614 | is-binary-path@~2.1.0: 615 | version "2.1.0" 616 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" 617 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== 618 | dependencies: 619 | binary-extensions "^2.0.0" 620 | 621 | is-ci@^2.0.0: 622 | version "2.0.0" 623 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" 624 | integrity sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w== 625 | dependencies: 626 | ci-info "^2.0.0" 627 | 628 | is-extglob@^2.1.1: 629 | version "2.1.1" 630 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" 631 | integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= 632 | 633 | is-fullwidth-code-point@^2.0.0: 634 | version "2.0.0" 635 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 636 | integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= 637 | 638 | is-fullwidth-code-point@^3.0.0: 639 | version "3.0.0" 640 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 641 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 642 | 643 | is-glob@^4.0.1, is-glob@~4.0.1: 644 | version "4.0.1" 645 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" 646 | integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== 647 | dependencies: 648 | is-extglob "^2.1.1" 649 | 650 | is-installed-globally@^0.3.1: 651 | version "0.3.2" 652 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.3.2.tgz#fd3efa79ee670d1187233182d5b0a1dd00313141" 653 | integrity sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g== 654 | dependencies: 655 | global-dirs "^2.0.1" 656 | is-path-inside "^3.0.1" 657 | 658 | is-npm@^4.0.0: 659 | version "4.0.0" 660 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-4.0.0.tgz#c90dd8380696df87a7a6d823c20d0b12bbe3c84d" 661 | integrity sha512-96ECIfh9xtDDlPylNPXhzjsykHsMJZ18ASpaWzQyBr4YRTcVjUvzaHayDAES2oU/3KpljhHUjtSRNiDwi0F0ig== 662 | 663 | is-number@^7.0.0: 664 | version "7.0.0" 665 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 666 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 667 | 668 | is-obj@^2.0.0: 669 | version "2.0.0" 670 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" 671 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== 672 | 673 | is-path-inside@^3.0.1: 674 | version "3.0.2" 675 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.2.tgz#f5220fc82a3e233757291dddc9c5877f2a1f3017" 676 | integrity sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg== 677 | 678 | is-typedarray@^1.0.0: 679 | version "1.0.0" 680 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 681 | integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= 682 | 683 | is-yarn-global@^0.3.0: 684 | version "0.3.0" 685 | resolved "https://registry.yarnpkg.com/is-yarn-global/-/is-yarn-global-0.3.0.tgz#d502d3382590ea3004893746754c89139973e232" 686 | integrity sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw== 687 | 688 | isarray@~1.0.0: 689 | version "1.0.0" 690 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 691 | integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= 692 | 693 | json-buffer@3.0.0: 694 | version "3.0.0" 695 | resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" 696 | integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= 697 | 698 | kareem@2.3.2: 699 | version "2.3.2" 700 | resolved "https://registry.yarnpkg.com/kareem/-/kareem-2.3.2.tgz#78c4508894985b8d38a0dc15e1a8e11078f2ca93" 701 | integrity sha512-STHz9P7X2L4Kwn72fA4rGyqyXdmrMSdxqHx9IXon/FXluXieaFA6KJ2upcHAHxQPQ0LeM/OjLrhFxifHewOALQ== 702 | 703 | keyv@^3.0.0: 704 | version "3.1.0" 705 | resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" 706 | integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== 707 | dependencies: 708 | json-buffer "3.0.0" 709 | 710 | latest-version@^5.0.0: 711 | version "5.1.0" 712 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-5.1.0.tgz#119dfe908fe38d15dfa43ecd13fa12ec8832face" 713 | integrity sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA== 714 | dependencies: 715 | package-json "^6.3.0" 716 | 717 | lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: 718 | version "1.0.1" 719 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" 720 | integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== 721 | 722 | lowercase-keys@^2.0.0: 723 | version "2.0.0" 724 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" 725 | integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== 726 | 727 | make-dir@^3.0.0: 728 | version "3.1.0" 729 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-3.1.0.tgz#415e967046b3a7f1d185277d84aa58203726a13f" 730 | integrity sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw== 731 | dependencies: 732 | semver "^6.0.0" 733 | 734 | media-typer@0.3.0: 735 | version "0.3.0" 736 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 737 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= 738 | 739 | memory-pager@^1.0.2: 740 | version "1.5.0" 741 | resolved "https://registry.yarnpkg.com/memory-pager/-/memory-pager-1.5.0.tgz#d8751655d22d384682741c972f2c3d6dfa3e66b5" 742 | integrity sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg== 743 | 744 | merge-descriptors@1.0.1: 745 | version "1.0.1" 746 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 747 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= 748 | 749 | methods@~1.1.2: 750 | version "1.1.2" 751 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 752 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= 753 | 754 | mime-db@1.46.0: 755 | version "1.46.0" 756 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" 757 | integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== 758 | 759 | mime-types@~2.1.24: 760 | version "2.1.29" 761 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" 762 | integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== 763 | dependencies: 764 | mime-db "1.46.0" 765 | 766 | mime@1.6.0: 767 | version "1.6.0" 768 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" 769 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== 770 | 771 | mimic-response@^1.0.0, mimic-response@^1.0.1: 772 | version "1.0.1" 773 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" 774 | integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== 775 | 776 | minimatch@^3.0.4: 777 | version "3.0.4" 778 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 779 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== 780 | dependencies: 781 | brace-expansion "^1.1.7" 782 | 783 | minimist@^1.2.0: 784 | version "1.2.5" 785 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" 786 | integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== 787 | 788 | mongodb@3.6.4: 789 | version "3.6.4" 790 | resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-3.6.4.tgz#ca59fd65b06831308262372ef9df6b78f9da97be" 791 | integrity sha512-Y+Ki9iXE9jI+n9bVtbTOOdK0B95d6wVGSucwtBkvQ+HIvVdTCfpVRp01FDC24uhC/Q2WXQ8Lpq3/zwtB5Op9Qw== 792 | dependencies: 793 | bl "^2.2.1" 794 | bson "^1.1.4" 795 | denque "^1.4.1" 796 | require_optional "^1.0.1" 797 | safe-buffer "^5.1.2" 798 | optionalDependencies: 799 | saslprep "^1.0.0" 800 | 801 | mongoose-legacy-pluralize@1.0.2: 802 | version "1.0.2" 803 | resolved "https://registry.yarnpkg.com/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz#3ba9f91fa507b5186d399fb40854bff18fb563e4" 804 | integrity sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ== 805 | 806 | mongoose@5.11.18: 807 | version "5.11.18" 808 | resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-5.11.18.tgz#76fdcefeb2afc7409705fc44b58045953bba5ee1" 809 | integrity sha512-RsrPR9nhkXZbO3ml0DcmdbfeMvFNhgFrP81S6o1P+lFnDTNEKYnGNRCIL+ojD69wj7H5jJaAdZ0SJ5IlKxCHqw== 810 | dependencies: 811 | "@types/mongodb" "^3.5.27" 812 | bson "^1.1.4" 813 | kareem "2.3.2" 814 | mongodb "3.6.4" 815 | mongoose-legacy-pluralize "1.0.2" 816 | mpath "0.8.3" 817 | mquery "3.2.4" 818 | ms "2.1.2" 819 | regexp-clone "1.0.0" 820 | safe-buffer "5.2.1" 821 | sift "7.0.1" 822 | sliced "1.0.1" 823 | 824 | mpath@0.8.3: 825 | version "0.8.3" 826 | resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.8.3.tgz#828ac0d187f7f42674839d74921970979abbdd8f" 827 | integrity sha512-eb9rRvhDltXVNL6Fxd2zM9D4vKBxjVVQNLNijlj7uoXUy19zNDsIif5zR+pWmPCWNKwAtqyo4JveQm4nfD5+eA== 828 | 829 | mquery@3.2.4: 830 | version "3.2.4" 831 | resolved "https://registry.yarnpkg.com/mquery/-/mquery-3.2.4.tgz#9c5c2e285ea6c6f20673f3528973c99ee1aaa1a0" 832 | integrity sha512-uOLpp7iRX0BV1Uu6YpsqJ5b42LwYnmu0WeF/f8qgD/On3g0XDaQM6pfn0m6UxO6SM8DioZ9Bk6xxbWIGHm2zHg== 833 | dependencies: 834 | bluebird "3.5.1" 835 | debug "3.1.0" 836 | regexp-clone "^1.0.0" 837 | safe-buffer "5.1.2" 838 | sliced "1.0.1" 839 | 840 | ms@2.0.0: 841 | version "2.0.0" 842 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 843 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= 844 | 845 | ms@2.1.1: 846 | version "2.1.1" 847 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" 848 | integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== 849 | 850 | ms@2.1.2: 851 | version "2.1.2" 852 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" 853 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== 854 | 855 | ms@^2.1.1: 856 | version "2.1.3" 857 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 858 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 859 | 860 | negotiator@0.6.2: 861 | version "0.6.2" 862 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" 863 | integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== 864 | 865 | nodemon@2.0.7: 866 | version "2.0.7" 867 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-2.0.7.tgz#6f030a0a0ebe3ea1ba2a38f71bf9bab4841ced32" 868 | integrity sha512-XHzK69Awgnec9UzHr1kc8EomQh4sjTQ8oRf8TsGrSmHDx9/UmiGG9E/mM3BuTfNeFwdNBvrqQq/RHL0xIeyFOA== 869 | dependencies: 870 | chokidar "^3.2.2" 871 | debug "^3.2.6" 872 | ignore-by-default "^1.0.1" 873 | minimatch "^3.0.4" 874 | pstree.remy "^1.1.7" 875 | semver "^5.7.1" 876 | supports-color "^5.5.0" 877 | touch "^3.1.0" 878 | undefsafe "^2.0.3" 879 | update-notifier "^4.1.0" 880 | 881 | nopt@~1.0.10: 882 | version "1.0.10" 883 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 884 | integrity sha1-bd0hvSoxQXuScn3Vhfim83YI6+4= 885 | dependencies: 886 | abbrev "1" 887 | 888 | normalize-path@^3.0.0, normalize-path@~3.0.0: 889 | version "3.0.0" 890 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 891 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 892 | 893 | normalize-url@^4.1.0: 894 | version "4.5.0" 895 | resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" 896 | integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== 897 | 898 | object-assign@^4: 899 | version "4.1.1" 900 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 901 | integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= 902 | 903 | on-finished@~2.3.0: 904 | version "2.3.0" 905 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 906 | integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= 907 | dependencies: 908 | ee-first "1.1.1" 909 | 910 | once@^1.3.1, once@^1.4.0: 911 | version "1.4.0" 912 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 913 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= 914 | dependencies: 915 | wrappy "1" 916 | 917 | p-cancelable@^1.0.0: 918 | version "1.1.0" 919 | resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" 920 | integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== 921 | 922 | package-json@^6.3.0: 923 | version "6.5.0" 924 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-6.5.0.tgz#6feedaca35e75725876d0b0e64974697fed145b0" 925 | integrity sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ== 926 | dependencies: 927 | got "^9.6.0" 928 | registry-auth-token "^4.0.0" 929 | registry-url "^5.0.0" 930 | semver "^6.2.0" 931 | 932 | parseurl@~1.3.3: 933 | version "1.3.3" 934 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" 935 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== 936 | 937 | path-to-regexp@0.1.7: 938 | version "0.1.7" 939 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 940 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= 941 | 942 | picomatch@^2.0.4, picomatch@^2.2.1: 943 | version "2.2.2" 944 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" 945 | integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== 946 | 947 | prepend-http@^2.0.0: 948 | version "2.0.0" 949 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" 950 | integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= 951 | 952 | process-nextick-args@~2.0.0: 953 | version "2.0.1" 954 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" 955 | integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== 956 | 957 | proxy-addr@~2.0.5: 958 | version "2.0.6" 959 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" 960 | integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== 961 | dependencies: 962 | forwarded "~0.1.2" 963 | ipaddr.js "1.9.1" 964 | 965 | pstree.remy@^1.1.7: 966 | version "1.1.8" 967 | resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" 968 | integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== 969 | 970 | pump@^3.0.0: 971 | version "3.0.0" 972 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" 973 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== 974 | dependencies: 975 | end-of-stream "^1.1.0" 976 | once "^1.3.1" 977 | 978 | pupa@^2.0.1: 979 | version "2.1.1" 980 | resolved "https://registry.yarnpkg.com/pupa/-/pupa-2.1.1.tgz#f5e8fd4afc2c5d97828faa523549ed8744a20d62" 981 | integrity sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A== 982 | dependencies: 983 | escape-goat "^2.0.0" 984 | 985 | qs@6.7.0: 986 | version "6.7.0" 987 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" 988 | integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== 989 | 990 | range-parser@~1.2.1: 991 | version "1.2.1" 992 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" 993 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== 994 | 995 | raw-body@2.4.0: 996 | version "2.4.0" 997 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" 998 | integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== 999 | dependencies: 1000 | bytes "3.1.0" 1001 | http-errors "1.7.2" 1002 | iconv-lite "0.4.24" 1003 | unpipe "1.0.0" 1004 | 1005 | rc@^1.2.8: 1006 | version "1.2.8" 1007 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" 1008 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== 1009 | dependencies: 1010 | deep-extend "^0.6.0" 1011 | ini "~1.3.0" 1012 | minimist "^1.2.0" 1013 | strip-json-comments "~2.0.1" 1014 | 1015 | readable-stream@^2.3.5: 1016 | version "2.3.7" 1017 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" 1018 | integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== 1019 | dependencies: 1020 | core-util-is "~1.0.0" 1021 | inherits "~2.0.3" 1022 | isarray "~1.0.0" 1023 | process-nextick-args "~2.0.0" 1024 | safe-buffer "~5.1.1" 1025 | string_decoder "~1.1.1" 1026 | util-deprecate "~1.0.1" 1027 | 1028 | readdirp@~3.5.0: 1029 | version "3.5.0" 1030 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" 1031 | integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== 1032 | dependencies: 1033 | picomatch "^2.2.1" 1034 | 1035 | regexp-clone@1.0.0, regexp-clone@^1.0.0: 1036 | version "1.0.0" 1037 | resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-1.0.0.tgz#222db967623277056260b992626354a04ce9bf63" 1038 | integrity sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw== 1039 | 1040 | registry-auth-token@^4.0.0: 1041 | version "4.2.1" 1042 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-4.2.1.tgz#6d7b4006441918972ccd5fedcd41dc322c79b250" 1043 | integrity sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw== 1044 | dependencies: 1045 | rc "^1.2.8" 1046 | 1047 | registry-url@^5.0.0: 1048 | version "5.1.0" 1049 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-5.1.0.tgz#e98334b50d5434b81136b44ec638d9c2009c5009" 1050 | integrity sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw== 1051 | dependencies: 1052 | rc "^1.2.8" 1053 | 1054 | require_optional@^1.0.1: 1055 | version "1.0.1" 1056 | resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" 1057 | integrity sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g== 1058 | dependencies: 1059 | resolve-from "^2.0.0" 1060 | semver "^5.1.0" 1061 | 1062 | resolve-from@^2.0.0: 1063 | version "2.0.0" 1064 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" 1065 | integrity sha1-lICrIOlP+h2egKgEx+oUdhGWa1c= 1066 | 1067 | responselike@^1.0.2: 1068 | version "1.0.2" 1069 | resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" 1070 | integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= 1071 | dependencies: 1072 | lowercase-keys "^1.0.0" 1073 | 1074 | safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1075 | version "5.1.2" 1076 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" 1077 | integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== 1078 | 1079 | safe-buffer@5.2.1, safe-buffer@^5.1.1, safe-buffer@^5.1.2: 1080 | version "5.2.1" 1081 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 1082 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 1083 | 1084 | "safer-buffer@>= 2.1.2 < 3": 1085 | version "2.1.2" 1086 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" 1087 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== 1088 | 1089 | saslprep@^1.0.0: 1090 | version "1.0.3" 1091 | resolved "https://registry.yarnpkg.com/saslprep/-/saslprep-1.0.3.tgz#4c02f946b56cf54297e347ba1093e7acac4cf226" 1092 | integrity sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag== 1093 | dependencies: 1094 | sparse-bitfield "^3.0.3" 1095 | 1096 | semver-diff@^3.1.1: 1097 | version "3.1.1" 1098 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-3.1.1.tgz#05f77ce59f325e00e2706afd67bb506ddb1ca32b" 1099 | integrity sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg== 1100 | dependencies: 1101 | semver "^6.3.0" 1102 | 1103 | semver@^5.1.0, semver@^5.7.1: 1104 | version "5.7.1" 1105 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" 1106 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== 1107 | 1108 | semver@^6.0.0, semver@^6.2.0, semver@^6.3.0: 1109 | version "6.3.0" 1110 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" 1111 | integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== 1112 | 1113 | send@0.17.1: 1114 | version "0.17.1" 1115 | resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" 1116 | integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== 1117 | dependencies: 1118 | debug "2.6.9" 1119 | depd "~1.1.2" 1120 | destroy "~1.0.4" 1121 | encodeurl "~1.0.2" 1122 | escape-html "~1.0.3" 1123 | etag "~1.8.1" 1124 | fresh "0.5.2" 1125 | http-errors "~1.7.2" 1126 | mime "1.6.0" 1127 | ms "2.1.1" 1128 | on-finished "~2.3.0" 1129 | range-parser "~1.2.1" 1130 | statuses "~1.5.0" 1131 | 1132 | serve-static@1.14.1: 1133 | version "1.14.1" 1134 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" 1135 | integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== 1136 | dependencies: 1137 | encodeurl "~1.0.2" 1138 | escape-html "~1.0.3" 1139 | parseurl "~1.3.3" 1140 | send "0.17.1" 1141 | 1142 | setprototypeof@1.1.1: 1143 | version "1.1.1" 1144 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" 1145 | integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== 1146 | 1147 | sift@7.0.1: 1148 | version "7.0.1" 1149 | resolved "https://registry.yarnpkg.com/sift/-/sift-7.0.1.tgz#47d62c50b159d316f1372f8b53f9c10cd21a4b08" 1150 | integrity sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g== 1151 | 1152 | signal-exit@^3.0.2: 1153 | version "3.0.3" 1154 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" 1155 | integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== 1156 | 1157 | sliced@1.0.1: 1158 | version "1.0.1" 1159 | resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" 1160 | integrity sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E= 1161 | 1162 | sparse-bitfield@^3.0.3: 1163 | version "3.0.3" 1164 | resolved "https://registry.yarnpkg.com/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz#ff4ae6e68656056ba4b3e792ab3334d38273ca11" 1165 | integrity sha1-/0rm5oZWBWuks+eSqzM004JzyhE= 1166 | dependencies: 1167 | memory-pager "^1.0.2" 1168 | 1169 | "statuses@>= 1.5.0 < 2", statuses@~1.5.0: 1170 | version "1.5.0" 1171 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" 1172 | integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= 1173 | 1174 | string-width@^3.0.0: 1175 | version "3.1.0" 1176 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" 1177 | integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== 1178 | dependencies: 1179 | emoji-regex "^7.0.1" 1180 | is-fullwidth-code-point "^2.0.0" 1181 | strip-ansi "^5.1.0" 1182 | 1183 | string-width@^4.0.0, string-width@^4.1.0: 1184 | version "4.2.2" 1185 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" 1186 | integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== 1187 | dependencies: 1188 | emoji-regex "^8.0.0" 1189 | is-fullwidth-code-point "^3.0.0" 1190 | strip-ansi "^6.0.0" 1191 | 1192 | string_decoder@~1.1.1: 1193 | version "1.1.1" 1194 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" 1195 | integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== 1196 | dependencies: 1197 | safe-buffer "~5.1.0" 1198 | 1199 | strip-ansi@^5.1.0: 1200 | version "5.2.0" 1201 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" 1202 | integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== 1203 | dependencies: 1204 | ansi-regex "^4.1.0" 1205 | 1206 | strip-ansi@^6.0.0: 1207 | version "6.0.0" 1208 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" 1209 | integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== 1210 | dependencies: 1211 | ansi-regex "^5.0.0" 1212 | 1213 | strip-json-comments@~2.0.1: 1214 | version "2.0.1" 1215 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1216 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= 1217 | 1218 | supports-color@^5.5.0: 1219 | version "5.5.0" 1220 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" 1221 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== 1222 | dependencies: 1223 | has-flag "^3.0.0" 1224 | 1225 | supports-color@^7.1.0: 1226 | version "7.2.0" 1227 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 1228 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 1229 | dependencies: 1230 | has-flag "^4.0.0" 1231 | 1232 | term-size@^2.1.0: 1233 | version "2.2.1" 1234 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54" 1235 | integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg== 1236 | 1237 | to-readable-stream@^1.0.0: 1238 | version "1.0.0" 1239 | resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" 1240 | integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== 1241 | 1242 | to-regex-range@^5.0.1: 1243 | version "5.0.1" 1244 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 1245 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 1246 | dependencies: 1247 | is-number "^7.0.0" 1248 | 1249 | toidentifier@1.0.0: 1250 | version "1.0.0" 1251 | resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" 1252 | integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== 1253 | 1254 | touch@^3.1.0: 1255 | version "3.1.0" 1256 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 1257 | integrity sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA== 1258 | dependencies: 1259 | nopt "~1.0.10" 1260 | 1261 | type-fest@^0.8.1: 1262 | version "0.8.1" 1263 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" 1264 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== 1265 | 1266 | type-is@~1.6.17, type-is@~1.6.18: 1267 | version "1.6.18" 1268 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" 1269 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== 1270 | dependencies: 1271 | media-typer "0.3.0" 1272 | mime-types "~2.1.24" 1273 | 1274 | typedarray-to-buffer@^3.1.5: 1275 | version "3.1.5" 1276 | resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" 1277 | integrity sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q== 1278 | dependencies: 1279 | is-typedarray "^1.0.0" 1280 | 1281 | undefsafe@^2.0.3: 1282 | version "2.0.3" 1283 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.3.tgz#6b166e7094ad46313b2202da7ecc2cd7cc6e7aae" 1284 | integrity sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A== 1285 | dependencies: 1286 | debug "^2.2.0" 1287 | 1288 | unique-string@^2.0.0: 1289 | version "2.0.0" 1290 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-2.0.0.tgz#39c6451f81afb2749de2b233e3f7c5e8843bd89d" 1291 | integrity sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg== 1292 | dependencies: 1293 | crypto-random-string "^2.0.0" 1294 | 1295 | unpipe@1.0.0, unpipe@~1.0.0: 1296 | version "1.0.0" 1297 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 1298 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= 1299 | 1300 | update-notifier@^4.1.0: 1301 | version "4.1.3" 1302 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-4.1.3.tgz#be86ee13e8ce48fb50043ff72057b5bd598e1ea3" 1303 | integrity sha512-Yld6Z0RyCYGB6ckIjffGOSOmHXj1gMeE7aROz4MG+XMkmixBX4jUngrGXNYz7wPKBmtoD4MnBa2Anu7RSKht/A== 1304 | dependencies: 1305 | boxen "^4.2.0" 1306 | chalk "^3.0.0" 1307 | configstore "^5.0.1" 1308 | has-yarn "^2.1.0" 1309 | import-lazy "^2.1.0" 1310 | is-ci "^2.0.0" 1311 | is-installed-globally "^0.3.1" 1312 | is-npm "^4.0.0" 1313 | is-yarn-global "^0.3.0" 1314 | latest-version "^5.0.0" 1315 | pupa "^2.0.1" 1316 | semver-diff "^3.1.1" 1317 | xdg-basedir "^4.0.0" 1318 | 1319 | url-parse-lax@^3.0.0: 1320 | version "3.0.0" 1321 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" 1322 | integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= 1323 | dependencies: 1324 | prepend-http "^2.0.0" 1325 | 1326 | util-deprecate@~1.0.1: 1327 | version "1.0.2" 1328 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 1329 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= 1330 | 1331 | utils-merge@1.0.1: 1332 | version "1.0.1" 1333 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 1334 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= 1335 | 1336 | vary@^1, vary@~1.1.2: 1337 | version "1.1.2" 1338 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 1339 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= 1340 | 1341 | widest-line@^3.1.0: 1342 | version "3.1.0" 1343 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" 1344 | integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== 1345 | dependencies: 1346 | string-width "^4.0.0" 1347 | 1348 | wrappy@1: 1349 | version "1.0.2" 1350 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 1351 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= 1352 | 1353 | write-file-atomic@^3.0.0: 1354 | version "3.0.3" 1355 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz#56bd5c5a5c70481cd19c571bd39ab965a5de56e8" 1356 | integrity sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q== 1357 | dependencies: 1358 | imurmurhash "^0.1.4" 1359 | is-typedarray "^1.0.0" 1360 | signal-exit "^3.0.2" 1361 | typedarray-to-buffer "^3.1.5" 1362 | 1363 | xdg-basedir@^4.0.0: 1364 | version "4.0.0" 1365 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13" 1366 | integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q== 1367 | -------------------------------------------------------------------------------- /src/components/FirstStep.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useForm } from 'react-hook-form'; 3 | import { Form, Button } from 'react-bootstrap'; 4 | import { motion } from 'framer-motion'; 5 | 6 | const FirstStep = (props) => { 7 | const { user } = props; 8 | const { register, handleSubmit, errors } = useForm({ 9 | defaultValues: { 10 | first_name: user.first_name, 11 | last_name: user.last_name 12 | } 13 | }); 14 | 15 | const onSubmit = (data) => { 16 | props.updateUser(data); 17 | props.history.push('/second'); 18 | }; 19 | 20 | return ( 21 |
22 | 28 | 29 | First Name 30 | 44 | {errors.first_name && ( 45 |

{errors.first_name.message}

46 | )} 47 |
48 | 49 | 50 | Last Name 51 | 65 | {errors.last_name && ( 66 |

{errors.last_name.message}

67 | )} 68 |
69 | 70 | 73 |
74 |
75 | ); 76 | }; 77 | 78 | export default FirstStep; 79 | -------------------------------------------------------------------------------- /src/components/Header.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Progress from './Progress'; 3 | 4 | const Header = () => ( 5 |
6 |

Multi Step Registration

7 | 8 |
9 | ); 10 | 11 | export default Header; 12 | -------------------------------------------------------------------------------- /src/components/Login.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import { useForm } from 'react-hook-form'; 3 | import { Form, Button } from 'react-bootstrap'; 4 | import axios from 'axios'; 5 | import { BASE_API_URL } from '../utils/constants'; 6 | 7 | const Login = () => { 8 | const { register, handleSubmit, errors } = useForm(); 9 | const [successMessage, setSuccessMessage] = useState(''); 10 | const [errorMessage, setErrorMessage] = useState(''); 11 | const [userDetails, setUserDetails] = useState(''); 12 | 13 | const onSubmit = async (data) => { 14 | console.log(data); 15 | 16 | try { 17 | const response = await axios.post(`${BASE_API_URL}/login`, data); 18 | setSuccessMessage('User with the provided credentials found.'); 19 | setErrorMessage(''); 20 | setUserDetails(response.data); 21 | } catch (error) { 22 | console.log(error); 23 | if (error.response) { 24 | console.log('error', error.response.data); 25 | setErrorMessage(error.response.data); 26 | } 27 | } 28 | }; 29 | 30 | return ( 31 |
32 |
33 | {errorMessage ? ( 34 |

{errorMessage}

35 | ) : ( 36 |
37 |

{successMessage}

38 | 39 | {userDetails && ( 40 |
41 |

Following are the user details:

42 |
First name: {userDetails.first_name}
43 |
Last name: {userDetails.last_name}
44 |
Email: {userDetails.user_email}
45 |
Country: {userDetails.country}
46 |
State: {userDetails.state}
47 |
City: {userDetails.city}
48 |
49 | )} 50 |
51 | )} 52 | 53 | Email 54 | 67 | {errors.user_email && ( 68 |

{errors.user_email.message}

69 | )} 70 |
71 | 72 | 73 | Password 74 | 87 | {errors.user_password && ( 88 |

{errors.user_password.message}

89 | )} 90 |
91 | 92 | 95 |
96 |
97 | ); 98 | }; 99 | 100 | export default Login; 101 | -------------------------------------------------------------------------------- /src/components/Progress.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link, withRouter } from 'react-router-dom'; 3 | 4 | const Progress = ({ location: { pathname } }) => { 5 | const isFirstStep = pathname === '/'; 6 | const isSecondStep = pathname === '/second'; 7 | const isThirdStep = pathname === '/third'; 8 | const isLoginPage = pathname === '/login'; 9 | 10 | return ( 11 | 12 | {!isLoginPage ? ( 13 |
14 |
15 |
1
16 |
17 | {isSecondStep || isThirdStep ? ( 18 | Step 1 19 | ) : ( 20 | 'Step 1' 21 | )} 22 |
23 |
24 |
25 |
2
26 |
27 | {isThirdStep ? Step 2 : 'Step 2'} 28 |
29 |
30 |
31 |
3
32 |
Step 3
33 |
34 |
35 | ) : ( 36 |
37 | )} 38 |
39 | ); 40 | }; 41 | 42 | export default withRouter(Progress); 43 | -------------------------------------------------------------------------------- /src/components/SecondStep.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { useForm } from 'react-hook-form'; 3 | import { Form, Button } from 'react-bootstrap'; 4 | import { motion } from 'framer-motion'; 5 | 6 | const SecondStep = (props) => { 7 | const { user } = props; 8 | const { register, handleSubmit, errors } = useForm({ 9 | defaultValues: { 10 | user_email: user.user_email, 11 | user_password: user.user_password 12 | } 13 | }); 14 | 15 | const onSubmit = (data) => { 16 | props.updateUser(data); 17 | props.history.push('/third'); 18 | }; 19 | 20 | return ( 21 |
22 | 28 | 29 | Email 30 | 44 | {errors.user_email && ( 45 |

{errors.user_email.message}

46 | )} 47 |
48 | 49 | 50 | Password 51 | 65 | {errors.user_password && ( 66 |

{errors.user_password.message}

67 | )} 68 |
69 | 70 | 73 |
74 |
75 | ); 76 | }; 77 | 78 | export default SecondStep; 79 | -------------------------------------------------------------------------------- /src/components/ThirdStep.js: -------------------------------------------------------------------------------- 1 | import React, { useState, useEffect } from 'react'; 2 | import { Form, Button } from 'react-bootstrap'; 3 | import csc from 'country-state-city'; 4 | import axios from 'axios'; 5 | import { motion } from 'framer-motion'; 6 | import Swal from 'sweetalert2'; 7 | import { BASE_API_URL } from '../utils/constants'; 8 | 9 | const ThirdStep = (props) => { 10 | const [countries, setCountries] = useState([]); 11 | const [states, setStates] = useState([]); 12 | const [cities, setCities] = useState([]); 13 | const [isLoading, setIsLoading] = useState(false); 14 | 15 | const [selectedCountry, setSelectedCountry] = useState(''); 16 | const [selectedState, setSelectedState] = useState(''); 17 | const [selectedCity, setSelectedCity] = useState(''); 18 | 19 | useEffect(() => { 20 | const getCountries = async () => { 21 | try { 22 | setIsLoading(true); 23 | const result = await csc.getAllCountries(); 24 | let allCountries = []; 25 | allCountries = result?.map(({ isoCode, name }) => ({ 26 | isoCode, 27 | name 28 | })); 29 | const [{ isoCode: firstCountry } = {}] = allCountries; 30 | setCountries(allCountries); 31 | setSelectedCountry(firstCountry); 32 | setIsLoading(false); 33 | } catch (error) { 34 | setCountries([]); 35 | setIsLoading(false); 36 | } 37 | }; 38 | 39 | getCountries(); 40 | }, []); 41 | 42 | useEffect(() => { 43 | const getStates = async () => { 44 | try { 45 | const result = await csc.getStatesOfCountry(selectedCountry); 46 | let allStates = []; 47 | allStates = result?.map(({ isoCode, name }) => ({ 48 | isoCode, 49 | name 50 | })); 51 | const [{ isoCode: firstState = '' } = {}] = allStates; 52 | setCities([]); 53 | setSelectedCity(''); 54 | setStates(allStates); 55 | setSelectedState(firstState); 56 | } catch (error) { 57 | setStates([]); 58 | setCities([]); 59 | setSelectedCity(''); 60 | } 61 | }; 62 | 63 | getStates(); 64 | }, [selectedCountry]); 65 | 66 | useEffect(() => { 67 | const getCities = async () => { 68 | try { 69 | const result = await csc.getCitiesOfState( 70 | selectedCountry, 71 | selectedState 72 | ); 73 | let allCities = []; 74 | allCities = result?.map(({ name }) => ({ 75 | name 76 | })); 77 | const [{ name: firstCity = '' } = {}] = allCities; 78 | setCities(allCities); 79 | setSelectedCity(firstCity); 80 | } catch (error) { 81 | setCities([]); 82 | } 83 | }; 84 | 85 | getCities(); 86 | }, [selectedState]); 87 | 88 | const handleSubmit = async (event) => { 89 | event.preventDefault(); 90 | 91 | try { 92 | const { user } = props; 93 | const updatedData = { 94 | country: countries.find( 95 | (country) => country.isoCode === selectedCountry 96 | )?.name, 97 | state: 98 | states.find((state) => state.isoCode === selectedState)?.name || '', // or condition added because selectedState might come as undefined 99 | city: selectedCity 100 | }; 101 | 102 | await axios.post(`${BASE_API_URL}/register`, { 103 | ...user, 104 | ...updatedData 105 | }); 106 | Swal.fire('Awesome!', "You're successfully registered!", 'success').then( 107 | (result) => { 108 | if (result.isConfirmed || result.isDismissed) { 109 | props.resetUser(); 110 | props.history.push('/'); 111 | } 112 | } 113 | ); 114 | } catch (error) { 115 | if (error.response) { 116 | Swal.fire({ 117 | icon: 'error', 118 | title: 'Oops...', 119 | text: error.response.data 120 | }); 121 | console.log('error', error.response.data); 122 | } 123 | } 124 | }; 125 | 126 | return ( 127 |
128 | 134 | 135 | {isLoading && ( 136 |

Loading countries. Please wait...

137 | )} 138 | Country 139 | setSelectedCountry(event.target.value)} 144 | > 145 | {countries.map(({ isoCode, name }) => ( 146 | 149 | ))} 150 | 151 |
152 | 153 | 154 | State 155 | setSelectedState(event.target.value)} 160 | > 161 | {states.length > 0 ? ( 162 | states.map(({ isoCode, name }) => ( 163 | 166 | )) 167 | ) : ( 168 | 171 | )} 172 | 173 | 174 | 175 | 176 | City 177 | setSelectedCity(event.target.value)} 182 | > 183 | {cities.length > 0 ? ( 184 | cities.map(({ name }) => ( 185 | 188 | )) 189 | ) : ( 190 | 191 | )} 192 | 193 | 194 | 195 | 198 |
199 |
200 | ); 201 | }; 202 | 203 | export default ThirdStep; 204 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import AppRouter from './router/AppRouter'; 4 | import 'bootstrap/dist/css/bootstrap.min.css'; 5 | import './styles.scss'; 6 | 7 | ReactDOM.render(, document.getElementById('root')); 8 | -------------------------------------------------------------------------------- /src/router/AppRouter.js: -------------------------------------------------------------------------------- 1 | import React, { useState } from 'react'; 2 | import { BrowserRouter, Redirect, Route, Switch } from 'react-router-dom'; 3 | import FirstStep from '../components/FirstStep'; 4 | import Header from '../components/Header'; 5 | import Login from '../components/Login'; 6 | import SecondStep from '../components/SecondStep'; 7 | import ThirdStep from '../components/ThirdStep'; 8 | 9 | const AppRouter = () => { 10 | const [user, setUser] = useState({}); 11 | 12 | const updateUser = (data) => { 13 | setUser((prevUser) => ({ ...prevUser, ...data })); 14 | }; 15 | 16 | const resetUser = () => { 17 | setUser({}); 18 | }; 19 | 20 | return ( 21 | 22 |
23 |
24 | 25 | ( 27 | 28 | )} 29 | path="/" 30 | exact={true} 31 | /> 32 | ( 34 | 35 | )} 36 | path="/second" 37 | /> 38 | ( 40 | 46 | )} 47 | path="/third" 48 | /> 49 | 50 | } /> 51 | 52 |
53 |
54 | ); 55 | }; 56 | 57 | export default AppRouter; 58 | -------------------------------------------------------------------------------- /src/styles.scss: -------------------------------------------------------------------------------- 1 | $base-color: #e67e22; 2 | $blue-color: #22ac11; 3 | 4 | * { 5 | margin: 0; 6 | padding: 0; 7 | box-sizing: border-box; 8 | } 9 | 10 | body { 11 | font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; 12 | color: $base-color; 13 | } 14 | 15 | .form-control:focus { 16 | outline: none; 17 | box-shadow: none; 18 | color: unset; 19 | background-color: unset; 20 | border-color: unset; 21 | } 22 | 23 | h1 { 24 | text-align: center; 25 | margin-top: 1rem; 26 | font-size: 2.2rem; 27 | } 28 | 29 | .btn { 30 | letter-spacing: 1px; 31 | } 32 | 33 | .steps { 34 | display: flex; 35 | justify-content: center; 36 | letter-spacing: 1px; 37 | margin-top: 2rem; 38 | 39 | .step { 40 | margin: 0.5rem 3rem; 41 | display: flex; 42 | color: #ccc; 43 | 44 | a { 45 | color: $base-color; 46 | } 47 | 48 | div:first-of-type { 49 | border: 1px solid #ccc; 50 | padding: 5px; 51 | border-radius: 50%; 52 | margin-right: 0.5rem; 53 | width: 2rem; 54 | height: 2rem; 55 | text-align: center; 56 | line-height: 100%; 57 | padding-top: 7%; 58 | } 59 | 60 | :last-child { 61 | margin-top: 3%; 62 | } 63 | 64 | &.active { 65 | div:first-of-type { 66 | background-color: $base-color; 67 | border: 1px solid transparent; 68 | color: #fff; 69 | } 70 | 71 | div:last-of-type { 72 | color: $base-color; 73 | } 74 | } 75 | } 76 | } 77 | 78 | .input-form { 79 | width: 60%; 80 | margin: 3rem auto; 81 | } 82 | 83 | .errorMsg { 84 | max-width: 350px; 85 | color: #f21e08; 86 | padding: 2px 0; 87 | margin-top: 2px; 88 | font-size: 14px; 89 | font-weight: 300; 90 | } 91 | 92 | .login-error { 93 | font-size: 1.1rem; 94 | } 95 | 96 | .successMsg { 97 | color: $blue-color; 98 | } 99 | 100 | .loading { 101 | color: #777; 102 | } 103 | 104 | .form-control.input-error { 105 | border: 2px solid #f21e08; 106 | } 107 | 108 | .user-details { 109 | color: $blue-color; 110 | padding: 5px 0; 111 | margin-bottom: 1rem; 112 | } 113 | 114 | @media screen and (max-width: 1200px) { 115 | .input-form { 116 | width: 90%; 117 | } 118 | } 119 | 120 | @media screen and (max-width: 900px) { 121 | .steps .step { 122 | margin: 0.5rem 2rem; 123 | } 124 | } 125 | 126 | @media screen and (max-width: 600px) { 127 | h1 { 128 | font-size: 2rem; 129 | } 130 | 131 | .steps .step { 132 | margin: 0.5rem 1rem; 133 | font-size: 0.9rem; 134 | 135 | div:first-of-type { 136 | padding-top: 9%; 137 | } 138 | } 139 | } 140 | 141 | @media screen and (max-width: 400px) { 142 | .steps { 143 | flex-direction: column; 144 | align-items: center; 145 | 146 | .step { 147 | align-items: center; 148 | } 149 | } 150 | } 151 | -------------------------------------------------------------------------------- /src/utils/constants.js: -------------------------------------------------------------------------------- 1 | export const BASE_API_URL = ''; 2 | --------------------------------------------------------------------------------