├── LICENSE
├── README.md
├── client
├── .gitignore
├── .prettierrc.js
├── README.md
├── craco.config.js
├── package-lock.json
├── package.json
├── public
│ ├── favicon.ico
│ ├── index.html
│ ├── logo192.png
│ ├── logo512.png
│ ├── manifest.json
│ └── robots.txt
├── src
│ ├── App.css
│ ├── App.jsx
│ ├── index.css
│ ├── index.js
│ └── logo.svg
├── tailwind.config.js
└── yarn.lock
└── server
├── .gitignore
├── actual_code.py
├── index.js
├── package-lock.json
├── package.json
└── test.py
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Suboptimal Engineer
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # LeetCodeClone
2 |
3 | Full stack LeetCode clone built with React.js, Tailwind CSS and Node.
4 |
5 | ### Setup
6 |
7 | ```
8 | # open terminal
9 | cd server
10 | npm install
11 | npm start
12 |
13 | # open second terminal
14 | cd client
15 | npm install
16 | npm run start
17 | ```
18 |
--------------------------------------------------------------------------------
/client/.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 |
--------------------------------------------------------------------------------
/client/.prettierrc.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | semi: true,
3 | tabWidth: 2,
4 | printWidth: 80,
5 | singleQuote: true,
6 | trailingComma: 'es5',
7 | arrowParens: 'always',
8 | };
9 |
--------------------------------------------------------------------------------
/client/README.md:
--------------------------------------------------------------------------------
1 | # Getting Started with Create React App
2 |
3 | This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app).
4 |
5 | ## Available Scripts
6 |
7 | In the project directory, you can run:
8 |
9 | ### `yarn start`
10 |
11 | Runs the app in the development mode.\
12 | Open [http://localhost:3000](http://localhost:3000) to view it in the browser.
13 |
14 | The page will reload if you make edits.\
15 | You will also see any lint errors in the console.
16 |
17 | ### `yarn test`
18 |
19 | Launches the test runner in the interactive watch mode.\
20 | See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information.
21 |
22 | ### `yarn build`
23 |
24 | Builds the app for production to the `build` folder.\
25 | It correctly bundles React in production mode and optimizes the build for the best performance.
26 |
27 | The build is minified and the filenames include the hashes.\
28 | Your app is ready to be deployed!
29 |
30 | See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information.
31 |
32 | ### `yarn eject`
33 |
34 | **Note: this is a one-way operation. Once you `eject`, you can’t go back!**
35 |
36 | 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.
37 |
38 | 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.
39 |
40 | 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.
41 |
42 | ## Learn More
43 |
44 | You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started).
45 |
46 | To learn React, check out the [React documentation](https://reactjs.org/).
47 |
48 | ### Code Splitting
49 |
50 | 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)
51 |
52 | ### Analyzing the Bundle Size
53 |
54 | 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)
55 |
56 | ### Making a Progressive Web App
57 |
58 | 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)
59 |
60 | ### Advanced Configuration
61 |
62 | 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)
63 |
64 | ### Deployment
65 |
66 | This section has moved here: [https://facebook.github.io/create-react-app/docs/deployment](https://facebook.github.io/create-react-app/docs/deployment)
67 |
68 | ### `yarn build` fails to minify
69 |
70 | 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)
71 |
--------------------------------------------------------------------------------
/client/craco.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | style: {
3 | postcss: {
4 | plugins: [require("tailwindcss"), require("autoprefixer")],
5 | },
6 | },
7 | };
8 |
--------------------------------------------------------------------------------
/client/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "client",
3 | "version": "0.1.0",
4 | "private": true,
5 | "dependencies": {
6 | "@craco/craco": "^6.3.0",
7 | "@testing-library/jest-dom": "^5.11.4",
8 | "@testing-library/react": "^11.1.0",
9 | "@testing-library/user-event": "^12.1.10",
10 | "@uiw/react-codemirror": "^3.2.1",
11 | "axios": "^0.21.4",
12 | "react": "^17.0.2",
13 | "react-dom": "^17.0.2",
14 | "react-scripts": "4.0.3",
15 | "web-vitals": "^1.0.1"
16 | },
17 | "scripts": {
18 | "start": "craco start",
19 | "build": "craco build",
20 | "test": "craco test",
21 | "eject": "react-scripts eject"
22 | },
23 | "eslintConfig": {
24 | "extends": [
25 | "react-app",
26 | "react-app/jest"
27 | ]
28 | },
29 | "browserslist": {
30 | "production": [
31 | ">0.2%",
32 | "not dead",
33 | "not op_mini all"
34 | ],
35 | "development": [
36 | "last 1 chrome version",
37 | "last 1 firefox version",
38 | "last 1 safari version"
39 | ]
40 | },
41 | "devDependencies": {
42 | "autoprefixer": "^9.8.6",
43 | "postcss": "^7.0.36",
44 | "tailwindcss": "npm:@tailwindcss/postcss7-compat@^2.2.14"
45 | }
46 | }
47 |
--------------------------------------------------------------------------------
/client/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/priyanshpsalian/Leetcode-Clone/0ab5aee37b084c3f86e11f5f591fb00513221d8e/client/public/favicon.ico
--------------------------------------------------------------------------------
/client/public/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
13 |
17 |
18 |
27 | React App
28 |
29 |
30 | You need to enable JavaScript to run this app.
31 |
32 |
42 |
43 |
44 |
--------------------------------------------------------------------------------
/client/public/logo192.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/priyanshpsalian/Leetcode-Clone/0ab5aee37b084c3f86e11f5f591fb00513221d8e/client/public/logo192.png
--------------------------------------------------------------------------------
/client/public/logo512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/priyanshpsalian/Leetcode-Clone/0ab5aee37b084c3f86e11f5f591fb00513221d8e/client/public/logo512.png
--------------------------------------------------------------------------------
/client/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 |
--------------------------------------------------------------------------------
/client/public/robots.txt:
--------------------------------------------------------------------------------
1 | # https://www.robotstxt.org/robotstxt.html
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/client/src/App.css:
--------------------------------------------------------------------------------
1 | .App {
2 | text-align: center;
3 | }
4 |
5 | .App-logo {
6 | height: 40vmin;
7 | pointer-events: none;
8 | }
9 |
10 | @media (prefers-reduced-motion: no-preference) {
11 | .App-logo {
12 | animation: App-logo-spin infinite 20s linear;
13 | }
14 | }
15 |
16 | .App-header {
17 | background-color: #282c34;
18 | min-height: 100vh;
19 | display: flex;
20 | flex-direction: column;
21 | align-items: center;
22 | justify-content: center;
23 | font-size: calc(10px + 2vmin);
24 | color: white;
25 | }
26 |
27 | .App-link {
28 | color: #61dafb;
29 | }
30 |
31 | @keyframes App-logo-spin {
32 | from {
33 | transform: rotate(0deg);
34 | }
35 | to {
36 | transform: rotate(360deg);
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/client/src/App.jsx:
--------------------------------------------------------------------------------
1 | import { useState } from 'react';
2 | import './App.css';
3 | import axios from 'axios';
4 | import 'codemirror/keymap/sublime';
5 | import 'codemirror/theme/dracula.css';
6 | import CodeMirror from '@uiw/react-codemirror';
7 |
8 | function App() {
9 | const [code, setCode] = useState('');
10 | const [testCaseResults, setTestCaseResults] = useState([]);
11 |
12 | const checkCode = () => {
13 | axios
14 | .post('http://localhost:80/python', { code })
15 | .then(({ data }) => {
16 | setTestCaseResults(data.testCaseResults);
17 | })
18 | .catch((err) => console.log(err));
19 | };
20 |
21 | return (
22 |
56 | );
57 | }
58 |
59 | export default App;
60 |
--------------------------------------------------------------------------------
/client/src/index.css:
--------------------------------------------------------------------------------
1 | body {
2 | margin: 0;
3 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen",
4 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue",
5 | sans-serif;
6 | -webkit-font-smoothing: antialiased;
7 | -moz-osx-font-smoothing: grayscale;
8 | }
9 |
10 | code {
11 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New",
12 | monospace;
13 | }
14 |
15 | @tailwind base;
16 | @tailwind components;
17 | @tailwind utilities;
18 |
--------------------------------------------------------------------------------
/client/src/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import ReactDOM from 'react-dom';
3 | import './index.css';
4 | import App from './App.jsx';
5 |
6 | ReactDOM.render(
7 |
8 |
9 | ,
10 | document.getElementById('root')
11 | );
12 |
--------------------------------------------------------------------------------
/client/src/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/client/tailwind.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | purge: ["./src/**/*.{js,jsx,ts,tsx}", "./public/index.html"],
3 | darkMode: false, // or 'media' or 'class'
4 | theme: {
5 | extend: {},
6 | },
7 | variants: {
8 | extend: {},
9 | },
10 | plugins: [],
11 | };
12 |
--------------------------------------------------------------------------------
/server/.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 |
--------------------------------------------------------------------------------
/server/actual_code.py:
--------------------------------------------------------------------------------
1 | import sys;
2 |
3 | def add(a, b):
4 | return a + b
5 |
6 | if __name__ == "__main__":
7 | a = int(sys.argv[1])
8 | b = int(sys.argv[2])
9 | result = int(sys.argv[3])
10 | print(add(a, b) == result)
11 |
--------------------------------------------------------------------------------
/server/index.js:
--------------------------------------------------------------------------------
1 | const fs = require("fs");
2 | const cors = require("cors");
3 | const express = require("express");
4 | const PythonShell = require("python-shell").PythonShell;
5 |
6 | const PORT = 80;
7 | const app = express();
8 |
9 | app.use(cors());
10 | app.use(express.json());
11 |
12 | app.listen(PORT, () => {
13 | console.log(`Server listening on ${PORT}`);
14 | });
15 |
16 | app.post("/python", (req, res) => {
17 | fs.writeFileSync("test.py", req.body.code);
18 |
19 | const testCases = {
20 | one: [1, 2, 3],
21 | two: [2, 2, 4],
22 | three: [2, -2, 0],
23 | };
24 |
25 | const promises = [];
26 | const testCaseResults = [];
27 |
28 | Object.keys(testCases).map((key) => {
29 | promises.push(
30 | new Promise((resolve, reject) => {
31 | PythonShell.run(
32 | "test.py",
33 | {
34 | mode: "text",
35 | pythonOptions: ["-u"],
36 | args: testCases[key],
37 | },
38 | function (err, results) {
39 | if (err) {
40 | reject();
41 | throw err;
42 | }
43 | console.log(results);
44 | testCaseResults.push(results[0]);
45 | resolve(true);
46 | }
47 | );
48 | })
49 | );
50 | });
51 |
52 | Promise.all(promises).then(() => {
53 | res.json({ testCaseResults });
54 | });
55 | });
56 |
--------------------------------------------------------------------------------
/server/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "version": "1.0.0",
9 | "license": "ISC",
10 | "dependencies": {
11 | "cors": "^2.8.5",
12 | "express": "^4.17.1",
13 | "python-shell": "^3.0.0"
14 | }
15 | },
16 | "node_modules/accepts": {
17 | "version": "1.3.7",
18 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
19 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
20 | "dependencies": {
21 | "mime-types": "~2.1.24",
22 | "negotiator": "0.6.2"
23 | },
24 | "engines": {
25 | "node": ">= 0.6"
26 | }
27 | },
28 | "node_modules/array-flatten": {
29 | "version": "1.1.1",
30 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
31 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
32 | },
33 | "node_modules/body-parser": {
34 | "version": "1.19.0",
35 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
36 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
37 | "dependencies": {
38 | "bytes": "3.1.0",
39 | "content-type": "~1.0.4",
40 | "debug": "2.6.9",
41 | "depd": "~1.1.2",
42 | "http-errors": "1.7.2",
43 | "iconv-lite": "0.4.24",
44 | "on-finished": "~2.3.0",
45 | "qs": "6.7.0",
46 | "raw-body": "2.4.0",
47 | "type-is": "~1.6.17"
48 | },
49 | "engines": {
50 | "node": ">= 0.8"
51 | }
52 | },
53 | "node_modules/bytes": {
54 | "version": "3.1.0",
55 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
56 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
57 | "engines": {
58 | "node": ">= 0.8"
59 | }
60 | },
61 | "node_modules/content-disposition": {
62 | "version": "0.5.3",
63 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
64 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
65 | "dependencies": {
66 | "safe-buffer": "5.1.2"
67 | },
68 | "engines": {
69 | "node": ">= 0.6"
70 | }
71 | },
72 | "node_modules/content-type": {
73 | "version": "1.0.4",
74 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
75 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==",
76 | "engines": {
77 | "node": ">= 0.6"
78 | }
79 | },
80 | "node_modules/cookie": {
81 | "version": "0.4.0",
82 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
83 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==",
84 | "engines": {
85 | "node": ">= 0.6"
86 | }
87 | },
88 | "node_modules/cookie-signature": {
89 | "version": "1.0.6",
90 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
91 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
92 | },
93 | "node_modules/cors": {
94 | "version": "2.8.5",
95 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
96 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
97 | "dependencies": {
98 | "object-assign": "^4",
99 | "vary": "^1"
100 | },
101 | "engines": {
102 | "node": ">= 0.10"
103 | }
104 | },
105 | "node_modules/debug": {
106 | "version": "2.6.9",
107 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
108 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
109 | "dependencies": {
110 | "ms": "2.0.0"
111 | }
112 | },
113 | "node_modules/depd": {
114 | "version": "1.1.2",
115 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
116 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
117 | "engines": {
118 | "node": ">= 0.6"
119 | }
120 | },
121 | "node_modules/destroy": {
122 | "version": "1.0.4",
123 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
124 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
125 | },
126 | "node_modules/ee-first": {
127 | "version": "1.1.1",
128 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
129 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
130 | },
131 | "node_modules/encodeurl": {
132 | "version": "1.0.2",
133 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
134 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
135 | "engines": {
136 | "node": ">= 0.8"
137 | }
138 | },
139 | "node_modules/escape-html": {
140 | "version": "1.0.3",
141 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
142 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
143 | },
144 | "node_modules/etag": {
145 | "version": "1.8.1",
146 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
147 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
148 | "engines": {
149 | "node": ">= 0.6"
150 | }
151 | },
152 | "node_modules/express": {
153 | "version": "4.17.1",
154 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
155 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
156 | "dependencies": {
157 | "accepts": "~1.3.7",
158 | "array-flatten": "1.1.1",
159 | "body-parser": "1.19.0",
160 | "content-disposition": "0.5.3",
161 | "content-type": "~1.0.4",
162 | "cookie": "0.4.0",
163 | "cookie-signature": "1.0.6",
164 | "debug": "2.6.9",
165 | "depd": "~1.1.2",
166 | "encodeurl": "~1.0.2",
167 | "escape-html": "~1.0.3",
168 | "etag": "~1.8.1",
169 | "finalhandler": "~1.1.2",
170 | "fresh": "0.5.2",
171 | "merge-descriptors": "1.0.1",
172 | "methods": "~1.1.2",
173 | "on-finished": "~2.3.0",
174 | "parseurl": "~1.3.3",
175 | "path-to-regexp": "0.1.7",
176 | "proxy-addr": "~2.0.5",
177 | "qs": "6.7.0",
178 | "range-parser": "~1.2.1",
179 | "safe-buffer": "5.1.2",
180 | "send": "0.17.1",
181 | "serve-static": "1.14.1",
182 | "setprototypeof": "1.1.1",
183 | "statuses": "~1.5.0",
184 | "type-is": "~1.6.18",
185 | "utils-merge": "1.0.1",
186 | "vary": "~1.1.2"
187 | },
188 | "engines": {
189 | "node": ">= 0.10.0"
190 | }
191 | },
192 | "node_modules/finalhandler": {
193 | "version": "1.1.2",
194 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
195 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
196 | "dependencies": {
197 | "debug": "2.6.9",
198 | "encodeurl": "~1.0.2",
199 | "escape-html": "~1.0.3",
200 | "on-finished": "~2.3.0",
201 | "parseurl": "~1.3.3",
202 | "statuses": "~1.5.0",
203 | "unpipe": "~1.0.0"
204 | },
205 | "engines": {
206 | "node": ">= 0.8"
207 | }
208 | },
209 | "node_modules/forwarded": {
210 | "version": "0.2.0",
211 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
212 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==",
213 | "engines": {
214 | "node": ">= 0.6"
215 | }
216 | },
217 | "node_modules/fresh": {
218 | "version": "0.5.2",
219 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
220 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
221 | "engines": {
222 | "node": ">= 0.6"
223 | }
224 | },
225 | "node_modules/http-errors": {
226 | "version": "1.7.2",
227 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
228 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
229 | "dependencies": {
230 | "depd": "~1.1.2",
231 | "inherits": "2.0.3",
232 | "setprototypeof": "1.1.1",
233 | "statuses": ">= 1.5.0 < 2",
234 | "toidentifier": "1.0.0"
235 | },
236 | "engines": {
237 | "node": ">= 0.6"
238 | }
239 | },
240 | "node_modules/iconv-lite": {
241 | "version": "0.4.24",
242 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
243 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
244 | "dependencies": {
245 | "safer-buffer": ">= 2.1.2 < 3"
246 | },
247 | "engines": {
248 | "node": ">=0.10.0"
249 | }
250 | },
251 | "node_modules/inherits": {
252 | "version": "2.0.3",
253 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
254 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
255 | },
256 | "node_modules/ipaddr.js": {
257 | "version": "1.9.1",
258 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
259 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
260 | "engines": {
261 | "node": ">= 0.10"
262 | }
263 | },
264 | "node_modules/media-typer": {
265 | "version": "0.3.0",
266 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
267 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
268 | "engines": {
269 | "node": ">= 0.6"
270 | }
271 | },
272 | "node_modules/merge-descriptors": {
273 | "version": "1.0.1",
274 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
275 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
276 | },
277 | "node_modules/methods": {
278 | "version": "1.1.2",
279 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
280 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=",
281 | "engines": {
282 | "node": ">= 0.6"
283 | }
284 | },
285 | "node_modules/mime": {
286 | "version": "1.6.0",
287 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
288 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
289 | "bin": {
290 | "mime": "cli.js"
291 | },
292 | "engines": {
293 | "node": ">=4"
294 | }
295 | },
296 | "node_modules/mime-db": {
297 | "version": "1.49.0",
298 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
299 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA==",
300 | "engines": {
301 | "node": ">= 0.6"
302 | }
303 | },
304 | "node_modules/mime-types": {
305 | "version": "2.1.32",
306 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
307 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
308 | "dependencies": {
309 | "mime-db": "1.49.0"
310 | },
311 | "engines": {
312 | "node": ">= 0.6"
313 | }
314 | },
315 | "node_modules/ms": {
316 | "version": "2.0.0",
317 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
318 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
319 | },
320 | "node_modules/negotiator": {
321 | "version": "0.6.2",
322 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
323 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
324 | "engines": {
325 | "node": ">= 0.6"
326 | }
327 | },
328 | "node_modules/object-assign": {
329 | "version": "4.1.1",
330 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
331 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
332 | "engines": {
333 | "node": ">=0.10.0"
334 | }
335 | },
336 | "node_modules/on-finished": {
337 | "version": "2.3.0",
338 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
339 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
340 | "dependencies": {
341 | "ee-first": "1.1.1"
342 | },
343 | "engines": {
344 | "node": ">= 0.8"
345 | }
346 | },
347 | "node_modules/parseurl": {
348 | "version": "1.3.3",
349 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
350 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
351 | "engines": {
352 | "node": ">= 0.8"
353 | }
354 | },
355 | "node_modules/path-to-regexp": {
356 | "version": "0.1.7",
357 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
358 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
359 | },
360 | "node_modules/proxy-addr": {
361 | "version": "2.0.7",
362 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
363 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
364 | "dependencies": {
365 | "forwarded": "0.2.0",
366 | "ipaddr.js": "1.9.1"
367 | },
368 | "engines": {
369 | "node": ">= 0.10"
370 | }
371 | },
372 | "node_modules/python-shell": {
373 | "version": "3.0.0",
374 | "resolved": "https://registry.npmjs.org/python-shell/-/python-shell-3.0.0.tgz",
375 | "integrity": "sha512-vlIkpJBwkhtG8d2rBbPEweg+3UXdkoduRZ0jLbIX3efYutBjTdmdmMrEQCQy9tkabH36yUjOhwTPFkH3BvoYZQ==",
376 | "engines": {
377 | "node": ">=0.10"
378 | }
379 | },
380 | "node_modules/qs": {
381 | "version": "6.7.0",
382 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
383 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
384 | "engines": {
385 | "node": ">=0.6"
386 | }
387 | },
388 | "node_modules/range-parser": {
389 | "version": "1.2.1",
390 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
391 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
392 | "engines": {
393 | "node": ">= 0.6"
394 | }
395 | },
396 | "node_modules/raw-body": {
397 | "version": "2.4.0",
398 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
399 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
400 | "dependencies": {
401 | "bytes": "3.1.0",
402 | "http-errors": "1.7.2",
403 | "iconv-lite": "0.4.24",
404 | "unpipe": "1.0.0"
405 | },
406 | "engines": {
407 | "node": ">= 0.8"
408 | }
409 | },
410 | "node_modules/safe-buffer": {
411 | "version": "5.1.2",
412 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
413 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
414 | },
415 | "node_modules/safer-buffer": {
416 | "version": "2.1.2",
417 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
418 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
419 | },
420 | "node_modules/send": {
421 | "version": "0.17.1",
422 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
423 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
424 | "dependencies": {
425 | "debug": "2.6.9",
426 | "depd": "~1.1.2",
427 | "destroy": "~1.0.4",
428 | "encodeurl": "~1.0.2",
429 | "escape-html": "~1.0.3",
430 | "etag": "~1.8.1",
431 | "fresh": "0.5.2",
432 | "http-errors": "~1.7.2",
433 | "mime": "1.6.0",
434 | "ms": "2.1.1",
435 | "on-finished": "~2.3.0",
436 | "range-parser": "~1.2.1",
437 | "statuses": "~1.5.0"
438 | },
439 | "engines": {
440 | "node": ">= 0.8.0"
441 | }
442 | },
443 | "node_modules/send/node_modules/ms": {
444 | "version": "2.1.1",
445 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
446 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
447 | },
448 | "node_modules/serve-static": {
449 | "version": "1.14.1",
450 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
451 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
452 | "dependencies": {
453 | "encodeurl": "~1.0.2",
454 | "escape-html": "~1.0.3",
455 | "parseurl": "~1.3.3",
456 | "send": "0.17.1"
457 | },
458 | "engines": {
459 | "node": ">= 0.8.0"
460 | }
461 | },
462 | "node_modules/setprototypeof": {
463 | "version": "1.1.1",
464 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
465 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
466 | },
467 | "node_modules/statuses": {
468 | "version": "1.5.0",
469 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
470 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
471 | "engines": {
472 | "node": ">= 0.6"
473 | }
474 | },
475 | "node_modules/toidentifier": {
476 | "version": "1.0.0",
477 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
478 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
479 | "engines": {
480 | "node": ">=0.6"
481 | }
482 | },
483 | "node_modules/type-is": {
484 | "version": "1.6.18",
485 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
486 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
487 | "dependencies": {
488 | "media-typer": "0.3.0",
489 | "mime-types": "~2.1.24"
490 | },
491 | "engines": {
492 | "node": ">= 0.6"
493 | }
494 | },
495 | "node_modules/unpipe": {
496 | "version": "1.0.0",
497 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
498 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
499 | "engines": {
500 | "node": ">= 0.8"
501 | }
502 | },
503 | "node_modules/utils-merge": {
504 | "version": "1.0.1",
505 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
506 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
507 | "engines": {
508 | "node": ">= 0.4.0"
509 | }
510 | },
511 | "node_modules/vary": {
512 | "version": "1.1.2",
513 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
514 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=",
515 | "engines": {
516 | "node": ">= 0.8"
517 | }
518 | }
519 | },
520 | "dependencies": {
521 | "accepts": {
522 | "version": "1.3.7",
523 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
524 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
525 | "requires": {
526 | "mime-types": "~2.1.24",
527 | "negotiator": "0.6.2"
528 | }
529 | },
530 | "array-flatten": {
531 | "version": "1.1.1",
532 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
533 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
534 | },
535 | "body-parser": {
536 | "version": "1.19.0",
537 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
538 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
539 | "requires": {
540 | "bytes": "3.1.0",
541 | "content-type": "~1.0.4",
542 | "debug": "2.6.9",
543 | "depd": "~1.1.2",
544 | "http-errors": "1.7.2",
545 | "iconv-lite": "0.4.24",
546 | "on-finished": "~2.3.0",
547 | "qs": "6.7.0",
548 | "raw-body": "2.4.0",
549 | "type-is": "~1.6.17"
550 | }
551 | },
552 | "bytes": {
553 | "version": "3.1.0",
554 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
555 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
556 | },
557 | "content-disposition": {
558 | "version": "0.5.3",
559 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
560 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
561 | "requires": {
562 | "safe-buffer": "5.1.2"
563 | }
564 | },
565 | "content-type": {
566 | "version": "1.0.4",
567 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
568 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
569 | },
570 | "cookie": {
571 | "version": "0.4.0",
572 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
573 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
574 | },
575 | "cookie-signature": {
576 | "version": "1.0.6",
577 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
578 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
579 | },
580 | "cors": {
581 | "version": "2.8.5",
582 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
583 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
584 | "requires": {
585 | "object-assign": "^4",
586 | "vary": "^1"
587 | }
588 | },
589 | "debug": {
590 | "version": "2.6.9",
591 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
592 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
593 | "requires": {
594 | "ms": "2.0.0"
595 | }
596 | },
597 | "depd": {
598 | "version": "1.1.2",
599 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
600 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
601 | },
602 | "destroy": {
603 | "version": "1.0.4",
604 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
605 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
606 | },
607 | "ee-first": {
608 | "version": "1.1.1",
609 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
610 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
611 | },
612 | "encodeurl": {
613 | "version": "1.0.2",
614 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
615 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
616 | },
617 | "escape-html": {
618 | "version": "1.0.3",
619 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
620 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
621 | },
622 | "etag": {
623 | "version": "1.8.1",
624 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
625 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
626 | },
627 | "express": {
628 | "version": "4.17.1",
629 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
630 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
631 | "requires": {
632 | "accepts": "~1.3.7",
633 | "array-flatten": "1.1.1",
634 | "body-parser": "1.19.0",
635 | "content-disposition": "0.5.3",
636 | "content-type": "~1.0.4",
637 | "cookie": "0.4.0",
638 | "cookie-signature": "1.0.6",
639 | "debug": "2.6.9",
640 | "depd": "~1.1.2",
641 | "encodeurl": "~1.0.2",
642 | "escape-html": "~1.0.3",
643 | "etag": "~1.8.1",
644 | "finalhandler": "~1.1.2",
645 | "fresh": "0.5.2",
646 | "merge-descriptors": "1.0.1",
647 | "methods": "~1.1.2",
648 | "on-finished": "~2.3.0",
649 | "parseurl": "~1.3.3",
650 | "path-to-regexp": "0.1.7",
651 | "proxy-addr": "~2.0.5",
652 | "qs": "6.7.0",
653 | "range-parser": "~1.2.1",
654 | "safe-buffer": "5.1.2",
655 | "send": "0.17.1",
656 | "serve-static": "1.14.1",
657 | "setprototypeof": "1.1.1",
658 | "statuses": "~1.5.0",
659 | "type-is": "~1.6.18",
660 | "utils-merge": "1.0.1",
661 | "vary": "~1.1.2"
662 | }
663 | },
664 | "finalhandler": {
665 | "version": "1.1.2",
666 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
667 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
668 | "requires": {
669 | "debug": "2.6.9",
670 | "encodeurl": "~1.0.2",
671 | "escape-html": "~1.0.3",
672 | "on-finished": "~2.3.0",
673 | "parseurl": "~1.3.3",
674 | "statuses": "~1.5.0",
675 | "unpipe": "~1.0.0"
676 | }
677 | },
678 | "forwarded": {
679 | "version": "0.2.0",
680 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz",
681 | "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow=="
682 | },
683 | "fresh": {
684 | "version": "0.5.2",
685 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
686 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
687 | },
688 | "http-errors": {
689 | "version": "1.7.2",
690 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
691 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
692 | "requires": {
693 | "depd": "~1.1.2",
694 | "inherits": "2.0.3",
695 | "setprototypeof": "1.1.1",
696 | "statuses": ">= 1.5.0 < 2",
697 | "toidentifier": "1.0.0"
698 | }
699 | },
700 | "iconv-lite": {
701 | "version": "0.4.24",
702 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
703 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
704 | "requires": {
705 | "safer-buffer": ">= 2.1.2 < 3"
706 | }
707 | },
708 | "inherits": {
709 | "version": "2.0.3",
710 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
711 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
712 | },
713 | "ipaddr.js": {
714 | "version": "1.9.1",
715 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
716 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
717 | },
718 | "media-typer": {
719 | "version": "0.3.0",
720 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
721 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
722 | },
723 | "merge-descriptors": {
724 | "version": "1.0.1",
725 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
726 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
727 | },
728 | "methods": {
729 | "version": "1.1.2",
730 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
731 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
732 | },
733 | "mime": {
734 | "version": "1.6.0",
735 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
736 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
737 | },
738 | "mime-db": {
739 | "version": "1.49.0",
740 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.49.0.tgz",
741 | "integrity": "sha512-CIc8j9URtOVApSFCQIF+VBkX1RwXp/oMMOrqdyXSBXq5RWNEsRfyj1kiRnQgmNXmHxPoFIxOroKA3zcU9P+nAA=="
742 | },
743 | "mime-types": {
744 | "version": "2.1.32",
745 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.32.tgz",
746 | "integrity": "sha512-hJGaVS4G4c9TSMYh2n6SQAGrC4RnfU+daP8G7cSCmaqNjiOoUY0VHCMS42pxnQmVF1GWwFhbHWn3RIxCqTmZ9A==",
747 | "requires": {
748 | "mime-db": "1.49.0"
749 | }
750 | },
751 | "ms": {
752 | "version": "2.0.0",
753 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
754 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
755 | },
756 | "negotiator": {
757 | "version": "0.6.2",
758 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
759 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
760 | },
761 | "object-assign": {
762 | "version": "4.1.1",
763 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
764 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
765 | },
766 | "on-finished": {
767 | "version": "2.3.0",
768 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
769 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
770 | "requires": {
771 | "ee-first": "1.1.1"
772 | }
773 | },
774 | "parseurl": {
775 | "version": "1.3.3",
776 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
777 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
778 | },
779 | "path-to-regexp": {
780 | "version": "0.1.7",
781 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
782 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
783 | },
784 | "proxy-addr": {
785 | "version": "2.0.7",
786 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz",
787 | "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==",
788 | "requires": {
789 | "forwarded": "0.2.0",
790 | "ipaddr.js": "1.9.1"
791 | }
792 | },
793 | "python-shell": {
794 | "version": "3.0.0",
795 | "resolved": "https://registry.npmjs.org/python-shell/-/python-shell-3.0.0.tgz",
796 | "integrity": "sha512-vlIkpJBwkhtG8d2rBbPEweg+3UXdkoduRZ0jLbIX3efYutBjTdmdmMrEQCQy9tkabH36yUjOhwTPFkH3BvoYZQ=="
797 | },
798 | "qs": {
799 | "version": "6.7.0",
800 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
801 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
802 | },
803 | "range-parser": {
804 | "version": "1.2.1",
805 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
806 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
807 | },
808 | "raw-body": {
809 | "version": "2.4.0",
810 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
811 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
812 | "requires": {
813 | "bytes": "3.1.0",
814 | "http-errors": "1.7.2",
815 | "iconv-lite": "0.4.24",
816 | "unpipe": "1.0.0"
817 | }
818 | },
819 | "safe-buffer": {
820 | "version": "5.1.2",
821 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
822 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
823 | },
824 | "safer-buffer": {
825 | "version": "2.1.2",
826 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
827 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
828 | },
829 | "send": {
830 | "version": "0.17.1",
831 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
832 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
833 | "requires": {
834 | "debug": "2.6.9",
835 | "depd": "~1.1.2",
836 | "destroy": "~1.0.4",
837 | "encodeurl": "~1.0.2",
838 | "escape-html": "~1.0.3",
839 | "etag": "~1.8.1",
840 | "fresh": "0.5.2",
841 | "http-errors": "~1.7.2",
842 | "mime": "1.6.0",
843 | "ms": "2.1.1",
844 | "on-finished": "~2.3.0",
845 | "range-parser": "~1.2.1",
846 | "statuses": "~1.5.0"
847 | },
848 | "dependencies": {
849 | "ms": {
850 | "version": "2.1.1",
851 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
852 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
853 | }
854 | }
855 | },
856 | "serve-static": {
857 | "version": "1.14.1",
858 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
859 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
860 | "requires": {
861 | "encodeurl": "~1.0.2",
862 | "escape-html": "~1.0.3",
863 | "parseurl": "~1.3.3",
864 | "send": "0.17.1"
865 | }
866 | },
867 | "setprototypeof": {
868 | "version": "1.1.1",
869 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
870 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
871 | },
872 | "statuses": {
873 | "version": "1.5.0",
874 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
875 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
876 | },
877 | "toidentifier": {
878 | "version": "1.0.0",
879 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
880 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
881 | },
882 | "type-is": {
883 | "version": "1.6.18",
884 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
885 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
886 | "requires": {
887 | "media-typer": "0.3.0",
888 | "mime-types": "~2.1.24"
889 | }
890 | },
891 | "unpipe": {
892 | "version": "1.0.0",
893 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
894 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
895 | },
896 | "utils-merge": {
897 | "version": "1.0.1",
898 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
899 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
900 | },
901 | "vary": {
902 | "version": "1.1.2",
903 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
904 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
905 | }
906 | }
907 | }
908 |
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "description": "Server to execute code.",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1",
8 | "start": "node index.js"
9 | },
10 | "author": "Suboptimal Engineer",
11 | "license": "ISC",
12 | "dependencies": {
13 | "cors": "^2.8.5",
14 | "express": "^4.17.1",
15 | "python-shell": "^3.0.0"
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/server/test.py:
--------------------------------------------------------------------------------
1 | import sys;
2 |
3 | def add(a, b):
4 | return a + b
5 |
6 | if __name__ == "__main__":
7 | a = int(sys.argv[1])
8 | b = int(sys.argv[2])
9 | result = int(sys.argv[3])
10 | print(add(a, b) == result)
11 |
--------------------------------------------------------------------------------