├── README.md
├── client
├── index.html
├── index.js
└── stylesheet.css
└── server
├── .gitignore
├── app.js
├── dbService.js
├── package-lock.json
└── package.json
/README.md:
--------------------------------------------------------------------------------
1 | #Node.js, Express & MySQL Tutorial.
2 |
3 |
4 | In this video, we will use the Express framework with HTML, CSS, and JavaScript to build a simple CRUD (Create, Read, Update, Delete) App.
5 | I will show you how to make queries using MySQL and how to connect that to our express app to build a fullstack application.
6 |
7 | https://youtu.be/vrj9AohVhPA
--------------------------------------------------------------------------------
/client/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | web app
8 |
9 |
10 |
11 | Name:
12 |
13 | Add Name
14 |
15 |
16 |
17 |
18 | Search
19 |
20 |
21 |
22 |
23 | ID
24 | Name
25 | Date Added
26 | Delete
27 | Edit
28 |
29 |
30 |
31 |
32 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/client/index.js:
--------------------------------------------------------------------------------
1 | document.addEventListener('DOMContentLoaded', function () {
2 | fetch('http://localhost:5000/getAll')
3 | .then(response => response.json())
4 | .then(data => loadHTMLTable(data['data']));
5 |
6 | });
7 |
8 | document.querySelector('table tbody').addEventListener('click', function(event) {
9 | if (event.target.className === "delete-row-btn") {
10 | deleteRowById(event.target.dataset.id);
11 | }
12 | if (event.target.className === "edit-row-btn") {
13 | handleEditRow(event.target.dataset.id);
14 | }
15 | });
16 |
17 | const updateBtn = document.querySelector('#update-row-btn');
18 | const searchBtn = document.querySelector('#search-btn');
19 |
20 | searchBtn.onclick = function() {
21 | const searchValue = document.querySelector('#search-input').value;
22 |
23 | fetch('http://localhost:5000/search/' + searchValue)
24 | .then(response => response.json())
25 | .then(data => loadHTMLTable(data['data']));
26 | }
27 |
28 | function deleteRowById(id) {
29 | fetch('http://localhost:5000/delete/' + id, {
30 | method: 'DELETE'
31 | })
32 | .then(response => response.json())
33 | .then(data => {
34 | if (data.success) {
35 | location.reload();
36 | }
37 | });
38 | }
39 |
40 | function handleEditRow(id) {
41 | const updateSection = document.querySelector('#update-row');
42 | updateSection.hidden = false;
43 | document.querySelector('#update-name-input').dataset.id = id;
44 | }
45 |
46 | updateBtn.onclick = function() {
47 | const updateNameInput = document.querySelector('#update-name-input');
48 |
49 |
50 | console.log(updateNameInput);
51 |
52 | fetch('http://localhost:5000/update', {
53 | method: 'PATCH',
54 | headers: {
55 | 'Content-type' : 'application/json'
56 | },
57 | body: JSON.stringify({
58 | id: updateNameInput.dataset.id,
59 | name: updateNameInput.value
60 | })
61 | })
62 | .then(response => response.json())
63 | .then(data => {
64 | if (data.success) {
65 | location.reload();
66 | }
67 | })
68 | }
69 |
70 |
71 | const addBtn = document.querySelector('#add-name-btn');
72 |
73 | addBtn.onclick = function () {
74 | const nameInput = document.querySelector('#name-input');
75 | const name = nameInput.value;
76 | nameInput.value = "";
77 |
78 | fetch('http://localhost:5000/insert', {
79 | headers: {
80 | 'Content-type': 'application/json'
81 | },
82 | method: 'POST',
83 | body: JSON.stringify({ name : name})
84 | })
85 | .then(response => response.json())
86 | .then(data => insertRowIntoTable(data['data']));
87 | }
88 |
89 | function insertRowIntoTable(data) {
90 | console.log(data);
91 | const table = document.querySelector('table tbody');
92 | const isTableData = table.querySelector('.no-data');
93 |
94 | let tableHtml = "";
95 |
96 | for (var key in data) {
97 | if (data.hasOwnProperty(key)) {
98 | if (key === 'dateAdded') {
99 | data[key] = new Date(data[key]).toLocaleString();
100 | }
101 | tableHtml += `${data[key]} `;
102 | }
103 | }
104 |
105 | tableHtml += `Delete `;
106 | tableHtml += `Edit `;
107 |
108 | tableHtml += " ";
109 |
110 | if (isTableData) {
111 | table.innerHTML = tableHtml;
112 | } else {
113 | const newRow = table.insertRow();
114 | newRow.innerHTML = tableHtml;
115 | }
116 | }
117 |
118 | function loadHTMLTable(data) {
119 | const table = document.querySelector('table tbody');
120 |
121 | if (data.length === 0) {
122 | table.innerHTML = "No Data ";
123 | return;
124 | }
125 |
126 | let tableHtml = "";
127 |
128 | data.forEach(function ({id, name, date_added}) {
129 | tableHtml += "";
130 | tableHtml += `${id} `;
131 | tableHtml += `${name} `;
132 | tableHtml += `${new Date(date_added).toLocaleString()} `;
133 | tableHtml += `Delete `;
134 | tableHtml += `Edit `;
135 | tableHtml += " ";
136 | });
137 |
138 | table.innerHTML = tableHtml;
139 | }
--------------------------------------------------------------------------------
/client/stylesheet.css:
--------------------------------------------------------------------------------
1 | main {
2 | width: 50%;
3 | margin: 50px auto;
4 | text-align: center;
5 | }
6 |
7 | table {
8 | margin: 50px auto;
9 | }
10 |
11 | table, th, td {
12 | border-collapse: collapse;
13 | border: 1px solid #000;
14 | }
15 |
16 | th, td {
17 | padding: 5px;
18 | }
--------------------------------------------------------------------------------
/server/.gitignore:
--------------------------------------------------------------------------------
1 | .env
2 | node_modules
--------------------------------------------------------------------------------
/server/app.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const app = express();
3 | const cors = require('cors');
4 | const dotenv = require('dotenv');
5 | dotenv.config();
6 |
7 | const dbService = require('./dbService');
8 |
9 | app.use(cors());
10 | app.use(express.json());
11 | app.use(express.urlencoded({ extended : false }));
12 |
13 |
14 | // create
15 | app.post('/insert', (request, response) => {
16 | const { name } = request.body;
17 | const db = dbService.getDbServiceInstance();
18 |
19 | const result = db.insertNewName(name);
20 |
21 | result
22 | .then(data => response.json({ data: data}))
23 | .catch(err => console.log(err));
24 | });
25 |
26 | // read
27 | app.get('/getAll', (request, response) => {
28 | const db = dbService.getDbServiceInstance();
29 |
30 | const result = db.getAllData();
31 |
32 | result
33 | .then(data => response.json({data : data}))
34 | .catch(err => console.log(err));
35 | })
36 |
37 | // update
38 | app.patch('/update', (request, response) => {
39 | const { id, name } = request.body;
40 | const db = dbService.getDbServiceInstance();
41 |
42 | const result = db.updateNameById(id, name);
43 |
44 | result
45 | .then(data => response.json({success : data}))
46 | .catch(err => console.log(err));
47 | });
48 |
49 | // delete
50 | app.delete('/delete/:id', (request, response) => {
51 | const { id } = request.params;
52 | const db = dbService.getDbServiceInstance();
53 |
54 | const result = db.deleteRowById(id);
55 |
56 | result
57 | .then(data => response.json({success : data}))
58 | .catch(err => console.log(err));
59 | });
60 |
61 | app.get('/search/:name', (request, response) => {
62 | const { name } = request.params;
63 | const db = dbService.getDbServiceInstance();
64 |
65 | const result = db.searchByName(name);
66 |
67 | result
68 | .then(data => response.json({data : data}))
69 | .catch(err => console.log(err));
70 | })
71 |
72 | app.listen(process.env.PORT, () => console.log('app is running'));
--------------------------------------------------------------------------------
/server/dbService.js:
--------------------------------------------------------------------------------
1 | const mysql = require('mysql');
2 | const dotenv = require('dotenv');
3 | let instance = null;
4 | dotenv.config();
5 |
6 | const connection = mysql.createConnection({
7 | host: process.env.HOST,
8 | user: process.env.USER,
9 | password: process.env.PASSWORD,
10 | database: process.env.DATABASE,
11 | port: process.env.DB_PORT
12 | });
13 |
14 | connection.connect((err) => {
15 | if (err) {
16 | console.log(err.message);
17 | }
18 | // console.log('db ' + connection.state);
19 | });
20 |
21 |
22 | class DbService {
23 | static getDbServiceInstance() {
24 | return instance ? instance : new DbService();
25 | }
26 |
27 | async getAllData() {
28 | try {
29 | const response = await new Promise((resolve, reject) => {
30 | const query = "SELECT * FROM names;";
31 |
32 | connection.query(query, (err, results) => {
33 | if (err) reject(new Error(err.message));
34 | resolve(results);
35 | })
36 | });
37 | // console.log(response);
38 | return response;
39 | } catch (error) {
40 | console.log(error);
41 | }
42 | }
43 |
44 |
45 | async insertNewName(name) {
46 | try {
47 | const dateAdded = new Date();
48 | const insertId = await new Promise((resolve, reject) => {
49 | const query = "INSERT INTO names (name, date_added) VALUES (?,?);";
50 |
51 | connection.query(query, [name, dateAdded] , (err, result) => {
52 | if (err) reject(new Error(err.message));
53 | resolve(result.insertId);
54 | })
55 | });
56 | return {
57 | id : insertId,
58 | name : name,
59 | dateAdded : dateAdded
60 | };
61 | } catch (error) {
62 | console.log(error);
63 | }
64 | }
65 |
66 | async deleteRowById(id) {
67 | try {
68 | id = parseInt(id, 10);
69 | const response = await new Promise((resolve, reject) => {
70 | const query = "DELETE FROM names WHERE id = ?";
71 |
72 | connection.query(query, [id] , (err, result) => {
73 | if (err) reject(new Error(err.message));
74 | resolve(result.affectedRows);
75 | })
76 | });
77 |
78 | return response === 1 ? true : false;
79 | } catch (error) {
80 | console.log(error);
81 | return false;
82 | }
83 | }
84 |
85 | async updateNameById(id, name) {
86 | try {
87 | id = parseInt(id, 10);
88 | const response = await new Promise((resolve, reject) => {
89 | const query = "UPDATE names SET name = ? WHERE id = ?";
90 |
91 | connection.query(query, [name, id] , (err, result) => {
92 | if (err) reject(new Error(err.message));
93 | resolve(result.affectedRows);
94 | })
95 | });
96 |
97 | return response === 1 ? true : false;
98 | } catch (error) {
99 | console.log(error);
100 | return false;
101 | }
102 | }
103 |
104 | async searchByName(name) {
105 | try {
106 | const response = await new Promise((resolve, reject) => {
107 | const query = "SELECT * FROM names WHERE name = ?;";
108 |
109 | connection.query(query, [name], (err, results) => {
110 | if (err) reject(new Error(err.message));
111 | resolve(results);
112 | })
113 | });
114 |
115 | return response;
116 | } catch (error) {
117 | console.log(error);
118 | }
119 | }
120 | }
121 |
122 | module.exports = DbService;
--------------------------------------------------------------------------------
/server/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "abbrev": {
8 | "version": "1.1.1",
9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
10 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==",
11 | "dev": true
12 | },
13 | "accepts": {
14 | "version": "1.3.7",
15 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
16 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
17 | "requires": {
18 | "mime-types": "~2.1.24",
19 | "negotiator": "0.6.2"
20 | }
21 | },
22 | "ansi-align": {
23 | "version": "2.0.0",
24 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz",
25 | "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=",
26 | "dev": true,
27 | "requires": {
28 | "string-width": "^2.0.0"
29 | }
30 | },
31 | "ansi-regex": {
32 | "version": "3.0.0",
33 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
34 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
35 | "dev": true
36 | },
37 | "ansi-styles": {
38 | "version": "3.2.1",
39 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
40 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
41 | "dev": true,
42 | "requires": {
43 | "color-convert": "^1.9.0"
44 | }
45 | },
46 | "anymatch": {
47 | "version": "3.1.1",
48 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
49 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
50 | "dev": true,
51 | "requires": {
52 | "normalize-path": "^3.0.0",
53 | "picomatch": "^2.0.4"
54 | }
55 | },
56 | "array-flatten": {
57 | "version": "1.1.1",
58 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
59 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
60 | },
61 | "balanced-match": {
62 | "version": "1.0.0",
63 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
64 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
65 | "dev": true
66 | },
67 | "bignumber.js": {
68 | "version": "9.0.0",
69 | "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.0.tgz",
70 | "integrity": "sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A=="
71 | },
72 | "binary-extensions": {
73 | "version": "2.0.0",
74 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.0.0.tgz",
75 | "integrity": "sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow==",
76 | "dev": true
77 | },
78 | "body-parser": {
79 | "version": "1.19.0",
80 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
81 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
82 | "requires": {
83 | "bytes": "3.1.0",
84 | "content-type": "~1.0.4",
85 | "debug": "2.6.9",
86 | "depd": "~1.1.2",
87 | "http-errors": "1.7.2",
88 | "iconv-lite": "0.4.24",
89 | "on-finished": "~2.3.0",
90 | "qs": "6.7.0",
91 | "raw-body": "2.4.0",
92 | "type-is": "~1.6.17"
93 | }
94 | },
95 | "boxen": {
96 | "version": "1.3.0",
97 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.3.0.tgz",
98 | "integrity": "sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw==",
99 | "dev": true,
100 | "requires": {
101 | "ansi-align": "^2.0.0",
102 | "camelcase": "^4.0.0",
103 | "chalk": "^2.0.1",
104 | "cli-boxes": "^1.0.0",
105 | "string-width": "^2.0.0",
106 | "term-size": "^1.2.0",
107 | "widest-line": "^2.0.0"
108 | }
109 | },
110 | "brace-expansion": {
111 | "version": "1.1.11",
112 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
113 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
114 | "dev": true,
115 | "requires": {
116 | "balanced-match": "^1.0.0",
117 | "concat-map": "0.0.1"
118 | }
119 | },
120 | "braces": {
121 | "version": "3.0.2",
122 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
123 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
124 | "dev": true,
125 | "requires": {
126 | "fill-range": "^7.0.1"
127 | }
128 | },
129 | "bytes": {
130 | "version": "3.1.0",
131 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
132 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
133 | },
134 | "camelcase": {
135 | "version": "4.1.0",
136 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
137 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=",
138 | "dev": true
139 | },
140 | "capture-stack-trace": {
141 | "version": "1.0.1",
142 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz",
143 | "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==",
144 | "dev": true
145 | },
146 | "chalk": {
147 | "version": "2.4.2",
148 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
149 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
150 | "dev": true,
151 | "requires": {
152 | "ansi-styles": "^3.2.1",
153 | "escape-string-regexp": "^1.0.5",
154 | "supports-color": "^5.3.0"
155 | }
156 | },
157 | "chokidar": {
158 | "version": "3.3.1",
159 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
160 | "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==",
161 | "dev": true,
162 | "requires": {
163 | "anymatch": "~3.1.1",
164 | "braces": "~3.0.2",
165 | "fsevents": "~2.1.2",
166 | "glob-parent": "~5.1.0",
167 | "is-binary-path": "~2.1.0",
168 | "is-glob": "~4.0.1",
169 | "normalize-path": "~3.0.0",
170 | "readdirp": "~3.3.0"
171 | }
172 | },
173 | "ci-info": {
174 | "version": "1.6.0",
175 | "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.6.0.tgz",
176 | "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==",
177 | "dev": true
178 | },
179 | "cli-boxes": {
180 | "version": "1.0.0",
181 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz",
182 | "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=",
183 | "dev": true
184 | },
185 | "color-convert": {
186 | "version": "1.9.3",
187 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
188 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
189 | "dev": true,
190 | "requires": {
191 | "color-name": "1.1.3"
192 | }
193 | },
194 | "color-name": {
195 | "version": "1.1.3",
196 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
197 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
198 | "dev": true
199 | },
200 | "concat-map": {
201 | "version": "0.0.1",
202 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
203 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
204 | "dev": true
205 | },
206 | "configstore": {
207 | "version": "3.1.2",
208 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.2.tgz",
209 | "integrity": "sha512-vtv5HtGjcYUgFrXc6Kx747B83MRRVS5R1VTEQoXvuP+kMI+if6uywV0nDGoiydJRy4yk7h9od5Og0kxx4zUXmw==",
210 | "dev": true,
211 | "requires": {
212 | "dot-prop": "^4.1.0",
213 | "graceful-fs": "^4.1.2",
214 | "make-dir": "^1.0.0",
215 | "unique-string": "^1.0.0",
216 | "write-file-atomic": "^2.0.0",
217 | "xdg-basedir": "^3.0.0"
218 | }
219 | },
220 | "content-disposition": {
221 | "version": "0.5.3",
222 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
223 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
224 | "requires": {
225 | "safe-buffer": "5.1.2"
226 | }
227 | },
228 | "content-type": {
229 | "version": "1.0.4",
230 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
231 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
232 | },
233 | "cookie": {
234 | "version": "0.4.0",
235 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
236 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
237 | },
238 | "cookie-signature": {
239 | "version": "1.0.6",
240 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
241 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
242 | },
243 | "core-util-is": {
244 | "version": "1.0.2",
245 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
246 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
247 | },
248 | "cors": {
249 | "version": "2.8.5",
250 | "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz",
251 | "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==",
252 | "requires": {
253 | "object-assign": "^4",
254 | "vary": "^1"
255 | }
256 | },
257 | "create-error-class": {
258 | "version": "3.0.2",
259 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
260 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=",
261 | "dev": true,
262 | "requires": {
263 | "capture-stack-trace": "^1.0.0"
264 | }
265 | },
266 | "cross-spawn": {
267 | "version": "5.1.0",
268 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
269 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
270 | "dev": true,
271 | "requires": {
272 | "lru-cache": "^4.0.1",
273 | "shebang-command": "^1.2.0",
274 | "which": "^1.2.9"
275 | }
276 | },
277 | "crypto-random-string": {
278 | "version": "1.0.0",
279 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz",
280 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=",
281 | "dev": true
282 | },
283 | "debug": {
284 | "version": "2.6.9",
285 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
286 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
287 | "requires": {
288 | "ms": "2.0.0"
289 | }
290 | },
291 | "deep-extend": {
292 | "version": "0.6.0",
293 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
294 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==",
295 | "dev": true
296 | },
297 | "depd": {
298 | "version": "1.1.2",
299 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
300 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
301 | },
302 | "destroy": {
303 | "version": "1.0.4",
304 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
305 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
306 | },
307 | "dot-prop": {
308 | "version": "4.2.0",
309 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz",
310 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==",
311 | "dev": true,
312 | "requires": {
313 | "is-obj": "^1.0.0"
314 | }
315 | },
316 | "dotenv": {
317 | "version": "8.2.0",
318 | "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz",
319 | "integrity": "sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw=="
320 | },
321 | "duplexer3": {
322 | "version": "0.1.4",
323 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz",
324 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=",
325 | "dev": true
326 | },
327 | "ee-first": {
328 | "version": "1.1.1",
329 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
330 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
331 | },
332 | "encodeurl": {
333 | "version": "1.0.2",
334 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
335 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
336 | },
337 | "escape-html": {
338 | "version": "1.0.3",
339 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
340 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
341 | },
342 | "escape-string-regexp": {
343 | "version": "1.0.5",
344 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
345 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
346 | "dev": true
347 | },
348 | "etag": {
349 | "version": "1.8.1",
350 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
351 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
352 | },
353 | "execa": {
354 | "version": "0.7.0",
355 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz",
356 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=",
357 | "dev": true,
358 | "requires": {
359 | "cross-spawn": "^5.0.1",
360 | "get-stream": "^3.0.0",
361 | "is-stream": "^1.1.0",
362 | "npm-run-path": "^2.0.0",
363 | "p-finally": "^1.0.0",
364 | "signal-exit": "^3.0.0",
365 | "strip-eof": "^1.0.0"
366 | }
367 | },
368 | "express": {
369 | "version": "4.17.1",
370 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
371 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
372 | "requires": {
373 | "accepts": "~1.3.7",
374 | "array-flatten": "1.1.1",
375 | "body-parser": "1.19.0",
376 | "content-disposition": "0.5.3",
377 | "content-type": "~1.0.4",
378 | "cookie": "0.4.0",
379 | "cookie-signature": "1.0.6",
380 | "debug": "2.6.9",
381 | "depd": "~1.1.2",
382 | "encodeurl": "~1.0.2",
383 | "escape-html": "~1.0.3",
384 | "etag": "~1.8.1",
385 | "finalhandler": "~1.1.2",
386 | "fresh": "0.5.2",
387 | "merge-descriptors": "1.0.1",
388 | "methods": "~1.1.2",
389 | "on-finished": "~2.3.0",
390 | "parseurl": "~1.3.3",
391 | "path-to-regexp": "0.1.7",
392 | "proxy-addr": "~2.0.5",
393 | "qs": "6.7.0",
394 | "range-parser": "~1.2.1",
395 | "safe-buffer": "5.1.2",
396 | "send": "0.17.1",
397 | "serve-static": "1.14.1",
398 | "setprototypeof": "1.1.1",
399 | "statuses": "~1.5.0",
400 | "type-is": "~1.6.18",
401 | "utils-merge": "1.0.1",
402 | "vary": "~1.1.2"
403 | }
404 | },
405 | "fill-range": {
406 | "version": "7.0.1",
407 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
408 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
409 | "dev": true,
410 | "requires": {
411 | "to-regex-range": "^5.0.1"
412 | }
413 | },
414 | "finalhandler": {
415 | "version": "1.1.2",
416 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
417 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
418 | "requires": {
419 | "debug": "2.6.9",
420 | "encodeurl": "~1.0.2",
421 | "escape-html": "~1.0.3",
422 | "on-finished": "~2.3.0",
423 | "parseurl": "~1.3.3",
424 | "statuses": "~1.5.0",
425 | "unpipe": "~1.0.0"
426 | }
427 | },
428 | "forwarded": {
429 | "version": "0.1.2",
430 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
431 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
432 | },
433 | "fresh": {
434 | "version": "0.5.2",
435 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
436 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
437 | },
438 | "fsevents": {
439 | "version": "2.1.2",
440 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.2.tgz",
441 | "integrity": "sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA==",
442 | "dev": true,
443 | "optional": true
444 | },
445 | "get-stream": {
446 | "version": "3.0.0",
447 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
448 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=",
449 | "dev": true
450 | },
451 | "glob-parent": {
452 | "version": "5.1.0",
453 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz",
454 | "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==",
455 | "dev": true,
456 | "requires": {
457 | "is-glob": "^4.0.1"
458 | }
459 | },
460 | "global-dirs": {
461 | "version": "0.1.1",
462 | "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-0.1.1.tgz",
463 | "integrity": "sha1-sxnA3UYH81PzvpzKTHL8FIxJ9EU=",
464 | "dev": true,
465 | "requires": {
466 | "ini": "^1.3.4"
467 | }
468 | },
469 | "got": {
470 | "version": "6.7.1",
471 | "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
472 | "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
473 | "dev": true,
474 | "requires": {
475 | "create-error-class": "^3.0.0",
476 | "duplexer3": "^0.1.4",
477 | "get-stream": "^3.0.0",
478 | "is-redirect": "^1.0.0",
479 | "is-retry-allowed": "^1.0.0",
480 | "is-stream": "^1.0.0",
481 | "lowercase-keys": "^1.0.0",
482 | "safe-buffer": "^5.0.1",
483 | "timed-out": "^4.0.0",
484 | "unzip-response": "^2.0.1",
485 | "url-parse-lax": "^1.0.0"
486 | }
487 | },
488 | "graceful-fs": {
489 | "version": "4.2.3",
490 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.3.tgz",
491 | "integrity": "sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ==",
492 | "dev": true
493 | },
494 | "has-flag": {
495 | "version": "3.0.0",
496 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
497 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
498 | "dev": true
499 | },
500 | "http-errors": {
501 | "version": "1.7.2",
502 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
503 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
504 | "requires": {
505 | "depd": "~1.1.2",
506 | "inherits": "2.0.3",
507 | "setprototypeof": "1.1.1",
508 | "statuses": ">= 1.5.0 < 2",
509 | "toidentifier": "1.0.0"
510 | }
511 | },
512 | "iconv-lite": {
513 | "version": "0.4.24",
514 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
515 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
516 | "requires": {
517 | "safer-buffer": ">= 2.1.2 < 3"
518 | }
519 | },
520 | "ignore-by-default": {
521 | "version": "1.0.1",
522 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
523 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=",
524 | "dev": true
525 | },
526 | "import-lazy": {
527 | "version": "2.1.0",
528 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz",
529 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=",
530 | "dev": true
531 | },
532 | "imurmurhash": {
533 | "version": "0.1.4",
534 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
535 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
536 | "dev": true
537 | },
538 | "inherits": {
539 | "version": "2.0.3",
540 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
541 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
542 | },
543 | "ini": {
544 | "version": "1.3.5",
545 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
546 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==",
547 | "dev": true
548 | },
549 | "ipaddr.js": {
550 | "version": "1.9.0",
551 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
552 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
553 | },
554 | "is-binary-path": {
555 | "version": "2.1.0",
556 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
557 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
558 | "dev": true,
559 | "requires": {
560 | "binary-extensions": "^2.0.0"
561 | }
562 | },
563 | "is-ci": {
564 | "version": "1.2.1",
565 | "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-1.2.1.tgz",
566 | "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==",
567 | "dev": true,
568 | "requires": {
569 | "ci-info": "^1.5.0"
570 | }
571 | },
572 | "is-extglob": {
573 | "version": "2.1.1",
574 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
575 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
576 | "dev": true
577 | },
578 | "is-fullwidth-code-point": {
579 | "version": "2.0.0",
580 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
581 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
582 | "dev": true
583 | },
584 | "is-glob": {
585 | "version": "4.0.1",
586 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
587 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
588 | "dev": true,
589 | "requires": {
590 | "is-extglob": "^2.1.1"
591 | }
592 | },
593 | "is-installed-globally": {
594 | "version": "0.1.0",
595 | "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.1.0.tgz",
596 | "integrity": "sha1-Df2Y9akRFxbdU13aZJL2e/PSWoA=",
597 | "dev": true,
598 | "requires": {
599 | "global-dirs": "^0.1.0",
600 | "is-path-inside": "^1.0.0"
601 | }
602 | },
603 | "is-npm": {
604 | "version": "1.0.0",
605 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz",
606 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=",
607 | "dev": true
608 | },
609 | "is-number": {
610 | "version": "7.0.0",
611 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
612 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
613 | "dev": true
614 | },
615 | "is-obj": {
616 | "version": "1.0.1",
617 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
618 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
619 | "dev": true
620 | },
621 | "is-path-inside": {
622 | "version": "1.0.1",
623 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
624 | "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
625 | "dev": true,
626 | "requires": {
627 | "path-is-inside": "^1.0.1"
628 | }
629 | },
630 | "is-redirect": {
631 | "version": "1.0.0",
632 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz",
633 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=",
634 | "dev": true
635 | },
636 | "is-retry-allowed": {
637 | "version": "1.2.0",
638 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz",
639 | "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==",
640 | "dev": true
641 | },
642 | "is-stream": {
643 | "version": "1.1.0",
644 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
645 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
646 | "dev": true
647 | },
648 | "isarray": {
649 | "version": "1.0.0",
650 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
651 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
652 | },
653 | "isexe": {
654 | "version": "2.0.0",
655 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
656 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
657 | "dev": true
658 | },
659 | "latest-version": {
660 | "version": "3.1.0",
661 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz",
662 | "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=",
663 | "dev": true,
664 | "requires": {
665 | "package-json": "^4.0.0"
666 | }
667 | },
668 | "lowercase-keys": {
669 | "version": "1.0.1",
670 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz",
671 | "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==",
672 | "dev": true
673 | },
674 | "lru-cache": {
675 | "version": "4.1.5",
676 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
677 | "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
678 | "dev": true,
679 | "requires": {
680 | "pseudomap": "^1.0.2",
681 | "yallist": "^2.1.2"
682 | }
683 | },
684 | "make-dir": {
685 | "version": "1.3.0",
686 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz",
687 | "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==",
688 | "dev": true,
689 | "requires": {
690 | "pify": "^3.0.0"
691 | }
692 | },
693 | "media-typer": {
694 | "version": "0.3.0",
695 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
696 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
697 | },
698 | "merge-descriptors": {
699 | "version": "1.0.1",
700 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
701 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
702 | },
703 | "methods": {
704 | "version": "1.1.2",
705 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
706 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
707 | },
708 | "mime": {
709 | "version": "1.6.0",
710 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
711 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
712 | },
713 | "mime-db": {
714 | "version": "1.43.0",
715 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
716 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
717 | },
718 | "mime-types": {
719 | "version": "2.1.26",
720 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
721 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
722 | "requires": {
723 | "mime-db": "1.43.0"
724 | }
725 | },
726 | "minimatch": {
727 | "version": "3.0.4",
728 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
729 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
730 | "dev": true,
731 | "requires": {
732 | "brace-expansion": "^1.1.7"
733 | }
734 | },
735 | "minimist": {
736 | "version": "1.2.0",
737 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
738 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
739 | "dev": true
740 | },
741 | "ms": {
742 | "version": "2.0.0",
743 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
744 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
745 | },
746 | "mysql": {
747 | "version": "2.18.1",
748 | "resolved": "https://registry.npmjs.org/mysql/-/mysql-2.18.1.tgz",
749 | "integrity": "sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==",
750 | "requires": {
751 | "bignumber.js": "9.0.0",
752 | "readable-stream": "2.3.7",
753 | "safe-buffer": "5.1.2",
754 | "sqlstring": "2.3.1"
755 | }
756 | },
757 | "negotiator": {
758 | "version": "0.6.2",
759 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
760 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
761 | },
762 | "nodemon": {
763 | "version": "2.0.2",
764 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.2.tgz",
765 | "integrity": "sha512-GWhYPMfde2+M0FsHnggIHXTqPDHXia32HRhh6H0d75Mt9FKUoCBvumNHr7LdrpPBTKxsWmIEOjoN+P4IU6Hcaw==",
766 | "dev": true,
767 | "requires": {
768 | "chokidar": "^3.2.2",
769 | "debug": "^3.2.6",
770 | "ignore-by-default": "^1.0.1",
771 | "minimatch": "^3.0.4",
772 | "pstree.remy": "^1.1.7",
773 | "semver": "^5.7.1",
774 | "supports-color": "^5.5.0",
775 | "touch": "^3.1.0",
776 | "undefsafe": "^2.0.2",
777 | "update-notifier": "^2.5.0"
778 | },
779 | "dependencies": {
780 | "debug": {
781 | "version": "3.2.6",
782 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
783 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
784 | "dev": true,
785 | "requires": {
786 | "ms": "^2.1.1"
787 | }
788 | },
789 | "ms": {
790 | "version": "2.1.2",
791 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
792 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
793 | "dev": true
794 | }
795 | }
796 | },
797 | "nopt": {
798 | "version": "1.0.10",
799 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
800 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
801 | "dev": true,
802 | "requires": {
803 | "abbrev": "1"
804 | }
805 | },
806 | "normalize-path": {
807 | "version": "3.0.0",
808 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
809 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
810 | "dev": true
811 | },
812 | "npm-run-path": {
813 | "version": "2.0.2",
814 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
815 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
816 | "dev": true,
817 | "requires": {
818 | "path-key": "^2.0.0"
819 | }
820 | },
821 | "object-assign": {
822 | "version": "4.1.1",
823 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
824 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
825 | },
826 | "on-finished": {
827 | "version": "2.3.0",
828 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
829 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
830 | "requires": {
831 | "ee-first": "1.1.1"
832 | }
833 | },
834 | "p-finally": {
835 | "version": "1.0.0",
836 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
837 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
838 | "dev": true
839 | },
840 | "package-json": {
841 | "version": "4.0.1",
842 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
843 | "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=",
844 | "dev": true,
845 | "requires": {
846 | "got": "^6.7.1",
847 | "registry-auth-token": "^3.0.1",
848 | "registry-url": "^3.0.3",
849 | "semver": "^5.1.0"
850 | }
851 | },
852 | "parseurl": {
853 | "version": "1.3.3",
854 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
855 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
856 | },
857 | "path-is-inside": {
858 | "version": "1.0.2",
859 | "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
860 | "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
861 | "dev": true
862 | },
863 | "path-key": {
864 | "version": "2.0.1",
865 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
866 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
867 | "dev": true
868 | },
869 | "path-to-regexp": {
870 | "version": "0.1.7",
871 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
872 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
873 | },
874 | "picomatch": {
875 | "version": "2.2.1",
876 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.1.tgz",
877 | "integrity": "sha512-ISBaA8xQNmwELC7eOjqFKMESB2VIqt4PPDD0nsS95b/9dZXvVKOlz9keMSnoGGKcOHXfTvDD6WMaRoSc9UuhRA==",
878 | "dev": true
879 | },
880 | "pify": {
881 | "version": "3.0.0",
882 | "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
883 | "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
884 | "dev": true
885 | },
886 | "prepend-http": {
887 | "version": "1.0.4",
888 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz",
889 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=",
890 | "dev": true
891 | },
892 | "process-nextick-args": {
893 | "version": "2.0.1",
894 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
895 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
896 | },
897 | "proxy-addr": {
898 | "version": "2.0.5",
899 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
900 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
901 | "requires": {
902 | "forwarded": "~0.1.2",
903 | "ipaddr.js": "1.9.0"
904 | }
905 | },
906 | "pseudomap": {
907 | "version": "1.0.2",
908 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
909 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
910 | "dev": true
911 | },
912 | "pstree.remy": {
913 | "version": "1.1.7",
914 | "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.7.tgz",
915 | "integrity": "sha512-xsMgrUwRpuGskEzBFkH8NmTimbZ5PcPup0LA8JJkHIm2IMUbQcpo3yeLNWVrufEYjh8YwtSVh0xz6UeWc5Oh5A==",
916 | "dev": true
917 | },
918 | "qs": {
919 | "version": "6.7.0",
920 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
921 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
922 | },
923 | "range-parser": {
924 | "version": "1.2.1",
925 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
926 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
927 | },
928 | "raw-body": {
929 | "version": "2.4.0",
930 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
931 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
932 | "requires": {
933 | "bytes": "3.1.0",
934 | "http-errors": "1.7.2",
935 | "iconv-lite": "0.4.24",
936 | "unpipe": "1.0.0"
937 | }
938 | },
939 | "rc": {
940 | "version": "1.2.8",
941 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
942 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
943 | "dev": true,
944 | "requires": {
945 | "deep-extend": "^0.6.0",
946 | "ini": "~1.3.0",
947 | "minimist": "^1.2.0",
948 | "strip-json-comments": "~2.0.1"
949 | }
950 | },
951 | "readable-stream": {
952 | "version": "2.3.7",
953 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
954 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
955 | "requires": {
956 | "core-util-is": "~1.0.0",
957 | "inherits": "~2.0.3",
958 | "isarray": "~1.0.0",
959 | "process-nextick-args": "~2.0.0",
960 | "safe-buffer": "~5.1.1",
961 | "string_decoder": "~1.1.1",
962 | "util-deprecate": "~1.0.1"
963 | }
964 | },
965 | "readdirp": {
966 | "version": "3.3.0",
967 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz",
968 | "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==",
969 | "dev": true,
970 | "requires": {
971 | "picomatch": "^2.0.7"
972 | }
973 | },
974 | "registry-auth-token": {
975 | "version": "3.4.0",
976 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.4.0.tgz",
977 | "integrity": "sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A==",
978 | "dev": true,
979 | "requires": {
980 | "rc": "^1.1.6",
981 | "safe-buffer": "^5.0.1"
982 | }
983 | },
984 | "registry-url": {
985 | "version": "3.1.0",
986 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz",
987 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=",
988 | "dev": true,
989 | "requires": {
990 | "rc": "^1.0.1"
991 | }
992 | },
993 | "safe-buffer": {
994 | "version": "5.1.2",
995 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
996 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
997 | },
998 | "safer-buffer": {
999 | "version": "2.1.2",
1000 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1001 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1002 | },
1003 | "semver": {
1004 | "version": "5.7.1",
1005 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1006 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
1007 | "dev": true
1008 | },
1009 | "semver-diff": {
1010 | "version": "2.1.0",
1011 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz",
1012 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=",
1013 | "dev": true,
1014 | "requires": {
1015 | "semver": "^5.0.3"
1016 | }
1017 | },
1018 | "send": {
1019 | "version": "0.17.1",
1020 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
1021 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
1022 | "requires": {
1023 | "debug": "2.6.9",
1024 | "depd": "~1.1.2",
1025 | "destroy": "~1.0.4",
1026 | "encodeurl": "~1.0.2",
1027 | "escape-html": "~1.0.3",
1028 | "etag": "~1.8.1",
1029 | "fresh": "0.5.2",
1030 | "http-errors": "~1.7.2",
1031 | "mime": "1.6.0",
1032 | "ms": "2.1.1",
1033 | "on-finished": "~2.3.0",
1034 | "range-parser": "~1.2.1",
1035 | "statuses": "~1.5.0"
1036 | },
1037 | "dependencies": {
1038 | "ms": {
1039 | "version": "2.1.1",
1040 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
1041 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
1042 | }
1043 | }
1044 | },
1045 | "serve-static": {
1046 | "version": "1.14.1",
1047 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
1048 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
1049 | "requires": {
1050 | "encodeurl": "~1.0.2",
1051 | "escape-html": "~1.0.3",
1052 | "parseurl": "~1.3.3",
1053 | "send": "0.17.1"
1054 | }
1055 | },
1056 | "setprototypeof": {
1057 | "version": "1.1.1",
1058 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
1059 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
1060 | },
1061 | "shebang-command": {
1062 | "version": "1.2.0",
1063 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
1064 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
1065 | "dev": true,
1066 | "requires": {
1067 | "shebang-regex": "^1.0.0"
1068 | }
1069 | },
1070 | "shebang-regex": {
1071 | "version": "1.0.0",
1072 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
1073 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
1074 | "dev": true
1075 | },
1076 | "signal-exit": {
1077 | "version": "3.0.2",
1078 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1079 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
1080 | "dev": true
1081 | },
1082 | "sqlstring": {
1083 | "version": "2.3.1",
1084 | "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.1.tgz",
1085 | "integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A="
1086 | },
1087 | "statuses": {
1088 | "version": "1.5.0",
1089 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
1090 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
1091 | },
1092 | "string-width": {
1093 | "version": "2.1.1",
1094 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
1095 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
1096 | "dev": true,
1097 | "requires": {
1098 | "is-fullwidth-code-point": "^2.0.0",
1099 | "strip-ansi": "^4.0.0"
1100 | }
1101 | },
1102 | "string_decoder": {
1103 | "version": "1.1.1",
1104 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1105 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1106 | "requires": {
1107 | "safe-buffer": "~5.1.0"
1108 | }
1109 | },
1110 | "strip-ansi": {
1111 | "version": "4.0.0",
1112 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
1113 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
1114 | "dev": true,
1115 | "requires": {
1116 | "ansi-regex": "^3.0.0"
1117 | }
1118 | },
1119 | "strip-eof": {
1120 | "version": "1.0.0",
1121 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
1122 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
1123 | "dev": true
1124 | },
1125 | "strip-json-comments": {
1126 | "version": "2.0.1",
1127 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1128 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
1129 | "dev": true
1130 | },
1131 | "supports-color": {
1132 | "version": "5.5.0",
1133 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
1134 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
1135 | "dev": true,
1136 | "requires": {
1137 | "has-flag": "^3.0.0"
1138 | }
1139 | },
1140 | "term-size": {
1141 | "version": "1.2.0",
1142 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz",
1143 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=",
1144 | "dev": true,
1145 | "requires": {
1146 | "execa": "^0.7.0"
1147 | }
1148 | },
1149 | "timed-out": {
1150 | "version": "4.0.1",
1151 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz",
1152 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=",
1153 | "dev": true
1154 | },
1155 | "to-regex-range": {
1156 | "version": "5.0.1",
1157 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
1158 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
1159 | "dev": true,
1160 | "requires": {
1161 | "is-number": "^7.0.0"
1162 | }
1163 | },
1164 | "toidentifier": {
1165 | "version": "1.0.0",
1166 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
1167 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
1168 | },
1169 | "touch": {
1170 | "version": "3.1.0",
1171 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz",
1172 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==",
1173 | "dev": true,
1174 | "requires": {
1175 | "nopt": "~1.0.10"
1176 | }
1177 | },
1178 | "type-is": {
1179 | "version": "1.6.18",
1180 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1181 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1182 | "requires": {
1183 | "media-typer": "0.3.0",
1184 | "mime-types": "~2.1.24"
1185 | }
1186 | },
1187 | "undefsafe": {
1188 | "version": "2.0.3",
1189 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.3.tgz",
1190 | "integrity": "sha512-nrXZwwXrD/T/JXeygJqdCO6NZZ1L66HrxM/Z7mIq2oPanoN0F1nLx3lwJMu6AwJY69hdixaFQOuoYsMjE5/C2A==",
1191 | "dev": true,
1192 | "requires": {
1193 | "debug": "^2.2.0"
1194 | }
1195 | },
1196 | "unique-string": {
1197 | "version": "1.0.0",
1198 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz",
1199 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=",
1200 | "dev": true,
1201 | "requires": {
1202 | "crypto-random-string": "^1.0.0"
1203 | }
1204 | },
1205 | "unpipe": {
1206 | "version": "1.0.0",
1207 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1208 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1209 | },
1210 | "unzip-response": {
1211 | "version": "2.0.1",
1212 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz",
1213 | "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=",
1214 | "dev": true
1215 | },
1216 | "update-notifier": {
1217 | "version": "2.5.0",
1218 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.5.0.tgz",
1219 | "integrity": "sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw==",
1220 | "dev": true,
1221 | "requires": {
1222 | "boxen": "^1.2.1",
1223 | "chalk": "^2.0.1",
1224 | "configstore": "^3.0.0",
1225 | "import-lazy": "^2.1.0",
1226 | "is-ci": "^1.0.10",
1227 | "is-installed-globally": "^0.1.0",
1228 | "is-npm": "^1.0.0",
1229 | "latest-version": "^3.0.0",
1230 | "semver-diff": "^2.0.0",
1231 | "xdg-basedir": "^3.0.0"
1232 | }
1233 | },
1234 | "url-parse-lax": {
1235 | "version": "1.0.0",
1236 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz",
1237 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=",
1238 | "dev": true,
1239 | "requires": {
1240 | "prepend-http": "^1.0.1"
1241 | }
1242 | },
1243 | "util-deprecate": {
1244 | "version": "1.0.2",
1245 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1246 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1247 | },
1248 | "utils-merge": {
1249 | "version": "1.0.1",
1250 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1251 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1252 | },
1253 | "vary": {
1254 | "version": "1.1.2",
1255 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1256 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1257 | },
1258 | "which": {
1259 | "version": "1.3.1",
1260 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
1261 | "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
1262 | "dev": true,
1263 | "requires": {
1264 | "isexe": "^2.0.0"
1265 | }
1266 | },
1267 | "widest-line": {
1268 | "version": "2.0.1",
1269 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-2.0.1.tgz",
1270 | "integrity": "sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA==",
1271 | "dev": true,
1272 | "requires": {
1273 | "string-width": "^2.1.1"
1274 | }
1275 | },
1276 | "write-file-atomic": {
1277 | "version": "2.4.3",
1278 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
1279 | "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
1280 | "dev": true,
1281 | "requires": {
1282 | "graceful-fs": "^4.1.11",
1283 | "imurmurhash": "^0.1.4",
1284 | "signal-exit": "^3.0.2"
1285 | }
1286 | },
1287 | "xdg-basedir": {
1288 | "version": "3.0.0",
1289 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz",
1290 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=",
1291 | "dev": true
1292 | },
1293 | "yallist": {
1294 | "version": "2.1.2",
1295 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
1296 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
1297 | "dev": true
1298 | }
1299 | }
1300 | }
1301 |
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "app.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "cors": "^2.8.5",
14 | "dotenv": "^8.2.0",
15 | "express": "^4.17.1",
16 | "mysql": "^2.18.1"
17 | },
18 | "devDependencies": {
19 | "nodemon": "^2.0.2"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------