├── .github └── ISSUE_TEMPLATE │ ├── bug.yaml │ ├── documentation.yaml │ └── features.yaml ├── .gitignore ├── CONTRIBUTING.md ├── README.md ├── SETUP_GUIDE.md ├── package-lock.json ├── package.json ├── public ├── _redirects ├── favicon.ico ├── index.html ├── logo.png ├── logo192.png ├── logo512.png ├── manifest.json └── robots.txt ├── server ├── .env.sample ├── .gitignore ├── app.js ├── db │ └── mongoose.js ├── middleware │ └── auth.js ├── models │ └── User.js ├── package-lock.json ├── package.json └── routes │ └── user.js └── src ├── Actions ├── currentLanguage.js ├── fontSize.js └── theme.js ├── App.js ├── App.scss ├── Components ├── CodeEditor │ ├── CodeEditor.js │ └── CodeEditor.scss ├── Header │ ├── Header.js │ └── Header.scss ├── Main │ ├── Main.js │ └── Main.scss ├── Notification │ ├── Notification.js │ └── Notification.scss ├── Terminal │ ├── Terminal.js │ └── Terminal.scss └── WhiteBoard │ ├── components │ ├── ColourPicker.js │ ├── Swatch.js │ ├── download.js │ └── element.js │ ├── index.js │ ├── styles.css │ └── theme │ ├── styles.js │ └── svg.js ├── Reducers ├── currentLanguage.js ├── fontSize.js ├── languages.js └── theme.js ├── axios.js ├── data └── languages.json ├── index.js ├── index.scss ├── pages ├── Home.js ├── NotFound │ ├── NotFound.scss │ └── index.js └── Sketch.js ├── reportWebVitals.js └── store.js /.github/ISSUE_TEMPLATE/bug.yaml: -------------------------------------------------------------------------------- 1 | name: 🐛 Bug Report 2 | description: Report an issue to help improve the project 3 | title: "[Bug]: " 4 | labels: ["bug", "triage"] 5 | assignees: 6 | - octocat 7 | body: 8 | - type: markdown 9 | attributes: 10 | value: | 11 | Thanks for taking the time to fill out this bug report! 12 | - type: input 13 | id: contact 14 | attributes: 15 | label: Contact Details 16 | description: How can we get in touch with you if we need more info? 17 | placeholder: ex. email@example.com 18 | validations: 19 | required: true 20 | - type: textarea 21 | id: what-happened 22 | attributes: 23 | label: What happened? 24 | description: Also tell us, what did you expect to happen? 25 | placeholder: Tell us what you see! 26 | value: "A bug happened!" 27 | validations: 28 | required: true 29 | - type: textarea 30 | id: logs 31 | attributes: 32 | label: Relevant log output 33 | description: Please copy and paste any relevant log output. This will be automatically formatted into code, so no need for backticks. 34 | render: shell 35 | - type: checkboxes 36 | id: terms 37 | attributes: 38 | label: Code of Conduct 39 | description: By submitting this issue, you agree to follow our Code of Conduct. 40 | options: 41 | - label: I agree to follow this project's Code of Conduct 42 | required: true -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/documentation.yaml: -------------------------------------------------------------------------------- 1 | name: 📄 Documentation 2 | description: Report an issue related to documentation 3 | title: "Documentation: " 4 | labels: ["documentation"] 5 | assignees: 6 | - octocat 7 | body: 8 | - type: markdown 9 | attributes: 10 | value: | 11 | Thanks for taking the time to make our documentation better 12 | - type: textarea 13 | id: what-happened 14 | attributes: 15 | label: Description 16 | description: A clear and concise description of what the issue is. 17 | placeholder: Tell us what you see! 18 | validations: 19 | required: true 20 | - type: checkboxes 21 | id: no_prev_same 22 | attributes: 23 | label: 👀 Have you spent some time to check if this issue has been raised before? 24 | description: Have you Googled for a similar issue or checked our older issues for a similar bug? 25 | options: 26 | - label: I checked and didn't find similar issue 27 | required: true 28 | - type: checkboxes 29 | id: terms 30 | attributes: 31 | label: 🏢 Have you read the Code of Conduct? 32 | description: By submitting this issue, you agree to follow our Code of Conduct. 33 | options: 34 | - label: I agree to follow this project's Code of Conduct 35 | required: true -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/features.yaml: -------------------------------------------------------------------------------- 1 | name: 💡 Feature 2 | description: Submit a proposal for a new feature 3 | title: "Feature: " 4 | labels: ["enhancement"] 5 | assignees: 6 | - octocat 7 | body: 8 | - type: markdown 9 | attributes: 10 | value: | 11 | Thanks for taking the time to fill out our feature request form 12 | - type: textarea 13 | id: what-happened 14 | attributes: 15 | label: Feature description 16 | description: A clear and concise description of what the feature is. 17 | placeholder: You should add ... 18 | validations: 19 | required: true 20 | - type: checkboxes 21 | id: no_prev_same 22 | attributes: 23 | label: 👀 Have you spent some time to check if this issue has been raised before? 24 | description: Have you Googled for a similar issue or checked our older issues for a similar bug? 25 | options: 26 | - label: I checked and didn't find similar issue 27 | required: true 28 | - type: checkboxes 29 | id: terms 30 | attributes: 31 | label: 🏢 Have you read the Code of Conduct? 32 | description: By submitting this issue, you agree to follow our Code of Conduct. 33 | options: 34 | - label: I agree to follow this project's Code of Conduct 35 | required: true -------------------------------------------------------------------------------- /.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 | .env 9 | 10 | # testing 11 | /coverage 12 | 13 | # production 14 | /build 15 | 16 | # misc 17 | .DS_Store 18 | .env.local 19 | .env.development.local 20 | .env.test.local 21 | .env.production.local 22 | 23 | npm-debug.log* 24 | yarn-debug.log* 25 | yarn-error.log* 26 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # 📃 Contribution Guide 2 | 3 | ## 🤔 How to contribute? 4 | 5 | Here are the steps you can follow to start contributing: 6 | 7 | **Step 1:** From the issues page, select an issue which you think you can solve. 8 | 9 | **Step 2:** Fork the repository using the `Fork` option on the top-right corner of the page. 10 | 11 | **Step 3:** Clone forked version on your local machine: 12 | 13 | ```git 14 | git clone https://github.com//hashdefine-onlineIDE.git 15 | ``` 16 | 17 | **Step 4:** Go inside cloned folder and add the original repository as `upstream`: 18 | 19 | ```git 20 | git remote add upstream https://github.com/hash-define-organization/hashdefine-onlineIDE.git 21 | ``` 22 | 23 | **Step 5:** Setup the project on your local machine (read the [setup guide](./SETUP_GUIDE.md)) 24 | 25 | **Step 6:** Checkout to a new branch: 26 | 27 | ```git 28 | git brach -b 29 | ``` 30 | 31 | (you can use the following format for the branch name: `-issue-`) 32 | 33 | **Step 7:** Make the desired changes to the code base. Also, before moving to the next step, make sure: 34 | 35 | - [x] Code follows the style guidelines of this project 36 | - [x] You have performed a self-review of my your own code 37 | - [x] You have commented your code, particularly in hard-to-understand areas 38 | - [x] You have made corresponding changes to the documentation 39 | - [x] Your changes generate no new warnings 40 | 41 | **Step 8:** Stage the changes, create a commit, and finally push the code to your forked repository: 42 | 43 | ```git 44 | # stage all the changes 45 | git add . 46 | 47 | # commit the staged changes 48 | git commit -m "" 49 | 50 | # push the code 51 | git push origin 52 | ``` 53 | 54 | **Step 9:** Create a pull request: 55 | 56 | 1. Go to the `pull requests` page on the original repository. 57 | 2. Click on `compare & pull request` option visible on the top. 58 | 3. Follow the Pull Request template provided to add the details. 59 | 4. Now click on `Create pull request`. 60 | 61 | **Step 10:** Discuss with the mentors if any changes are required on the pull request, before it gets merged. 62 | 63 | That it 🎉 64 | 65 | ## 🤔 What if all the issues are already assigned? 66 | 67 | If all the issues are already assigned, you can create your own issues. 68 | 69 | > NOTE: While creating your own issues, make sure to strictly follow the provided issue template. You can leave things blank which are not applicable, but just follow the pattern. 70 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Hash IDE 2 | 3 | ![image](https://user-images.githubusercontent.com/78612380/151775878-17907171-53cd-44b4-80f8-58426da8f8cd.png) 4 | 5 | ## 6 | [![forthebadge](https://forthebadge.com/images/badges/open-source.svg)](https://forthebadge.com) [![forthebadge](https://forthebadge.com/images/badges/built-with-love.svg)](https://forthebadge.com) [![forthebadge](https://forthebadge.com/images/badges/made-with-crayons.svg)](https://forthebadge.com) [![forthebadge](https://forthebadge.com/images/badges/made-with-javascript.svg)](https://forthebadge.com) 7 | 8 | This is Hash-IDE, made with ReactJS, NodeJS, Mongo, Express, Material-UI. 9 | 10 | # Motive 11 | 12 | This Repository is created with a motive to guide beginners with the open-source and with big react projects. I have already created some issues for the beginners so that they can work on them and even make there first contribution in this repository. For now we have open sourced the frontend only. 13 | 14 | # Instructions 15 | 16 | You can test this project in your create-react-app feature by replacing the files. 17 | 18 | # Supported Platforms 19 | 20 | This app can be built on any platform. It can be Windows, Linux , MacOS or any other. You only need the create-react-app feature and rest is in the Dependencies section. 21 | 22 | # Dependencies 23 | 24 | I am writing down the Dependencies for beginners, so that they can look into it and then understand and install them if they want to. 25 | 26 | * ReactJS 27 | * NodeJS 28 | * Socket-IO 29 | 30 | # Installation and Setup 31 | 32 | 1. Fork the Repository 33 | 34 | image 35 | 36 | 2. Clone the Forked Repository to your local machine. 37 | ``` 38 | git clone https://github.com//hashdefine-onlineIDE.git. 39 | ``` 40 | 41 | 3. Change the directory to HashIDE. 42 | ```bash 43 | cd hashdefine-onlineIDE 44 | ``` 45 | 46 | 4. Add remote to the Original Repository. 47 | ``` 48 | git remote add upstream https://github.com/hash-define-organization/hashdefine-onlineIDE.git 49 | ``` 50 | 51 | 5. Install the dependecies. 52 | ```node 53 | npm install 54 | ``` 55 | 56 | 6. Run the application. 57 | ```node 58 | npm start 59 | ``` 60 | 61 | 7. The app starts on `localhost:3000`. If not, [Click here](http://localhost:3000) to open the app in browser. 62 | 63 | # Connect with me 64 | 65 | * [Twitter](https://twitter.com/vaibhavvp_) 66 | * [Gmail](vaibhavpaliwal24@gmail.com) 67 | * [LinkedIn](https://www.linkedin.com/in/vp7/) 68 | 69 | # Show your support 70 | 71 | Give a ⭐ if you like this web-app. 72 | 73 | # FAQs 74 | 75 | ## 1. I am a beginner with open source or with react can I contribute in this repository ? 76 | We encourage everyone to contribute to this project. Feel free to pick an issue, share your ideas, and collaborate on it. We're here to guide you every step of the way ❤️ 77 | 78 | ## 2. What are the steps to make my first contribution ? 79 | Kindly refer to the [contributing.md](/CONTRIBUTING.md) file. All the contributing guidelines are written over there. 80 | 81 | ## 3. Is there any need to assign myself to the issue before starting to work on the issue ? 82 | We encourage everyone to contribute to this project. Feel free to pick an issue, share your ideas, and collaborate on it. We're here to guide you every step of the way ❤️. 83 | 84 | ## Contributors 85 | 86 | 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /SETUP_GUIDE.md: -------------------------------------------------------------------------------- 1 | # 📃 SETUP GUIDE 2 | 3 | ## ❗ System Requirements 4 | 5 | - [Git](https://git-scm.com/downloads): Version control system. 6 | 7 | - [Node.js](https://nodejs.org/en/): JavaScript runtime built on Chrome's V8 JavaScript engine (Please go with any latest LTS versions) 8 | 9 | - [Google Chrome](https://www.google.com/chrome/) (or a decent latest web browser) 10 | 11 | - [Visual Studio Code](https://code.visualstudio.com/) (or any other code editor). 12 | 13 | - [Prettier - Code formatter](https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode): helps you to format your JavaScript / TypeScript / CSS using [Prettier](https://github.com/prettier/prettier). 14 | 15 | 16 | ## 🛠 Local Installation and Setup 17 | 18 | 1. Clone the repo to your local machine. 19 | 2. Install the required dependency for server using : 20 | 21 | ```javascript 22 | npm install 23 | ``` 24 | 25 | 3. Create a `.env` file and copy-paste the contents of `.env.sample` in it inside backend folder. 26 | 27 | 4. Start the dev server using : 28 | 29 | ```javascript 30 | npm start 31 | ``` 32 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@emotion/react": "^11.7.0", 7 | "@emotion/styled": "^11.6.0", 8 | "@monaco-editor/react": "^4.3.1", 9 | "@mui/icons-material": "^5.2.1", 10 | "@mui/material": "^5.2.3", 11 | "@testing-library/jest-dom": "^5.16.1", 12 | "@testing-library/react": "^11.2.7", 13 | "@testing-library/user-event": "^12.8.3", 14 | "axios": "^0.24.0", 15 | "bootstrap": "^5.1.3", 16 | "react": "^17.0.2", 17 | "react-color": "^2.19.3", 18 | "react-color-palette": "^6.2.0", 19 | "react-dom": "^17.0.2", 20 | "react-monaco-editor": "^0.46.0", 21 | "react-redux": "^7.2.6", 22 | "react-router-dom": "^6.2.2", 23 | "react-scripts": "^5.0.1", 24 | "reactcss": "^1.2.3", 25 | "redux": "^4.1.2", 26 | "roughjs": "^4.5.2", 27 | "sass": "^1.49.0", 28 | "web-vitals": "^1.1.2" 29 | }, 30 | "scripts": { 31 | "start": "react-scripts start", 32 | "build": "react-scripts build", 33 | "test": "react-scripts test", 34 | "eject": "react-scripts eject" 35 | }, 36 | "eslintConfig": { 37 | "extends": [ 38 | "react-app", 39 | "react-app/jest" 40 | ] 41 | }, 42 | "browserslist": { 43 | "production": [ 44 | ">0.2%", 45 | "not dead", 46 | "not op_mini all" 47 | ], 48 | "development": [ 49 | "last 1 chrome version", 50 | "last 1 firefox version", 51 | "last 1 safari version" 52 | ] 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /public/_redirects: -------------------------------------------------------------------------------- 1 | /* /index.html 200 -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hash-define-organization/hashdefine-onlineIDE/4b44318f6f5a099ce6018c2b51d382d8136af3f9/public/favicon.ico -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 17 | 18 | 27 | Define IDE 28 | 29 | 30 | 31 |
32 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /public/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hash-define-organization/hashdefine-onlineIDE/4b44318f6f5a099ce6018c2b51d382d8136af3f9/public/logo.png -------------------------------------------------------------------------------- /public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hash-define-organization/hashdefine-onlineIDE/4b44318f6f5a099ce6018c2b51d382d8136af3f9/public/logo192.png -------------------------------------------------------------------------------- /public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hash-define-organization/hashdefine-onlineIDE/4b44318f6f5a099ce6018c2b51d382d8136af3f9/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/.env.sample: -------------------------------------------------------------------------------- 1 | PASSWORD=dummypassword 2 | PORT=5000 3 | SECRET=hello 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /server/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /server/app.js: -------------------------------------------------------------------------------- 1 | require('./db/mongoose.js') 2 | const express=require('express') 3 | const app=express() 4 | const dotenv=require('dotenv').config() 5 | const port=process.env.PORT || 5000 6 | app.use(express.json()) 7 | 8 | const userRoute=require('./routes/user') 9 | app.use(userRoute) 10 | 11 | 12 | app.listen(port,()=>{ 13 | console.log("Server started on "+process.env.PORT) 14 | }) -------------------------------------------------------------------------------- /server/db/mongoose.js: -------------------------------------------------------------------------------- 1 | const mongoose=require('mongoose') 2 | require('dotenv').config() 3 | 4 | 5 | // Instead of dummy password use ur MongoDB Atlas credentials 6 | // PASSWORD value can be changed in .env 7 | // .env file is ignored by git thus deliberately renamed it as .env.sample 8 | 9 | const DB='mongodb+srv://dbUser:'+process.env.PASSWORD+'@cluster0.45ipq.mongodb.net/hashIDE?retryWrites=true&w=majority&ssl=true' 10 | mongoose.connect(DB, { 11 | useNewUrlParser: true, 12 | useUnifiedTopology: true 13 | }) 14 | .then(() => 15 | console.log("DATABASE CONNECTED")) 16 | .catch(err => console.log(err)); 17 | -------------------------------------------------------------------------------- /server/middleware/auth.js: -------------------------------------------------------------------------------- 1 | const jwt=require('jsonwebtoken') 2 | const User=require('../models/User') 3 | require('dotenv').config() 4 | 5 | const auth=async (req,res,next)=>{ 6 | try{ 7 | const token=req.header('auth-token') 8 | const decoded=jwt.verify(token,"hello") 9 | const user= await User.findOne({_id:decoded._id,'tokens.token':token}) 10 | if(!user){ 11 | throw new Error() 12 | } 13 | req.token=token 14 | req.user=user 15 | next() 16 | }catch(e){ 17 | res.status(401).send({'error':'Please Authenticate'}) 18 | } 19 | } 20 | module.exports=auth -------------------------------------------------------------------------------- /server/models/User.js: -------------------------------------------------------------------------------- 1 | const mongoose=require('mongoose') 2 | const validator = require('validator') 3 | const bcrypt = require('bcryptjs') 4 | const jwt=require('jsonwebtoken') 5 | require('dotenv').config() 6 | 7 | const userSchema = new mongoose.Schema({ 8 | username: { 9 | type: String, 10 | unique:true, 11 | required: true, 12 | trim: true 13 | }, 14 | password: { 15 | type: String, 16 | required: true, 17 | minlength: 7, 18 | trim: true, 19 | validate(value) { 20 | if (value.toLowerCase().includes('password')) { 21 | throw new Error('Password cannot contain "password"') 22 | } 23 | } 24 | }, 25 | collegeName:{ 26 | type:String 27 | }, 28 | tokens:[{ 29 | token:{ 30 | type:String, 31 | required:true 32 | } 33 | }], 34 | LanguagesKnown:[{ 35 | language:{ 36 | type:String 37 | } 38 | }] 39 | }) 40 | 41 | userSchema.pre('save', async function (next) { 42 | const user = this 43 | if (user.isModified('password')) { 44 | user.password = await bcrypt.hash(user.password,8) 45 | } 46 | next() 47 | }) 48 | 49 | 50 | userSchema.statics.findByCredentials = async (username, password) =>{ 51 | const user = await User.findOne({username: username}) 52 | if(!user){ 53 | throw new Error('unable to login') 54 | } 55 | const isMatch = await bcrypt.compare(password, user.password) 56 | if(!isMatch){ 57 | throw new Error('unable to login') 58 | } 59 | return user 60 | } 61 | 62 | 63 | // Generating the JWT-Authentication-Token 64 | userSchema.methods.generateAuthToken=async function(){ 65 | const user=this 66 | const token=jwt.sign({_id:user._id.toString()},"hello") 67 | user.tokens=user.tokens.concat({token}) 68 | await user.save() 69 | return token 70 | } 71 | 72 | const User=mongoose.model('User', userSchema) 73 | module.exports=User -------------------------------------------------------------------------------- /server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@mapbox/node-pre-gyp": { 8 | "version": "1.0.8", 9 | "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.8.tgz", 10 | "integrity": "sha512-CMGKi28CF+qlbXh26hDe6NxCd7amqeAzEqnS6IHeO6LoaKyM/n+Xw3HT1COdq8cuioOdlKdqn/hCmqPUOMOywg==", 11 | "requires": { 12 | "detect-libc": "^1.0.3", 13 | "https-proxy-agent": "^5.0.0", 14 | "make-dir": "^3.1.0", 15 | "node-fetch": "^2.6.5", 16 | "nopt": "^5.0.0", 17 | "npmlog": "^5.0.1", 18 | "rimraf": "^3.0.2", 19 | "semver": "^7.3.5", 20 | "tar": "^6.1.11" 21 | } 22 | }, 23 | "@types/node": { 24 | "version": "17.0.21", 25 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", 26 | "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==" 27 | }, 28 | "@types/webidl-conversions": { 29 | "version": "6.1.1", 30 | "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz", 31 | "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q==" 32 | }, 33 | "@types/whatwg-url": { 34 | "version": "8.2.1", 35 | "resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.1.tgz", 36 | "integrity": "sha512-2YubE1sjj5ifxievI5Ge1sckb9k/Er66HyR2c+3+I6VDUUg1TLPdYYTEbQ+DjRkS4nTxMJhgWfSfMRD2sl2EYQ==", 37 | "requires": { 38 | "@types/node": "*", 39 | "@types/webidl-conversions": "*" 40 | } 41 | }, 42 | "abbrev": { 43 | "version": "1.1.1", 44 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 45 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 46 | }, 47 | "accepts": { 48 | "version": "1.3.8", 49 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", 50 | "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", 51 | "requires": { 52 | "mime-types": "~2.1.34", 53 | "negotiator": "0.6.3" 54 | } 55 | }, 56 | "agent-base": { 57 | "version": "6.0.2", 58 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", 59 | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", 60 | "requires": { 61 | "debug": "4" 62 | }, 63 | "dependencies": { 64 | "debug": { 65 | "version": "4.3.3", 66 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 67 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 68 | "requires": { 69 | "ms": "2.1.2" 70 | } 71 | }, 72 | "ms": { 73 | "version": "2.1.2", 74 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 75 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 76 | } 77 | } 78 | }, 79 | "ansi-regex": { 80 | "version": "5.0.1", 81 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 82 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 83 | }, 84 | "aproba": { 85 | "version": "2.0.0", 86 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", 87 | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" 88 | }, 89 | "are-we-there-yet": { 90 | "version": "2.0.0", 91 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", 92 | "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", 93 | "requires": { 94 | "delegates": "^1.0.0", 95 | "readable-stream": "^3.6.0" 96 | } 97 | }, 98 | "array-flatten": { 99 | "version": "1.1.1", 100 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 101 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 102 | }, 103 | "balanced-match": { 104 | "version": "1.0.2", 105 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 106 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" 107 | }, 108 | "base64-js": { 109 | "version": "1.5.1", 110 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 111 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 112 | }, 113 | "bcrypt": { 114 | "version": "5.0.1", 115 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.0.1.tgz", 116 | "integrity": "sha512-9BTgmrhZM2t1bNuDtrtIMVSmmxZBrJ71n8Wg+YgdjHuIWYF7SjjmCPZFB+/5i/o/PIeRpwVJR3P+NrpIItUjqw==", 117 | "requires": { 118 | "@mapbox/node-pre-gyp": "^1.0.0", 119 | "node-addon-api": "^3.1.0" 120 | } 121 | }, 122 | "bcryptjs": { 123 | "version": "2.4.3", 124 | "resolved": "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz", 125 | "integrity": "sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms=" 126 | }, 127 | "body-parser": { 128 | "version": "1.19.2", 129 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.2.tgz", 130 | "integrity": "sha512-SAAwOxgoCKMGs9uUAUFHygfLAyaniaoun6I8mFY9pRAJL9+Kec34aU+oIjDhTycub1jozEfEwx1W1IuOYxVSFw==", 131 | "requires": { 132 | "bytes": "3.1.2", 133 | "content-type": "~1.0.4", 134 | "debug": "2.6.9", 135 | "depd": "~1.1.2", 136 | "http-errors": "1.8.1", 137 | "iconv-lite": "0.4.24", 138 | "on-finished": "~2.3.0", 139 | "qs": "6.9.7", 140 | "raw-body": "2.4.3", 141 | "type-is": "~1.6.18" 142 | } 143 | }, 144 | "brace-expansion": { 145 | "version": "1.1.11", 146 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 147 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 148 | "requires": { 149 | "balanced-match": "^1.0.0", 150 | "concat-map": "0.0.1" 151 | } 152 | }, 153 | "bson": { 154 | "version": "4.6.1", 155 | "resolved": "https://registry.npmjs.org/bson/-/bson-4.6.1.tgz", 156 | "integrity": "sha512-I1LQ7Hz5zgwR4QquilLNZwbhPw0Apx7i7X9kGMBTsqPdml/03Q9NBtD9nt/19ahjlphktQImrnderxqpzeVDjw==", 157 | "requires": { 158 | "buffer": "^5.6.0" 159 | } 160 | }, 161 | "buffer": { 162 | "version": "5.7.1", 163 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", 164 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", 165 | "requires": { 166 | "base64-js": "^1.3.1", 167 | "ieee754": "^1.1.13" 168 | } 169 | }, 170 | "buffer-equal-constant-time": { 171 | "version": "1.0.1", 172 | "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", 173 | "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=" 174 | }, 175 | "bytes": { 176 | "version": "3.1.2", 177 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", 178 | "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==" 179 | }, 180 | "chownr": { 181 | "version": "2.0.0", 182 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", 183 | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" 184 | }, 185 | "color-support": { 186 | "version": "1.1.3", 187 | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", 188 | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" 189 | }, 190 | "commander": { 191 | "version": "4.1.1", 192 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 193 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" 194 | }, 195 | "concat-map": { 196 | "version": "0.0.1", 197 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 198 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 199 | }, 200 | "console-control-strings": { 201 | "version": "1.1.0", 202 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", 203 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=" 204 | }, 205 | "content-disposition": { 206 | "version": "0.5.4", 207 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", 208 | "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", 209 | "requires": { 210 | "safe-buffer": "5.2.1" 211 | } 212 | }, 213 | "content-type": { 214 | "version": "1.0.4", 215 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 216 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 217 | }, 218 | "cookie": { 219 | "version": "0.4.2", 220 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", 221 | "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==" 222 | }, 223 | "cookie-signature": { 224 | "version": "1.0.6", 225 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 226 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 227 | }, 228 | "cross-spawn": { 229 | "version": "7.0.3", 230 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 231 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 232 | "requires": { 233 | "path-key": "^3.1.0", 234 | "shebang-command": "^2.0.0", 235 | "which": "^2.0.1" 236 | } 237 | }, 238 | "debug": { 239 | "version": "2.6.9", 240 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 241 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 242 | "requires": { 243 | "ms": "2.0.0" 244 | } 245 | }, 246 | "delegates": { 247 | "version": "1.0.0", 248 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", 249 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=" 250 | }, 251 | "denque": { 252 | "version": "2.0.1", 253 | "resolved": "https://registry.npmjs.org/denque/-/denque-2.0.1.tgz", 254 | "integrity": "sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==" 255 | }, 256 | "depd": { 257 | "version": "1.1.2", 258 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 259 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 260 | }, 261 | "destroy": { 262 | "version": "1.0.4", 263 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 264 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 265 | }, 266 | "detect-libc": { 267 | "version": "1.0.3", 268 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", 269 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=" 270 | }, 271 | "dotenv": { 272 | "version": "16.0.0", 273 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.0.tgz", 274 | "integrity": "sha512-qD9WU0MPM4SWLPJy/r2Be+2WgQj8plChsyrCNQzW/0WjvcJQiKQJ9mH3ZgB3fxbUUxgc/11ZJ0Fi5KiimWGz2Q==" 275 | }, 276 | "ecdsa-sig-formatter": { 277 | "version": "1.0.11", 278 | "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", 279 | "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", 280 | "requires": { 281 | "safe-buffer": "^5.0.1" 282 | } 283 | }, 284 | "ee-first": { 285 | "version": "1.1.1", 286 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 287 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 288 | }, 289 | "emoji-regex": { 290 | "version": "8.0.0", 291 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 292 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 293 | }, 294 | "encodeurl": { 295 | "version": "1.0.2", 296 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 297 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 298 | }, 299 | "env-cmd": { 300 | "version": "10.1.0", 301 | "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", 302 | "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", 303 | "requires": { 304 | "commander": "^4.0.0", 305 | "cross-spawn": "^7.0.0" 306 | } 307 | }, 308 | "escape-html": { 309 | "version": "1.0.3", 310 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 311 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 312 | }, 313 | "etag": { 314 | "version": "1.8.1", 315 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 316 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 317 | }, 318 | "express": { 319 | "version": "4.17.3", 320 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.3.tgz", 321 | "integrity": "sha512-yuSQpz5I+Ch7gFrPCk4/c+dIBKlQUxtgwqzph132bsT6qhuzss6I8cLJQz7B3rFblzd6wtcI0ZbGltH/C4LjUg==", 322 | "requires": { 323 | "accepts": "~1.3.8", 324 | "array-flatten": "1.1.1", 325 | "body-parser": "1.19.2", 326 | "content-disposition": "0.5.4", 327 | "content-type": "~1.0.4", 328 | "cookie": "0.4.2", 329 | "cookie-signature": "1.0.6", 330 | "debug": "2.6.9", 331 | "depd": "~1.1.2", 332 | "encodeurl": "~1.0.2", 333 | "escape-html": "~1.0.3", 334 | "etag": "~1.8.1", 335 | "finalhandler": "~1.1.2", 336 | "fresh": "0.5.2", 337 | "merge-descriptors": "1.0.1", 338 | "methods": "~1.1.2", 339 | "on-finished": "~2.3.0", 340 | "parseurl": "~1.3.3", 341 | "path-to-regexp": "0.1.7", 342 | "proxy-addr": "~2.0.7", 343 | "qs": "6.9.7", 344 | "range-parser": "~1.2.1", 345 | "safe-buffer": "5.2.1", 346 | "send": "0.17.2", 347 | "serve-static": "1.14.2", 348 | "setprototypeof": "1.2.0", 349 | "statuses": "~1.5.0", 350 | "type-is": "~1.6.18", 351 | "utils-merge": "1.0.1", 352 | "vary": "~1.1.2" 353 | } 354 | }, 355 | "finalhandler": { 356 | "version": "1.1.2", 357 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", 358 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", 359 | "requires": { 360 | "debug": "2.6.9", 361 | "encodeurl": "~1.0.2", 362 | "escape-html": "~1.0.3", 363 | "on-finished": "~2.3.0", 364 | "parseurl": "~1.3.3", 365 | "statuses": "~1.5.0", 366 | "unpipe": "~1.0.0" 367 | } 368 | }, 369 | "forwarded": { 370 | "version": "0.2.0", 371 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", 372 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==" 373 | }, 374 | "fresh": { 375 | "version": "0.5.2", 376 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 377 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 378 | }, 379 | "fs-minipass": { 380 | "version": "2.1.0", 381 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", 382 | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", 383 | "requires": { 384 | "minipass": "^3.0.0" 385 | } 386 | }, 387 | "fs.realpath": { 388 | "version": "1.0.0", 389 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 390 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" 391 | }, 392 | "gauge": { 393 | "version": "3.0.2", 394 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", 395 | "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", 396 | "requires": { 397 | "aproba": "^1.0.3 || ^2.0.0", 398 | "color-support": "^1.1.2", 399 | "console-control-strings": "^1.0.0", 400 | "has-unicode": "^2.0.1", 401 | "object-assign": "^4.1.1", 402 | "signal-exit": "^3.0.0", 403 | "string-width": "^4.2.3", 404 | "strip-ansi": "^6.0.1", 405 | "wide-align": "^1.1.2" 406 | } 407 | }, 408 | "glob": { 409 | "version": "7.2.0", 410 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", 411 | "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", 412 | "requires": { 413 | "fs.realpath": "^1.0.0", 414 | "inflight": "^1.0.4", 415 | "inherits": "2", 416 | "minimatch": "^3.0.4", 417 | "once": "^1.3.0", 418 | "path-is-absolute": "^1.0.0" 419 | } 420 | }, 421 | "has-unicode": { 422 | "version": "2.0.1", 423 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", 424 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=" 425 | }, 426 | "http-errors": { 427 | "version": "1.8.1", 428 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", 429 | "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", 430 | "requires": { 431 | "depd": "~1.1.2", 432 | "inherits": "2.0.4", 433 | "setprototypeof": "1.2.0", 434 | "statuses": ">= 1.5.0 < 2", 435 | "toidentifier": "1.0.1" 436 | } 437 | }, 438 | "https-proxy-agent": { 439 | "version": "5.0.0", 440 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", 441 | "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", 442 | "requires": { 443 | "agent-base": "6", 444 | "debug": "4" 445 | }, 446 | "dependencies": { 447 | "debug": { 448 | "version": "4.3.3", 449 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 450 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 451 | "requires": { 452 | "ms": "2.1.2" 453 | } 454 | }, 455 | "ms": { 456 | "version": "2.1.2", 457 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 458 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 459 | } 460 | } 461 | }, 462 | "iconv-lite": { 463 | "version": "0.4.24", 464 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", 465 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", 466 | "requires": { 467 | "safer-buffer": ">= 2.1.2 < 3" 468 | } 469 | }, 470 | "ieee754": { 471 | "version": "1.2.1", 472 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", 473 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" 474 | }, 475 | "inflight": { 476 | "version": "1.0.6", 477 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 478 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 479 | "requires": { 480 | "once": "^1.3.0", 481 | "wrappy": "1" 482 | } 483 | }, 484 | "inherits": { 485 | "version": "2.0.4", 486 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 487 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" 488 | }, 489 | "ipaddr.js": { 490 | "version": "1.9.1", 491 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", 492 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==" 493 | }, 494 | "is-fullwidth-code-point": { 495 | "version": "3.0.0", 496 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 497 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 498 | }, 499 | "isexe": { 500 | "version": "2.0.0", 501 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 502 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 503 | }, 504 | "jsonwebtoken": { 505 | "version": "8.5.1", 506 | "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", 507 | "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", 508 | "requires": { 509 | "jws": "^3.2.2", 510 | "lodash.includes": "^4.3.0", 511 | "lodash.isboolean": "^3.0.3", 512 | "lodash.isinteger": "^4.0.4", 513 | "lodash.isnumber": "^3.0.3", 514 | "lodash.isplainobject": "^4.0.6", 515 | "lodash.isstring": "^4.0.1", 516 | "lodash.once": "^4.0.0", 517 | "ms": "^2.1.1", 518 | "semver": "^5.6.0" 519 | }, 520 | "dependencies": { 521 | "ms": { 522 | "version": "2.1.3", 523 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 524 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 525 | }, 526 | "semver": { 527 | "version": "5.7.1", 528 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 529 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" 530 | } 531 | } 532 | }, 533 | "jwa": { 534 | "version": "1.4.1", 535 | "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", 536 | "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", 537 | "requires": { 538 | "buffer-equal-constant-time": "1.0.1", 539 | "ecdsa-sig-formatter": "1.0.11", 540 | "safe-buffer": "^5.0.1" 541 | } 542 | }, 543 | "jws": { 544 | "version": "3.2.2", 545 | "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", 546 | "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", 547 | "requires": { 548 | "jwa": "^1.4.1", 549 | "safe-buffer": "^5.0.1" 550 | } 551 | }, 552 | "kareem": { 553 | "version": "2.3.3", 554 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.3.tgz", 555 | "integrity": "sha512-uESCXM2KdtOQ8LOvKyTUXEeg0MkYp4wGglTIpGcYHvjJcS5sn2Wkfrfit8m4xSbaNDAw2KdI9elgkOxZbrFYbg==" 556 | }, 557 | "lodash.includes": { 558 | "version": "4.3.0", 559 | "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", 560 | "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=" 561 | }, 562 | "lodash.isboolean": { 563 | "version": "3.0.3", 564 | "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", 565 | "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=" 566 | }, 567 | "lodash.isinteger": { 568 | "version": "4.0.4", 569 | "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", 570 | "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=" 571 | }, 572 | "lodash.isnumber": { 573 | "version": "3.0.3", 574 | "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", 575 | "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=" 576 | }, 577 | "lodash.isplainobject": { 578 | "version": "4.0.6", 579 | "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", 580 | "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=" 581 | }, 582 | "lodash.isstring": { 583 | "version": "4.0.1", 584 | "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", 585 | "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=" 586 | }, 587 | "lodash.once": { 588 | "version": "4.1.1", 589 | "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", 590 | "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=" 591 | }, 592 | "lru-cache": { 593 | "version": "6.0.0", 594 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 595 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 596 | "requires": { 597 | "yallist": "^4.0.0" 598 | } 599 | }, 600 | "make-dir": { 601 | "version": "3.1.0", 602 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", 603 | "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", 604 | "requires": { 605 | "semver": "^6.0.0" 606 | }, 607 | "dependencies": { 608 | "semver": { 609 | "version": "6.3.0", 610 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", 611 | "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" 612 | } 613 | } 614 | }, 615 | "media-typer": { 616 | "version": "0.3.0", 617 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 618 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 619 | }, 620 | "memory-pager": { 621 | "version": "1.5.0", 622 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz", 623 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==", 624 | "optional": true 625 | }, 626 | "merge-descriptors": { 627 | "version": "1.0.1", 628 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 629 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 630 | }, 631 | "methods": { 632 | "version": "1.1.2", 633 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 634 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 635 | }, 636 | "mime": { 637 | "version": "1.6.0", 638 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", 639 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==" 640 | }, 641 | "mime-db": { 642 | "version": "1.51.0", 643 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", 644 | "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==" 645 | }, 646 | "mime-types": { 647 | "version": "2.1.34", 648 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", 649 | "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", 650 | "requires": { 651 | "mime-db": "1.51.0" 652 | } 653 | }, 654 | "minimatch": { 655 | "version": "3.1.2", 656 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 657 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 658 | "requires": { 659 | "brace-expansion": "^1.1.7" 660 | } 661 | }, 662 | "minipass": { 663 | "version": "3.1.6", 664 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz", 665 | "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", 666 | "requires": { 667 | "yallist": "^4.0.0" 668 | } 669 | }, 670 | "minizlib": { 671 | "version": "2.1.2", 672 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", 673 | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", 674 | "requires": { 675 | "minipass": "^3.0.0", 676 | "yallist": "^4.0.0" 677 | } 678 | }, 679 | "mkdirp": { 680 | "version": "1.0.4", 681 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", 682 | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" 683 | }, 684 | "mongodb": { 685 | "version": "4.2.2", 686 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.2.2.tgz", 687 | "integrity": "sha512-zt8rCTnTKyMQppyt63qMnrLM5dbADgUk18ORPF1XbtHLIYCyc9hattaYHi0pqMvNxDpgGgUofSVzS+UQErgTug==", 688 | "requires": { 689 | "bson": "^4.6.0", 690 | "denque": "^2.0.1", 691 | "mongodb-connection-string-url": "^2.3.2", 692 | "saslprep": "^1.0.3" 693 | } 694 | }, 695 | "mongodb-connection-string-url": { 696 | "version": "2.5.2", 697 | "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.2.tgz", 698 | "integrity": "sha512-tWDyIG8cQlI5k3skB6ywaEA5F9f5OntrKKsT/Lteub2zgwSUlhqEN2inGgBTm8bpYJf8QYBdA/5naz65XDpczA==", 699 | "requires": { 700 | "@types/whatwg-url": "^8.2.1", 701 | "whatwg-url": "^11.0.0" 702 | } 703 | }, 704 | "mongoose": { 705 | "version": "6.1.4", 706 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-6.1.4.tgz", 707 | "integrity": "sha512-RsNiMpGWo7OXFmq5xt0ZWYt2rabHLxNYr0oAiR0xDv23lHKCkXDqyDl71+sXF9rcWEe8BTHG+1IRQykiNBvaKQ==", 708 | "requires": { 709 | "bson": "^4.2.2", 710 | "kareem": "2.3.3", 711 | "mongodb": "4.2.2", 712 | "mpath": "0.8.4", 713 | "mquery": "4.0.0", 714 | "ms": "2.1.2", 715 | "regexp-clone": "1.0.0", 716 | "sift": "13.5.2", 717 | "sliced": "1.0.1" 718 | }, 719 | "dependencies": { 720 | "ms": { 721 | "version": "2.1.2", 722 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 723 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 724 | } 725 | } 726 | }, 727 | "mpath": { 728 | "version": "0.8.4", 729 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.8.4.tgz", 730 | "integrity": "sha512-DTxNZomBcTWlrMW76jy1wvV37X/cNNxPW1y2Jzd4DZkAaC5ZGsm8bfGfNOthcDuRJujXLqiuS6o3Tpy0JEoh7g==" 731 | }, 732 | "mquery": { 733 | "version": "4.0.0", 734 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-4.0.0.tgz", 735 | "integrity": "sha512-nGjm89lHja+T/b8cybAby6H0YgA4qYC/lx6UlwvHGqvTq8bDaNeCwl1sY8uRELrNbVWJzIihxVd+vphGGn1vBw==", 736 | "requires": { 737 | "debug": "4.x", 738 | "regexp-clone": "^1.0.0", 739 | "sliced": "1.0.1" 740 | }, 741 | "dependencies": { 742 | "debug": { 743 | "version": "4.3.3", 744 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", 745 | "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", 746 | "requires": { 747 | "ms": "2.1.2" 748 | } 749 | }, 750 | "ms": { 751 | "version": "2.1.2", 752 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 753 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" 754 | } 755 | } 756 | }, 757 | "ms": { 758 | "version": "2.0.0", 759 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 760 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 761 | }, 762 | "negotiator": { 763 | "version": "0.6.3", 764 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", 765 | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" 766 | }, 767 | "node-addon-api": { 768 | "version": "3.2.1", 769 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", 770 | "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" 771 | }, 772 | "node-fetch": { 773 | "version": "2.6.7", 774 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", 775 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", 776 | "requires": { 777 | "whatwg-url": "^5.0.0" 778 | }, 779 | "dependencies": { 780 | "tr46": { 781 | "version": "0.0.3", 782 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", 783 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=" 784 | }, 785 | "webidl-conversions": { 786 | "version": "3.0.1", 787 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", 788 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=" 789 | }, 790 | "whatwg-url": { 791 | "version": "5.0.0", 792 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", 793 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", 794 | "requires": { 795 | "tr46": "~0.0.3", 796 | "webidl-conversions": "^3.0.0" 797 | } 798 | } 799 | } 800 | }, 801 | "nopt": { 802 | "version": "5.0.0", 803 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", 804 | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", 805 | "requires": { 806 | "abbrev": "1" 807 | } 808 | }, 809 | "npmlog": { 810 | "version": "5.0.1", 811 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", 812 | "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", 813 | "requires": { 814 | "are-we-there-yet": "^2.0.0", 815 | "console-control-strings": "^1.1.0", 816 | "gauge": "^3.0.0", 817 | "set-blocking": "^2.0.0" 818 | } 819 | }, 820 | "object-assign": { 821 | "version": "4.1.1", 822 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 823 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" 824 | }, 825 | "on-finished": { 826 | "version": "2.3.0", 827 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 828 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 829 | "requires": { 830 | "ee-first": "1.1.1" 831 | } 832 | }, 833 | "once": { 834 | "version": "1.4.0", 835 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 836 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 837 | "requires": { 838 | "wrappy": "1" 839 | } 840 | }, 841 | "parseurl": { 842 | "version": "1.3.3", 843 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", 844 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" 845 | }, 846 | "path-is-absolute": { 847 | "version": "1.0.1", 848 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 849 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" 850 | }, 851 | "path-key": { 852 | "version": "3.1.1", 853 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 854 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" 855 | }, 856 | "path-to-regexp": { 857 | "version": "0.1.7", 858 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 859 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 860 | }, 861 | "proxy-addr": { 862 | "version": "2.0.7", 863 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", 864 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", 865 | "requires": { 866 | "forwarded": "0.2.0", 867 | "ipaddr.js": "1.9.1" 868 | } 869 | }, 870 | "punycode": { 871 | "version": "2.1.1", 872 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", 873 | "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==" 874 | }, 875 | "qs": { 876 | "version": "6.9.7", 877 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.7.tgz", 878 | "integrity": "sha512-IhMFgUmuNpyRfxA90umL7ByLlgRXu6tIfKPpF5TmcfRLlLCckfP/g3IQmju6jjpu+Hh8rA+2p6A27ZSPOOHdKw==" 879 | }, 880 | "range-parser": { 881 | "version": "1.2.1", 882 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", 883 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==" 884 | }, 885 | "raw-body": { 886 | "version": "2.4.3", 887 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.3.tgz", 888 | "integrity": "sha512-UlTNLIcu0uzb4D2f4WltY6cVjLi+/jEN4lgEUj3E04tpMDpUlkBo/eSn6zou9hum2VMNpCCUone0O0WeJim07g==", 889 | "requires": { 890 | "bytes": "3.1.2", 891 | "http-errors": "1.8.1", 892 | "iconv-lite": "0.4.24", 893 | "unpipe": "1.0.0" 894 | } 895 | }, 896 | "readable-stream": { 897 | "version": "3.6.0", 898 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", 899 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", 900 | "requires": { 901 | "inherits": "^2.0.3", 902 | "string_decoder": "^1.1.1", 903 | "util-deprecate": "^1.0.1" 904 | } 905 | }, 906 | "regexp-clone": { 907 | "version": "1.0.0", 908 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz", 909 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw==" 910 | }, 911 | "rimraf": { 912 | "version": "3.0.2", 913 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 914 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 915 | "requires": { 916 | "glob": "^7.1.3" 917 | } 918 | }, 919 | "safe-buffer": { 920 | "version": "5.2.1", 921 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 922 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" 923 | }, 924 | "safer-buffer": { 925 | "version": "2.1.2", 926 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 927 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" 928 | }, 929 | "saslprep": { 930 | "version": "1.0.3", 931 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz", 932 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==", 933 | "optional": true, 934 | "requires": { 935 | "sparse-bitfield": "^3.0.3" 936 | } 937 | }, 938 | "semver": { 939 | "version": "7.3.5", 940 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", 941 | "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", 942 | "requires": { 943 | "lru-cache": "^6.0.0" 944 | } 945 | }, 946 | "send": { 947 | "version": "0.17.2", 948 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz", 949 | "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==", 950 | "requires": { 951 | "debug": "2.6.9", 952 | "depd": "~1.1.2", 953 | "destroy": "~1.0.4", 954 | "encodeurl": "~1.0.2", 955 | "escape-html": "~1.0.3", 956 | "etag": "~1.8.1", 957 | "fresh": "0.5.2", 958 | "http-errors": "1.8.1", 959 | "mime": "1.6.0", 960 | "ms": "2.1.3", 961 | "on-finished": "~2.3.0", 962 | "range-parser": "~1.2.1", 963 | "statuses": "~1.5.0" 964 | }, 965 | "dependencies": { 966 | "ms": { 967 | "version": "2.1.3", 968 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", 969 | "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" 970 | } 971 | } 972 | }, 973 | "serve-static": { 974 | "version": "1.14.2", 975 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz", 976 | "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==", 977 | "requires": { 978 | "encodeurl": "~1.0.2", 979 | "escape-html": "~1.0.3", 980 | "parseurl": "~1.3.3", 981 | "send": "0.17.2" 982 | } 983 | }, 984 | "set-blocking": { 985 | "version": "2.0.0", 986 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 987 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 988 | }, 989 | "setprototypeof": { 990 | "version": "1.2.0", 991 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", 992 | "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" 993 | }, 994 | "shebang-command": { 995 | "version": "2.0.0", 996 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 997 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 998 | "requires": { 999 | "shebang-regex": "^3.0.0" 1000 | } 1001 | }, 1002 | "shebang-regex": { 1003 | "version": "3.0.0", 1004 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1005 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" 1006 | }, 1007 | "sift": { 1008 | "version": "13.5.2", 1009 | "resolved": "https://registry.npmjs.org/sift/-/sift-13.5.2.tgz", 1010 | "integrity": "sha512-+gxdEOMA2J+AI+fVsCqeNn7Tgx3M9ZN9jdi95939l1IJ8cZsqS8sqpJyOkic2SJk+1+98Uwryt/gL6XDaV+UZA==" 1011 | }, 1012 | "signal-exit": { 1013 | "version": "3.0.7", 1014 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 1015 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" 1016 | }, 1017 | "sliced": { 1018 | "version": "1.0.1", 1019 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz", 1020 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E=" 1021 | }, 1022 | "sparse-bitfield": { 1023 | "version": "3.0.3", 1024 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz", 1025 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=", 1026 | "optional": true, 1027 | "requires": { 1028 | "memory-pager": "^1.0.2" 1029 | } 1030 | }, 1031 | "statuses": { 1032 | "version": "1.5.0", 1033 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 1034 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 1035 | }, 1036 | "string-width": { 1037 | "version": "4.2.3", 1038 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1039 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1040 | "requires": { 1041 | "emoji-regex": "^8.0.0", 1042 | "is-fullwidth-code-point": "^3.0.0", 1043 | "strip-ansi": "^6.0.1" 1044 | } 1045 | }, 1046 | "string_decoder": { 1047 | "version": "1.3.0", 1048 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", 1049 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", 1050 | "requires": { 1051 | "safe-buffer": "~5.2.0" 1052 | } 1053 | }, 1054 | "strip-ansi": { 1055 | "version": "6.0.1", 1056 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1057 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1058 | "requires": { 1059 | "ansi-regex": "^5.0.1" 1060 | } 1061 | }, 1062 | "tar": { 1063 | "version": "6.1.11", 1064 | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", 1065 | "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", 1066 | "requires": { 1067 | "chownr": "^2.0.0", 1068 | "fs-minipass": "^2.0.0", 1069 | "minipass": "^3.0.0", 1070 | "minizlib": "^2.1.1", 1071 | "mkdirp": "^1.0.3", 1072 | "yallist": "^4.0.0" 1073 | } 1074 | }, 1075 | "toidentifier": { 1076 | "version": "1.0.1", 1077 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", 1078 | "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==" 1079 | }, 1080 | "tr46": { 1081 | "version": "3.0.0", 1082 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", 1083 | "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", 1084 | "requires": { 1085 | "punycode": "^2.1.1" 1086 | } 1087 | }, 1088 | "type-is": { 1089 | "version": "1.6.18", 1090 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", 1091 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", 1092 | "requires": { 1093 | "media-typer": "0.3.0", 1094 | "mime-types": "~2.1.24" 1095 | } 1096 | }, 1097 | "unpipe": { 1098 | "version": "1.0.0", 1099 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1100 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1101 | }, 1102 | "util-deprecate": { 1103 | "version": "1.0.2", 1104 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1105 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" 1106 | }, 1107 | "utils-merge": { 1108 | "version": "1.0.1", 1109 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 1110 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 1111 | }, 1112 | "validator": { 1113 | "version": "13.7.0", 1114 | "resolved": "https://registry.npmjs.org/validator/-/validator-13.7.0.tgz", 1115 | "integrity": "sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==" 1116 | }, 1117 | "vary": { 1118 | "version": "1.1.2", 1119 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 1120 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 1121 | }, 1122 | "webidl-conversions": { 1123 | "version": "7.0.0", 1124 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 1125 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==" 1126 | }, 1127 | "whatwg-url": { 1128 | "version": "11.0.0", 1129 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", 1130 | "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", 1131 | "requires": { 1132 | "tr46": "^3.0.0", 1133 | "webidl-conversions": "^7.0.0" 1134 | } 1135 | }, 1136 | "which": { 1137 | "version": "2.0.2", 1138 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1139 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1140 | "requires": { 1141 | "isexe": "^2.0.0" 1142 | } 1143 | }, 1144 | "wide-align": { 1145 | "version": "1.1.5", 1146 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", 1147 | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", 1148 | "requires": { 1149 | "string-width": "^1.0.2 || 2 || 3 || 4" 1150 | } 1151 | }, 1152 | "wrappy": { 1153 | "version": "1.0.2", 1154 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1155 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 1156 | }, 1157 | "yallist": { 1158 | "version": "4.0.0", 1159 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 1160 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" 1161 | } 1162 | } 1163 | } 1164 | -------------------------------------------------------------------------------- /server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "bcrypt": "^5.0.1", 13 | "bcryptjs": "^2.4.3", 14 | "dotenv": "^16.0.0", 15 | "env-cmd": "^10.1.0", 16 | "express": "^4.17.3", 17 | "jsonwebtoken": "^8.5.1", 18 | "mongoose": "^6.1.4", 19 | "validator": "^13.7.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /server/routes/user.js: -------------------------------------------------------------------------------- 1 | const mongoose = require('mongoose') 2 | const express = require('express') 3 | const User = require('../models/User') 4 | const router = new express.Router() 5 | const jwt=require('jsonwebtoken') 6 | const auth = require('../middleware/auth') 7 | require('dotenv').config() 8 | 9 | //create user(register) 10 | router.post('/registerUser', async (req, res) => { 11 | const user = new User(req.body) 12 | try { 13 | await user.save() 14 | const token = await user.generateAuthToken() 15 | res.status(201).send({user}) 16 | res.redirect("/loginUser"); 17 | } catch (e) { 18 | res.status(400).send('UserName Already Taken!!') 19 | } 20 | }) 21 | 22 | 23 | //user login 24 | router.post('/loginUser', async (req, res) => { 25 | try { 26 | const user = await User.findByCredentials(req.body.username, req.body.password) 27 | const token = await user.generateAuthToken() 28 | if (user) { 29 | await res.send(user) 30 | } 31 | else { 32 | res.redirect("/registerUser") 33 | } 34 | } catch (e) { 35 | res.status(400).send('Login Failed') 36 | } 37 | }) 38 | 39 | //Dummy protected route 40 | router.get('/user',auth, async (req, res) => { 41 | if(!req.user) { 42 | res.send("Something went wrong") 43 | } 44 | res.send("This is a protected route") 45 | }) 46 | 47 | module.exports = router -------------------------------------------------------------------------------- /src/Actions/currentLanguage.js: -------------------------------------------------------------------------------- 1 | function changeLanguage({language, id}) { 2 | return { 3 | type: 'CHANGE_LANGUAGE', 4 | payload: { language, id } 5 | } 6 | } 7 | 8 | export default changeLanguage; -------------------------------------------------------------------------------- /src/Actions/fontSize.js: -------------------------------------------------------------------------------- 1 | function changeFontSize(fontSize) { 2 | return { 3 | type: 'CHANGE_FONT_SIZE', 4 | payload: fontSize 5 | } 6 | } 7 | 8 | export default changeFontSize; -------------------------------------------------------------------------------- /src/Actions/theme.js: -------------------------------------------------------------------------------- 1 | function toggleTheme() { 2 | return { 3 | type: 'TOGGLE_THEME' 4 | } 5 | } 6 | 7 | export default toggleTheme; -------------------------------------------------------------------------------- /src/App.js: -------------------------------------------------------------------------------- 1 | import './App.scss'; 2 | import React from 'react'; 3 | import { Routes, Route } from 'react-router-dom'; 4 | import Home from './pages/Home'; 5 | import Sketch from './pages/Sketch'; 6 | import NotFound from './pages/NotFound'; 7 | 8 | 9 | /* This is App class that calls Header and Main files, whereas CodeEditor and 10 | Terminal files are called in Main folder, Main folder is present in Components 11 | folder */ 12 | class App extends React.Component { 13 | render() { 14 | return ( 15 | 16 | } /> 17 | } /> 18 | } /> 19 | 20 | ); 21 | } 22 | } 23 | 24 | export default App; 25 | -------------------------------------------------------------------------------- /src/App.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hash-define-organization/hashdefine-onlineIDE/4b44318f6f5a099ce6018c2b51d382d8136af3f9/src/App.scss -------------------------------------------------------------------------------- /src/Components/CodeEditor/CodeEditor.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './CodeEditor.scss'; 3 | import Editor from '@monaco-editor/react' 4 | import { connect } from 'react-redux'; 5 | import DownloadForOfflineIcon from '@mui/icons-material/DownloadForOffline'; 6 | 7 | 8 | 9 | 10 | /* This is the Editor class, mainly used for writing code by the user.*/ 11 | class CodeEditor extends React.Component { 12 | 13 | // editorDidMount(editor, monaco) { 14 | // // editor.focus(); 15 | // } 16 | 17 | handleEditorValidation(markers) { 18 | // console.log(markers); 19 | } 20 | 21 | render() { 22 | 23 | const text = this.props.code; 24 | 25 | 26 | const options = { 27 | selectOnLineNumbers: true, 28 | fontSize: `${this.props.fontSize}px`, 29 | automaticLayout: true, 30 | }; 31 | 32 | const download_code = (texe, name = " Mycode.txt ") => { 33 | 34 | const blob = new Blob([text], { type: "text/plain" }) 35 | 36 | const href = URL.createObjectURL(blob); 37 | 38 | const a = Object.assign(document.createElement("a"), { 39 | href, 40 | style: "display:none", 41 | download: name, 42 | }); 43 | // document.body.appendChild(a); 44 | 45 | a.click(); 46 | URL.revokeObjectURL(href); 47 | a.remove(); 48 | } 49 | 50 | return ( 51 |
52 | 53 | 54 | 63 | 64 | ); 65 | } 66 | } 67 | 68 | function mapStateToProps(state, ownProps) { 69 | return { 70 | theme: state.theme, 71 | fontSize: state.fontSize, 72 | selectedLanguage: state.currentLanguage.selectedLanguage, 73 | selectedId: state.currentLanguage.selectedId 74 | } 75 | } 76 | export default connect(mapStateToProps, null)(CodeEditor); -------------------------------------------------------------------------------- /src/Components/CodeEditor/CodeEditor.scss: -------------------------------------------------------------------------------- 1 | @import "../../index.scss"; 2 | 3 | .editor { 4 | height: 90vh; 5 | width: 65%; 6 | flex-grow: 1; 7 | background-color: #1E1E1E; 8 | color: white; 9 | padding: 10px; 10 | 11 | @include media("<=phone"){ 12 | width: 55%; 13 | 14 | } 15 | } 16 | 17 | .download_button { 18 | height: 40px !important; 19 | width: 40px !important; 20 | background-color: #1E1E1E; 21 | margin-left: 95%; 22 | } 23 | 24 | .download_button :hover { 25 | fill: aliceblue !important; 26 | } -------------------------------------------------------------------------------- /src/Components/Header/Header.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './Header.scss'; 3 | import LightModeIcon from '@mui/icons-material/LightMode'; 4 | import BrushIcon from '@mui/icons-material/Brush'; 5 | import GitHubIcon from '@mui/icons-material/GitHub'; 6 | import MoonIcon from '@mui/icons-material/NightsStay'; 7 | import { connect } from 'react-redux'; 8 | import themeAction from '../../Actions/theme'; 9 | import fontSizeAction from '../../Actions/fontSize'; 10 | import changeLanguage from '../../Actions/currentLanguage'; 11 | 12 | 13 | 14 | /* This is the Header class, it is divided into two sections Header_left and Header_right 15 | Header_left is mainly to display our symbol for IDE, whereas Header_right shows us different options, 16 | like to change font, change language, also github link for the HASH-IDE repository and finally a button to change theme, dark to light theme. */ 17 | class Header extends React.Component { 18 | 19 | constructor(props) { 20 | super(props); 21 | this.changeTheme = this.changeTheme.bind(this); 22 | this.changeFontSize = this.changeFontSize.bind(this); 23 | this.changeLanguage = this.changeLanguage.bind(this); 24 | } 25 | 26 | changeLanguage(event) { 27 | const language = event.target.value; 28 | const id = this.props.languages.find(language => language.value === event.target.value).id 29 | 30 | this.props.changeLanguage({language, id}); 31 | } 32 | 33 | changeTheme() { 34 | this.props.themeAction() 35 | } 36 | 37 | changeFontSize(event) { 38 | this.props.fontSizeAction(event.target.value); 39 | } 40 | 41 | 42 | 43 | render() { 44 | 45 | 46 | return ( 47 |
48 |
49 |
50 | DEFINE IDE 51 |
52 |
53 |
54 | 63 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | { 82 | this.props.theme === 'light' ? 83 | 84 | 85 | : 86 | 87 | 88 | 89 | } 90 | 91 | 92 |
93 |
94 | ); 95 | } 96 | } 97 | 98 | function mapStateToProps(state, ownProps) { 99 | // console.log(state) 100 | return { 101 | theme: state.theme, 102 | fontSize: state.fontSize, 103 | languages: state.languages, 104 | selectedLanguage: state.currentLanguage.selectedLanguage, 105 | selectedId: state.currentLanguage.selectedId 106 | } 107 | } 108 | 109 | export default connect(mapStateToProps, {themeAction, fontSizeAction, changeLanguage})(Header); -------------------------------------------------------------------------------- /src/Components/Header/Header.scss: -------------------------------------------------------------------------------- 1 | @import "../../index.scss"; 2 | 3 | .header { 4 | 5 | background-color: #1E1E1E; 6 | height: 10vh; 7 | width: 100vw; 8 | 9 | border-bottom: 1px solid gray; 10 | // box-shadow: 0px 0px 10px #000000; 11 | 12 | z-index: 100; 13 | 14 | display: flex; 15 | justify-content: space-between; 16 | align-items: center; 17 | 18 | -webkit-box-shadow: 1px 1px 10px 3px white; 19 | box-shadow: 1px 1px 10px 3px white; 20 | 21 | .header__left { 22 | display: flex; 23 | align-items: center; 24 | margin-left: 20px; 25 | 26 | .header__title { 27 | 28 | text-align: center; 29 | letter-spacing: 2px; 30 | color: rgba(255, 255, 255, 0.4); 31 | background: -webkit-gradient(linear, left top, right top, from(#222), to(#222), color-stop(0.5, #fff)); 32 | background: gradient(linear, left top, right top, from(#222), to(#222), color-stop(0.5, #fff)); 33 | background-size: 0px 100%; 34 | background-clip: text; 35 | animation-name: animateLogo; 36 | animation-duration: 3s; 37 | animation-iteration-count: infinite; 38 | background-repeat: no-repeat; 39 | background-position: 0 0; 40 | 41 | font-size: 32px; 42 | font-weight: bold; 43 | 44 | cursor: pointer; 45 | 46 | @include media("<=phone"){ 47 | font-size: 20px; 48 | margin: 0 0 0 -5px; 49 | } 50 | 51 | } 52 | 53 | @keyframes animateLogo { 54 | 0% { 55 | background-position: top left; 56 | background-size: 0px 100%; 57 | } 58 | 10% { 59 | background-size: 40% 100%; 60 | } 61 | 100% { 62 | background-position: right; 63 | background-size: 50px 100%; 64 | } 65 | } 66 | 67 | 68 | 69 | } 70 | 71 | .header__right { 72 | 73 | display: flex; 74 | align-items: center; 75 | margin-right: 30px; 76 | margin-top: 2.5px; 77 | 78 | .github--link { 79 | text-decoration: none; 80 | } 81 | 82 | select { 83 | background-color: #1E1E1E; 84 | color: white; 85 | border: 1px solid rgba(white, 0.7); 86 | border-radius: 5px; 87 | padding: 5px; 88 | font-size: 16px; 89 | font-weight: bold; 90 | cursor: pointer; 91 | margin: 0px 20px; 92 | outline: none; 93 | 94 | &:hover { 95 | border-color: white; 96 | } 97 | 98 | @include media("<=phone"){ 99 | padding: 3px; 100 | font-size: 12px; 101 | margin: 0px 6px; 102 | } 103 | } 104 | 105 | option { 106 | font-size: 16px; 107 | 108 | @include media("<=phone"){ 109 | padding: 5px; 110 | font-size: 14px; 111 | margin: 5px 8px; 112 | } 113 | } 114 | 115 | .githubIcon { 116 | opacity: 0.8; 117 | transition: opacity 100ms; 118 | 119 | &:hover { 120 | opacity: 1; 121 | } 122 | } 123 | 124 | .icon { 125 | font-size: 32px; 126 | color: white; 127 | cursor: pointer; 128 | padding: 5px; 129 | margin: 0px 20px; 130 | transition: transform 0.5s ease; 131 | 132 | @include media("<=phone"){ 133 | font-size: 28px; 134 | margin: 0px 3px; 135 | 136 | } 137 | } 138 | 139 | .themeIcon { 140 | background-color: rgb(90, 21, 180); 141 | border-radius: 50%; 142 | color: yellow; 143 | opacity: 0.9; 144 | transition: opacity 100ms; 145 | 146 | &:hover { 147 | opacity: 1; 148 | } 149 | } 150 | // .sunIcon{ 151 | // // transform: translateY(50px); 152 | 153 | // } 154 | 155 | .moonIcon { 156 | color: #ffffff; 157 | transform: rotate(-110deg); 158 | } 159 | } 160 | 161 | } 162 | 163 | .header--light { 164 | background-color: white; 165 | 166 | .header__left { 167 | 168 | .header__title { 169 | color: black; 170 | } 171 | } 172 | } 173 | -------------------------------------------------------------------------------- /src/Components/Main/Main.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import CodeEditor from '../CodeEditor/CodeEditor'; 3 | import Terminal from '../Terminal/Terminal'; 4 | import './Main.scss'; 5 | import KeyboardArrowRightIcon from '@mui/icons-material/KeyboardArrowRight'; 6 | import CircularProgress from '@mui/material/CircularProgress'; 7 | import axios from '../../axios'; 8 | import { connect } from 'react-redux'; 9 | import themeAction from '../../Actions/theme'; 10 | 11 | /* This Main class that calls CodeEditor and Terminal component, it is here that provides 12 | symbol for run button. Main class provides different features for our webiste, for example error handling for our user input in codeEditor class, likewise many other. */ 13 | 14 | class Main extends React.Component { 15 | 16 | constructor(props) { 17 | super(props); 18 | 19 | this.collapseAndShow = this.collapseAndShow.bind(this); 20 | this.main = React.createRef(); 21 | 22 | this.state = { 23 | collapsed: false, 24 | codeSubmitting: false, 25 | code: '\n', 26 | input: '', 27 | output: '', 28 | error: '' 29 | } 30 | 31 | this.submitCode = this.submitCode.bind(this); 32 | this.changeCode = this.changeCode.bind(this); 33 | this.changeInput = this.changeInput.bind(this); 34 | this.getCode = this.getCode.bind(this); 35 | } 36 | 37 | changeCode(code) { 38 | this.setState({ 39 | code: code 40 | }) 41 | } 42 | 43 | changeInput(event) { 44 | this.setState({ 45 | input: event.target.value 46 | }) 47 | } 48 | 49 | async submitCode() { 50 | 51 | this.setState({codeSubmitting: true}); 52 | 53 | const response = (await axios.post('/api/v1/ide/getcode', { 54 | language: this.props.selectedLanguage, 55 | code: this.state.code, 56 | input: this.state.input 57 | })).data; 58 | 59 | let error_msg= ""; 60 | 61 | if(response.status_msg === "Time Limit Exceeded") { 62 | error_msg = response.status_msg; 63 | } 64 | else { 65 | error_msg = response.full_compile_error; 66 | } 67 | 68 | this.setState({codeSubmitting: false, output: response.code_output.join('\n'), error: error_msg}); 69 | 70 | } 71 | 72 | collapseAndShow() { 73 | this.main.current.classList.toggle('collapsed'); 74 | this.setState(prevState => ({collapsed: !prevState.collapsed})); 75 | } 76 | 77 | async getCode() { 78 | const response = (await axios.get(`/api/v1/ide/${this.props.selectedId}`)).data 79 | // console.log(response) 80 | this.changeCode(response) 81 | } 82 | 83 | componentDidMount() { 84 | this.getCode(); 85 | } 86 | 87 | componentDidUpdate(prevProps) { 88 | if (prevProps.selectedId !== this.props.selectedId) { 89 | this.getCode(); 90 | } 91 | } 92 | 93 | render() { 94 | return ( 95 |
96 | 97 | 98 | 99 | 100 | { this.state.codeSubmitting ? 101 | : 102 | 103 | } 104 | 105 |
106 | ); 107 | } 108 | } 109 | 110 | function mapStateToProps(state, ownProps) { 111 | return { 112 | theme: state.theme, 113 | selectedLanguage: state.currentLanguage.selectedLanguage, 114 | selectedId: state.currentLanguage.selectedId 115 | } 116 | } 117 | 118 | export default connect(mapStateToProps, {themeAction})(Main); -------------------------------------------------------------------------------- /src/Components/Main/Main.scss: -------------------------------------------------------------------------------- 1 | .main { 2 | width: 100%; 3 | display: flex; 4 | 5 | .showCode { 6 | border-radius: 50px; 7 | border: 2px solid rgba(white, 0.8); 8 | color: rgba(white, 0.8); 9 | padding: 5px; 10 | position: absolute; 11 | right: 0; 12 | margin: 10px 20px; 13 | cursor: pointer; 14 | 15 | transition: color, border-color 100ms ease-in-out; 16 | transition: transform 0.25s ease-in-out;; 17 | 18 | &:hover { 19 | color: rgba(white,1); 20 | border-color: rgba(white,1); 21 | } 22 | } 23 | 24 | .showCode--collapsed { 25 | transform: rotate(180deg); 26 | } 27 | 28 | .submitCode { 29 | border-radius: 50px; 30 | color: rgba(white, 0.8); 31 | border: none; 32 | padding: 5px; 33 | font-size: 3em; 34 | position: absolute; 35 | right: 1%; 36 | bottom: 4%; 37 | margin: 10px 20px; 38 | cursor: pointer; 39 | background-color: #00ab66; 40 | 41 | transition: color 100ms ease-in-out; 42 | 43 | &:hover { 44 | color: rgba(white,1); 45 | } 46 | } 47 | 48 | .submitCode--progress { 49 | padding: 9px; 50 | } 51 | } -------------------------------------------------------------------------------- /src/Components/Notification/Notification.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | class Notification extends React.Component { 4 | 5 | render() { 6 | return ( 7 |
8 | ) 9 | } 10 | } 11 | 12 | export default Notification; -------------------------------------------------------------------------------- /src/Components/Notification/Notification.scss: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hash-define-organization/hashdefine-onlineIDE/4b44318f6f5a099ce6018c2b51d382d8136af3f9/src/Components/Notification/Notification.scss -------------------------------------------------------------------------------- /src/Components/Terminal/Terminal.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import './Terminal.scss'; 3 | 4 | 5 | /* Terminal class has two inner subTerminals one is for Input terminal where 6 | user will enter the input, another one is for output, where they can view the result 7 | of their desired input.*/ 8 | class Terminal extends React.Component { 9 | 10 | render() { 11 | 12 | return ( 13 |
14 |
15 |
16 | Enter Input 17 |
18 |