├── .editorconfig ├── .gitignore ├── LICENSE ├── index.js ├── package.json ├── pnpm-lock.yaml ├── public ├── css │ ├── main.css │ ├── main.css.map │ └── main.scss └── img │ └── default.jpg └── views ├── index.hbs └── layouts └── main.hbs /.editorconfig: -------------------------------------------------------------------------------- 1 | # EditorConfig is awesome: https://EditorConfig.org 2 | 3 | # top-most EditorConfig file 4 | root = true 5 | 6 | [*] 7 | indent_style = space 8 | indent_size = 4 9 | end_of_line = crlf 10 | charset = utf-8 11 | trim_trailing_whitespace = false 12 | insert_final_newline = false -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | .env -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Raddy 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 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const express = require("express"); 2 | const dotenv = require("dotenv"); 3 | const cloudinary = require("cloudinary").v2; 4 | const exphbs = require("express-handlebars"); 5 | const fileUpload = require("express-fileupload"); 6 | const mysql = require("mysql"); 7 | 8 | dotenv.config(); 9 | const app = express(); 10 | const port = 5000; 11 | 12 | // default option 13 | app.use(fileUpload({ 14 | useTempFiles : true, 15 | limits : { fileSize : 1024 * 1024 } 16 | })); 17 | 18 | // Static Files 19 | app.use(express.static("public")); 20 | app.use(express.static("upload")); 21 | 22 | // Templating engine 23 | app.engine("hbs", exphbs({ extname: ".hbs" })); 24 | app.set("view engine", "hbs"); 25 | 26 | // Connection Pool 27 | const pool = mysql.createPool({ 28 | connectionLimit: 10, 29 | host: process.env.DB_HOST, 30 | database: process.env.DB_NAME, 31 | user: process.env.DB_USERNAME, 32 | password: process.env.DB_PASSWORD, 33 | }); 34 | 35 | pool.getConnection((err, connection) => { 36 | if (err) throw err; // not connected 37 | console.log("Connected!"); 38 | }); 39 | 40 | app.get("", (req, res) => { 41 | pool.getConnection((err, connection) => { 42 | if (err) throw err; // not connected 43 | console.log("Connected!"); 44 | 45 | connection.query('SELECT * FROM user WHERE id = "1"', (err, rows) => { 46 | // Once done, release connection 47 | connection.release(); 48 | if (!err) { 49 | res.render("index", { rows }); 50 | } 51 | }); 52 | }); 53 | }); 54 | 55 | cloudinary.config({ 56 | cloud_name: "ddwwbifgg", 57 | api_key: "926681871762698", 58 | api_secret: "RP046eeEZoFf7kBH6jk777vsiFw", 59 | }); 60 | 61 | app.post("", async (req, res) => { 62 | // if (!req.files || Object.keys(req.files).length === 0) { 63 | // return res.status(400).send("No files were uploaded."); 64 | // } 65 | // name of the input is sampleFile 66 | let file = req.files.sampleFile; 67 | let fileName = Date.now() + file.name; 68 | const result = await cloudinary.uploader.upload(file.tempFilePath, { 69 | public_id: fileName, 70 | resource_type: "auto", 71 | folder: "PembayaranKuliah/buktipembayaran" 72 | }); 73 | // res.json(result.url); 74 | 75 | // Use mv() to place file on the server 76 | // if (err) return res.status(500).send(err); 77 | 78 | pool.getConnection((err, connection) => { 79 | if (err) throw err; // not connected 80 | console.log("Connected!"); 81 | 82 | connection.query( 83 | 'UPDATE user SET profile_image = ? WHERE id ="1"', 84 | [result.url], 85 | (err, rows) => { 86 | // Once done, release connection 87 | connection.release(); 88 | 89 | if (!err) { 90 | res.redirect("/"); 91 | } else { 92 | console.log(err); 93 | } 94 | } 95 | ); 96 | }); 97 | }); 98 | 99 | app.listen(port, () => console.log(`Listening on http://localhost:${port}`)); 100 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "upload-image", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "cloudinary": "^1.33.0", 13 | "dotenv": "^16.0.3", 14 | "express": "^4.17.1", 15 | "express-fileupload": "^1.2.1", 16 | "express-handlebars": "^5.2.1", 17 | "mysql": "^2.18.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: 5.4 2 | 3 | specifiers: 4 | cloudinary: ^1.33.0 5 | dotenv: ^16.0.3 6 | express: ^4.17.1 7 | express-fileupload: ^1.2.1 8 | express-handlebars: ^5.2.1 9 | mysql: ^2.18.1 10 | 11 | dependencies: 12 | cloudinary: 1.33.0 13 | dotenv: 16.0.3 14 | express: 4.18.2 15 | express-fileupload: 1.4.0 16 | express-handlebars: 5.3.5 17 | mysql: 2.18.1 18 | 19 | packages: 20 | 21 | /@tootallnate/once/1.1.2: 22 | resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} 23 | engines: {node: '>= 6'} 24 | dev: false 25 | optional: true 26 | 27 | /accepts/1.3.8: 28 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 29 | engines: {node: '>= 0.6'} 30 | dependencies: 31 | mime-types: 2.1.35 32 | negotiator: 0.6.3 33 | dev: false 34 | 35 | /acorn-walk/8.2.0: 36 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} 37 | engines: {node: '>=0.4.0'} 38 | dev: false 39 | optional: true 40 | 41 | /acorn/8.8.1: 42 | resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} 43 | engines: {node: '>=0.4.0'} 44 | hasBin: true 45 | dev: false 46 | optional: true 47 | 48 | /agent-base/6.0.2: 49 | resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} 50 | engines: {node: '>= 6.0.0'} 51 | dependencies: 52 | debug: 4.3.4 53 | transitivePeerDependencies: 54 | - supports-color 55 | dev: false 56 | optional: true 57 | 58 | /array-flatten/1.1.1: 59 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} 60 | dev: false 61 | 62 | /ast-types/0.13.4: 63 | resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} 64 | engines: {node: '>=4'} 65 | dependencies: 66 | tslib: 2.4.1 67 | dev: false 68 | optional: true 69 | 70 | /balanced-match/1.0.2: 71 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 72 | dev: false 73 | 74 | /bignumber.js/9.0.0: 75 | resolution: {integrity: sha512-t/OYhhJ2SD+YGBQcjY8GzzDHEk9f3nerxjtfa6tlMXfe7frs/WozhvCNoGvpM0P3bNf3Gq5ZRMlGr5f3r4/N8A==} 76 | dev: false 77 | 78 | /body-parser/1.20.1: 79 | resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} 80 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 81 | dependencies: 82 | bytes: 3.1.2 83 | content-type: 1.0.4 84 | debug: 2.6.9 85 | depd: 2.0.0 86 | destroy: 1.2.0 87 | http-errors: 2.0.0 88 | iconv-lite: 0.4.24 89 | on-finished: 2.4.1 90 | qs: 6.11.0 91 | raw-body: 2.5.1 92 | type-is: 1.6.18 93 | unpipe: 1.0.0 94 | transitivePeerDependencies: 95 | - supports-color 96 | dev: false 97 | 98 | /brace-expansion/1.1.11: 99 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 100 | dependencies: 101 | balanced-match: 1.0.2 102 | concat-map: 0.0.1 103 | dev: false 104 | 105 | /busboy/1.6.0: 106 | resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} 107 | engines: {node: '>=10.16.0'} 108 | dependencies: 109 | streamsearch: 1.1.0 110 | dev: false 111 | 112 | /bytes/3.1.2: 113 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 114 | engines: {node: '>= 0.8'} 115 | dev: false 116 | 117 | /call-bind/1.0.2: 118 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} 119 | dependencies: 120 | function-bind: 1.1.1 121 | get-intrinsic: 1.1.3 122 | dev: false 123 | 124 | /cloudinary-core/2.13.0_lodash@4.17.21: 125 | resolution: {integrity: sha512-Nt0Q5I2FtenmJghtC4YZ3MZZbGg1wLm84SsxcuVwZ83OyJqG9CNIGp86CiI6iDv3QobaqBUpOT7vg+HqY5HxEA==} 126 | peerDependencies: 127 | lodash: '>=4.0' 128 | dependencies: 129 | lodash: 4.17.21 130 | dev: false 131 | 132 | /cloudinary/1.33.0: 133 | resolution: {integrity: sha512-pdqOgd2QAMCFWujdYw1yhZ+lHPTzc6YIfg4WIvbRyoojIbSd/YgnHT8OSnk/OM4Q1WPFD5FM9EEom+4ehG80IA==} 134 | engines: {node: '>=0.6'} 135 | dependencies: 136 | cloudinary-core: 2.13.0_lodash@4.17.21 137 | core-js: 3.27.1 138 | lodash: 4.17.21 139 | q: 1.5.1 140 | optionalDependencies: 141 | proxy-agent: 5.0.0 142 | transitivePeerDependencies: 143 | - supports-color 144 | dev: false 145 | 146 | /concat-map/0.0.1: 147 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 148 | dev: false 149 | 150 | /content-disposition/0.5.4: 151 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 152 | engines: {node: '>= 0.6'} 153 | dependencies: 154 | safe-buffer: 5.2.1 155 | dev: false 156 | 157 | /content-type/1.0.4: 158 | resolution: {integrity: sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==} 159 | engines: {node: '>= 0.6'} 160 | dev: false 161 | 162 | /cookie-signature/1.0.6: 163 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} 164 | dev: false 165 | 166 | /cookie/0.5.0: 167 | resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} 168 | engines: {node: '>= 0.6'} 169 | dev: false 170 | 171 | /core-js/3.27.1: 172 | resolution: {integrity: sha512-GutwJLBChfGCpwwhbYoqfv03LAfmiz7e7D/BNxzeMxwQf10GRSzqiOjx7AmtEk+heiD/JWmBuyBPgFtx0Sg1ww==} 173 | requiresBuild: true 174 | dev: false 175 | 176 | /core-util-is/1.0.3: 177 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 178 | dev: false 179 | 180 | /data-uri-to-buffer/3.0.1: 181 | resolution: {integrity: sha512-WboRycPNsVw3B3TL559F7kuBUM4d8CgMEvk6xEJlOp7OBPjt6G7z8WMWlD2rOFZLk6OYfFIUGsCOWzcQH9K2og==} 182 | engines: {node: '>= 6'} 183 | dev: false 184 | optional: true 185 | 186 | /debug/2.6.9: 187 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 188 | peerDependencies: 189 | supports-color: '*' 190 | peerDependenciesMeta: 191 | supports-color: 192 | optional: true 193 | dependencies: 194 | ms: 2.0.0 195 | dev: false 196 | 197 | /debug/4.3.4: 198 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 199 | engines: {node: '>=6.0'} 200 | peerDependencies: 201 | supports-color: '*' 202 | peerDependenciesMeta: 203 | supports-color: 204 | optional: true 205 | dependencies: 206 | ms: 2.1.2 207 | dev: false 208 | optional: true 209 | 210 | /deep-is/0.1.4: 211 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 212 | dev: false 213 | optional: true 214 | 215 | /degenerator/3.0.2: 216 | resolution: {integrity: sha512-c0mef3SNQo56t6urUU6tdQAs+ThoD0o9B9MJ8HEt7NQcGEILCRFqQb7ZbP9JAv+QF1Ky5plydhMR/IrqWDm+TQ==} 217 | engines: {node: '>= 6'} 218 | dependencies: 219 | ast-types: 0.13.4 220 | escodegen: 1.14.3 221 | esprima: 4.0.1 222 | vm2: 3.9.13 223 | dev: false 224 | optional: true 225 | 226 | /depd/2.0.0: 227 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 228 | engines: {node: '>= 0.8'} 229 | dev: false 230 | 231 | /destroy/1.2.0: 232 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 233 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 234 | dev: false 235 | 236 | /dotenv/16.0.3: 237 | resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} 238 | engines: {node: '>=12'} 239 | dev: false 240 | 241 | /ee-first/1.1.1: 242 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 243 | dev: false 244 | 245 | /encodeurl/1.0.2: 246 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 247 | engines: {node: '>= 0.8'} 248 | dev: false 249 | 250 | /escape-html/1.0.3: 251 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 252 | dev: false 253 | 254 | /escodegen/1.14.3: 255 | resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} 256 | engines: {node: '>=4.0'} 257 | hasBin: true 258 | dependencies: 259 | esprima: 4.0.1 260 | estraverse: 4.3.0 261 | esutils: 2.0.3 262 | optionator: 0.8.3 263 | optionalDependencies: 264 | source-map: 0.6.1 265 | dev: false 266 | optional: true 267 | 268 | /esprima/4.0.1: 269 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 270 | engines: {node: '>=4'} 271 | hasBin: true 272 | dev: false 273 | optional: true 274 | 275 | /estraverse/4.3.0: 276 | resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} 277 | engines: {node: '>=4.0'} 278 | dev: false 279 | optional: true 280 | 281 | /esutils/2.0.3: 282 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 283 | engines: {node: '>=0.10.0'} 284 | dev: false 285 | optional: true 286 | 287 | /etag/1.8.1: 288 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 289 | engines: {node: '>= 0.6'} 290 | dev: false 291 | 292 | /express-fileupload/1.4.0: 293 | resolution: {integrity: sha512-RjzLCHxkv3umDeZKeFeMg8w7qe0V09w3B7oGZprr/oO2H/ISCgNzuqzn7gV3HRWb37GjRk429CCpSLS2KNTqMQ==} 294 | engines: {node: '>=12.0.0'} 295 | dependencies: 296 | busboy: 1.6.0 297 | dev: false 298 | 299 | /express-handlebars/5.3.5: 300 | resolution: {integrity: sha512-r9pzDc94ZNJ7FVvtsxLfPybmN0eFAUnR61oimNPRpD0D7nkLcezrkpZzoXS5TI75wYHRbflPLTU39B62pwB4DA==} 301 | engines: {node: '>=v10.24.1'} 302 | dependencies: 303 | glob: 7.2.3 304 | graceful-fs: 4.2.10 305 | handlebars: 4.7.7 306 | dev: false 307 | 308 | /express/4.18.2: 309 | resolution: {integrity: sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==} 310 | engines: {node: '>= 0.10.0'} 311 | dependencies: 312 | accepts: 1.3.8 313 | array-flatten: 1.1.1 314 | body-parser: 1.20.1 315 | content-disposition: 0.5.4 316 | content-type: 1.0.4 317 | cookie: 0.5.0 318 | cookie-signature: 1.0.6 319 | debug: 2.6.9 320 | depd: 2.0.0 321 | encodeurl: 1.0.2 322 | escape-html: 1.0.3 323 | etag: 1.8.1 324 | finalhandler: 1.2.0 325 | fresh: 0.5.2 326 | http-errors: 2.0.0 327 | merge-descriptors: 1.0.1 328 | methods: 1.1.2 329 | on-finished: 2.4.1 330 | parseurl: 1.3.3 331 | path-to-regexp: 0.1.7 332 | proxy-addr: 2.0.7 333 | qs: 6.11.0 334 | range-parser: 1.2.1 335 | safe-buffer: 5.2.1 336 | send: 0.18.0 337 | serve-static: 1.15.0 338 | setprototypeof: 1.2.0 339 | statuses: 2.0.1 340 | type-is: 1.6.18 341 | utils-merge: 1.0.1 342 | vary: 1.1.2 343 | transitivePeerDependencies: 344 | - supports-color 345 | dev: false 346 | 347 | /fast-levenshtein/2.0.6: 348 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 349 | dev: false 350 | optional: true 351 | 352 | /file-uri-to-path/2.0.0: 353 | resolution: {integrity: sha512-hjPFI8oE/2iQPVe4gbrJ73Pp+Xfub2+WI2LlXDbsaJBwT5wuMh35WNWVYYTpnz895shtwfyutMFLFywpQAFdLg==} 354 | engines: {node: '>= 6'} 355 | dev: false 356 | optional: true 357 | 358 | /finalhandler/1.2.0: 359 | resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} 360 | engines: {node: '>= 0.8'} 361 | dependencies: 362 | debug: 2.6.9 363 | encodeurl: 1.0.2 364 | escape-html: 1.0.3 365 | on-finished: 2.4.1 366 | parseurl: 1.3.3 367 | statuses: 2.0.1 368 | unpipe: 1.0.0 369 | transitivePeerDependencies: 370 | - supports-color 371 | dev: false 372 | 373 | /forwarded/0.2.0: 374 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 375 | engines: {node: '>= 0.6'} 376 | dev: false 377 | 378 | /fresh/0.5.2: 379 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 380 | engines: {node: '>= 0.6'} 381 | dev: false 382 | 383 | /fs-extra/8.1.0: 384 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} 385 | engines: {node: '>=6 <7 || >=8'} 386 | dependencies: 387 | graceful-fs: 4.2.10 388 | jsonfile: 4.0.0 389 | universalify: 0.1.2 390 | dev: false 391 | optional: true 392 | 393 | /fs.realpath/1.0.0: 394 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 395 | dev: false 396 | 397 | /ftp/0.3.10: 398 | resolution: {integrity: sha512-faFVML1aBx2UoDStmLwv2Wptt4vw5x03xxX172nhA5Y5HBshW5JweqQ2W4xL4dezQTG8inJsuYcpPHHU3X5OTQ==} 399 | engines: {node: '>=0.8.0'} 400 | dependencies: 401 | readable-stream: 1.1.14 402 | xregexp: 2.0.0 403 | dev: false 404 | optional: true 405 | 406 | /function-bind/1.1.1: 407 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 408 | dev: false 409 | 410 | /get-intrinsic/1.1.3: 411 | resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} 412 | dependencies: 413 | function-bind: 1.1.1 414 | has: 1.0.3 415 | has-symbols: 1.0.3 416 | dev: false 417 | 418 | /get-uri/3.0.2: 419 | resolution: {integrity: sha512-+5s0SJbGoyiJTZZ2JTpFPLMPSch72KEqGOTvQsBqg0RBWvwhWUSYZFAtz3TPW0GXJuLBJPts1E241iHg+VRfhg==} 420 | engines: {node: '>= 6'} 421 | dependencies: 422 | '@tootallnate/once': 1.1.2 423 | data-uri-to-buffer: 3.0.1 424 | debug: 4.3.4 425 | file-uri-to-path: 2.0.0 426 | fs-extra: 8.1.0 427 | ftp: 0.3.10 428 | transitivePeerDependencies: 429 | - supports-color 430 | dev: false 431 | optional: true 432 | 433 | /glob/7.2.3: 434 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 435 | dependencies: 436 | fs.realpath: 1.0.0 437 | inflight: 1.0.6 438 | inherits: 2.0.4 439 | minimatch: 3.1.2 440 | once: 1.4.0 441 | path-is-absolute: 1.0.1 442 | dev: false 443 | 444 | /graceful-fs/4.2.10: 445 | resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} 446 | dev: false 447 | 448 | /handlebars/4.7.7: 449 | resolution: {integrity: sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==} 450 | engines: {node: '>=0.4.7'} 451 | hasBin: true 452 | dependencies: 453 | minimist: 1.2.7 454 | neo-async: 2.6.2 455 | source-map: 0.6.1 456 | wordwrap: 1.0.0 457 | optionalDependencies: 458 | uglify-js: 3.17.4 459 | dev: false 460 | 461 | /has-symbols/1.0.3: 462 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 463 | engines: {node: '>= 0.4'} 464 | dev: false 465 | 466 | /has/1.0.3: 467 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 468 | engines: {node: '>= 0.4.0'} 469 | dependencies: 470 | function-bind: 1.1.1 471 | dev: false 472 | 473 | /http-errors/2.0.0: 474 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 475 | engines: {node: '>= 0.8'} 476 | dependencies: 477 | depd: 2.0.0 478 | inherits: 2.0.4 479 | setprototypeof: 1.2.0 480 | statuses: 2.0.1 481 | toidentifier: 1.0.1 482 | dev: false 483 | 484 | /http-proxy-agent/4.0.1: 485 | resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} 486 | engines: {node: '>= 6'} 487 | dependencies: 488 | '@tootallnate/once': 1.1.2 489 | agent-base: 6.0.2 490 | debug: 4.3.4 491 | transitivePeerDependencies: 492 | - supports-color 493 | dev: false 494 | optional: true 495 | 496 | /https-proxy-agent/5.0.1: 497 | resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} 498 | engines: {node: '>= 6'} 499 | dependencies: 500 | agent-base: 6.0.2 501 | debug: 4.3.4 502 | transitivePeerDependencies: 503 | - supports-color 504 | dev: false 505 | optional: true 506 | 507 | /iconv-lite/0.4.24: 508 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 509 | engines: {node: '>=0.10.0'} 510 | dependencies: 511 | safer-buffer: 2.1.2 512 | dev: false 513 | 514 | /inflight/1.0.6: 515 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 516 | dependencies: 517 | once: 1.4.0 518 | wrappy: 1.0.2 519 | dev: false 520 | 521 | /inherits/2.0.4: 522 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 523 | dev: false 524 | 525 | /ip/1.1.8: 526 | resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} 527 | dev: false 528 | optional: true 529 | 530 | /ip/2.0.0: 531 | resolution: {integrity: sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==} 532 | dev: false 533 | optional: true 534 | 535 | /ipaddr.js/1.9.1: 536 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 537 | engines: {node: '>= 0.10'} 538 | dev: false 539 | 540 | /isarray/0.0.1: 541 | resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} 542 | dev: false 543 | optional: true 544 | 545 | /isarray/1.0.0: 546 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 547 | dev: false 548 | 549 | /jsonfile/4.0.0: 550 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} 551 | optionalDependencies: 552 | graceful-fs: 4.2.10 553 | dev: false 554 | optional: true 555 | 556 | /levn/0.3.0: 557 | resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} 558 | engines: {node: '>= 0.8.0'} 559 | dependencies: 560 | prelude-ls: 1.1.2 561 | type-check: 0.3.2 562 | dev: false 563 | optional: true 564 | 565 | /lodash/4.17.21: 566 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 567 | dev: false 568 | 569 | /lru-cache/5.1.1: 570 | resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} 571 | dependencies: 572 | yallist: 3.1.1 573 | dev: false 574 | optional: true 575 | 576 | /media-typer/0.3.0: 577 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 578 | engines: {node: '>= 0.6'} 579 | dev: false 580 | 581 | /merge-descriptors/1.0.1: 582 | resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} 583 | dev: false 584 | 585 | /methods/1.1.2: 586 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} 587 | engines: {node: '>= 0.6'} 588 | dev: false 589 | 590 | /mime-db/1.52.0: 591 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 592 | engines: {node: '>= 0.6'} 593 | dev: false 594 | 595 | /mime-types/2.1.35: 596 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 597 | engines: {node: '>= 0.6'} 598 | dependencies: 599 | mime-db: 1.52.0 600 | dev: false 601 | 602 | /mime/1.6.0: 603 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 604 | engines: {node: '>=4'} 605 | hasBin: true 606 | dev: false 607 | 608 | /minimatch/3.1.2: 609 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 610 | dependencies: 611 | brace-expansion: 1.1.11 612 | dev: false 613 | 614 | /minimist/1.2.7: 615 | resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} 616 | dev: false 617 | 618 | /ms/2.0.0: 619 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 620 | dev: false 621 | 622 | /ms/2.1.2: 623 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 624 | dev: false 625 | optional: true 626 | 627 | /ms/2.1.3: 628 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 629 | dev: false 630 | 631 | /mysql/2.18.1: 632 | resolution: {integrity: sha512-Bca+gk2YWmqp2Uf6k5NFEurwY/0td0cpebAucFpY/3jhrwrVGuxU2uQFCHjU19SJfje0yQvi+rVWdq78hR5lig==} 633 | engines: {node: '>= 0.6'} 634 | dependencies: 635 | bignumber.js: 9.0.0 636 | readable-stream: 2.3.7 637 | safe-buffer: 5.1.2 638 | sqlstring: 2.3.1 639 | dev: false 640 | 641 | /negotiator/0.6.3: 642 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 643 | engines: {node: '>= 0.6'} 644 | dev: false 645 | 646 | /neo-async/2.6.2: 647 | resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} 648 | dev: false 649 | 650 | /netmask/2.0.2: 651 | resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} 652 | engines: {node: '>= 0.4.0'} 653 | dev: false 654 | optional: true 655 | 656 | /object-inspect/1.12.2: 657 | resolution: {integrity: sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==} 658 | dev: false 659 | 660 | /on-finished/2.4.1: 661 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 662 | engines: {node: '>= 0.8'} 663 | dependencies: 664 | ee-first: 1.1.1 665 | dev: false 666 | 667 | /once/1.4.0: 668 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 669 | dependencies: 670 | wrappy: 1.0.2 671 | dev: false 672 | 673 | /optionator/0.8.3: 674 | resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} 675 | engines: {node: '>= 0.8.0'} 676 | dependencies: 677 | deep-is: 0.1.4 678 | fast-levenshtein: 2.0.6 679 | levn: 0.3.0 680 | prelude-ls: 1.1.2 681 | type-check: 0.3.2 682 | word-wrap: 1.2.3 683 | dev: false 684 | optional: true 685 | 686 | /pac-proxy-agent/5.0.0: 687 | resolution: {integrity: sha512-CcFG3ZtnxO8McDigozwE3AqAw15zDvGH+OjXO4kzf7IkEKkQ4gxQ+3sdF50WmhQ4P/bVusXcqNE2S3XrNURwzQ==} 688 | engines: {node: '>= 8'} 689 | dependencies: 690 | '@tootallnate/once': 1.1.2 691 | agent-base: 6.0.2 692 | debug: 4.3.4 693 | get-uri: 3.0.2 694 | http-proxy-agent: 4.0.1 695 | https-proxy-agent: 5.0.1 696 | pac-resolver: 5.0.1 697 | raw-body: 2.5.1 698 | socks-proxy-agent: 5.0.1 699 | transitivePeerDependencies: 700 | - supports-color 701 | dev: false 702 | optional: true 703 | 704 | /pac-resolver/5.0.1: 705 | resolution: {integrity: sha512-cy7u00ko2KVgBAjuhevqpPeHIkCIqPe1v24cydhWjmeuzaBfmUWFCZJ1iAh5TuVzVZoUzXIW7K8sMYOZ84uZ9Q==} 706 | engines: {node: '>= 8'} 707 | dependencies: 708 | degenerator: 3.0.2 709 | ip: 1.1.8 710 | netmask: 2.0.2 711 | dev: false 712 | optional: true 713 | 714 | /parseurl/1.3.3: 715 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 716 | engines: {node: '>= 0.8'} 717 | dev: false 718 | 719 | /path-is-absolute/1.0.1: 720 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 721 | engines: {node: '>=0.10.0'} 722 | dev: false 723 | 724 | /path-to-regexp/0.1.7: 725 | resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} 726 | dev: false 727 | 728 | /prelude-ls/1.1.2: 729 | resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} 730 | engines: {node: '>= 0.8.0'} 731 | dev: false 732 | optional: true 733 | 734 | /process-nextick-args/2.0.1: 735 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 736 | dev: false 737 | 738 | /proxy-addr/2.0.7: 739 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 740 | engines: {node: '>= 0.10'} 741 | dependencies: 742 | forwarded: 0.2.0 743 | ipaddr.js: 1.9.1 744 | dev: false 745 | 746 | /proxy-agent/5.0.0: 747 | resolution: {integrity: sha512-gkH7BkvLVkSfX9Dk27W6TyNOWWZWRilRfk1XxGNWOYJ2TuedAv1yFpCaU9QSBmBe716XOTNpYNOzhysyw8xn7g==} 748 | engines: {node: '>= 8'} 749 | requiresBuild: true 750 | dependencies: 751 | agent-base: 6.0.2 752 | debug: 4.3.4 753 | http-proxy-agent: 4.0.1 754 | https-proxy-agent: 5.0.1 755 | lru-cache: 5.1.1 756 | pac-proxy-agent: 5.0.0 757 | proxy-from-env: 1.1.0 758 | socks-proxy-agent: 5.0.1 759 | transitivePeerDependencies: 760 | - supports-color 761 | dev: false 762 | optional: true 763 | 764 | /proxy-from-env/1.1.0: 765 | resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} 766 | dev: false 767 | optional: true 768 | 769 | /q/1.5.1: 770 | resolution: {integrity: sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==} 771 | engines: {node: '>=0.6.0', teleport: '>=0.2.0'} 772 | dev: false 773 | 774 | /qs/6.11.0: 775 | resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} 776 | engines: {node: '>=0.6'} 777 | dependencies: 778 | side-channel: 1.0.4 779 | dev: false 780 | 781 | /range-parser/1.2.1: 782 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 783 | engines: {node: '>= 0.6'} 784 | dev: false 785 | 786 | /raw-body/2.5.1: 787 | resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==} 788 | engines: {node: '>= 0.8'} 789 | dependencies: 790 | bytes: 3.1.2 791 | http-errors: 2.0.0 792 | iconv-lite: 0.4.24 793 | unpipe: 1.0.0 794 | dev: false 795 | 796 | /readable-stream/1.1.14: 797 | resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} 798 | dependencies: 799 | core-util-is: 1.0.3 800 | inherits: 2.0.4 801 | isarray: 0.0.1 802 | string_decoder: 0.10.31 803 | dev: false 804 | optional: true 805 | 806 | /readable-stream/2.3.7: 807 | resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} 808 | dependencies: 809 | core-util-is: 1.0.3 810 | inherits: 2.0.4 811 | isarray: 1.0.0 812 | process-nextick-args: 2.0.1 813 | safe-buffer: 5.1.2 814 | string_decoder: 1.1.1 815 | util-deprecate: 1.0.2 816 | dev: false 817 | 818 | /safe-buffer/5.1.2: 819 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 820 | dev: false 821 | 822 | /safe-buffer/5.2.1: 823 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 824 | dev: false 825 | 826 | /safer-buffer/2.1.2: 827 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 828 | dev: false 829 | 830 | /send/0.18.0: 831 | resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} 832 | engines: {node: '>= 0.8.0'} 833 | dependencies: 834 | debug: 2.6.9 835 | depd: 2.0.0 836 | destroy: 1.2.0 837 | encodeurl: 1.0.2 838 | escape-html: 1.0.3 839 | etag: 1.8.1 840 | fresh: 0.5.2 841 | http-errors: 2.0.0 842 | mime: 1.6.0 843 | ms: 2.1.3 844 | on-finished: 2.4.1 845 | range-parser: 1.2.1 846 | statuses: 2.0.1 847 | transitivePeerDependencies: 848 | - supports-color 849 | dev: false 850 | 851 | /serve-static/1.15.0: 852 | resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} 853 | engines: {node: '>= 0.8.0'} 854 | dependencies: 855 | encodeurl: 1.0.2 856 | escape-html: 1.0.3 857 | parseurl: 1.3.3 858 | send: 0.18.0 859 | transitivePeerDependencies: 860 | - supports-color 861 | dev: false 862 | 863 | /setprototypeof/1.2.0: 864 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 865 | dev: false 866 | 867 | /side-channel/1.0.4: 868 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} 869 | dependencies: 870 | call-bind: 1.0.2 871 | get-intrinsic: 1.1.3 872 | object-inspect: 1.12.2 873 | dev: false 874 | 875 | /smart-buffer/4.2.0: 876 | resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} 877 | engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} 878 | dev: false 879 | optional: true 880 | 881 | /socks-proxy-agent/5.0.1: 882 | resolution: {integrity: sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==} 883 | engines: {node: '>= 6'} 884 | dependencies: 885 | agent-base: 6.0.2 886 | debug: 4.3.4 887 | socks: 2.7.1 888 | transitivePeerDependencies: 889 | - supports-color 890 | dev: false 891 | optional: true 892 | 893 | /socks/2.7.1: 894 | resolution: {integrity: sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==} 895 | engines: {node: '>= 10.13.0', npm: '>= 3.0.0'} 896 | dependencies: 897 | ip: 2.0.0 898 | smart-buffer: 4.2.0 899 | dev: false 900 | optional: true 901 | 902 | /source-map/0.6.1: 903 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 904 | engines: {node: '>=0.10.0'} 905 | dev: false 906 | 907 | /sqlstring/2.3.1: 908 | resolution: {integrity: sha512-ooAzh/7dxIG5+uDik1z/Rd1vli0+38izZhGzSa34FwR7IbelPWCCKSNIl8jlL/F7ERvy8CB2jNeM1E9i9mXMAQ==} 909 | engines: {node: '>= 0.6'} 910 | dev: false 911 | 912 | /statuses/2.0.1: 913 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 914 | engines: {node: '>= 0.8'} 915 | dev: false 916 | 917 | /streamsearch/1.1.0: 918 | resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} 919 | engines: {node: '>=10.0.0'} 920 | dev: false 921 | 922 | /string_decoder/0.10.31: 923 | resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} 924 | dev: false 925 | optional: true 926 | 927 | /string_decoder/1.1.1: 928 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 929 | dependencies: 930 | safe-buffer: 5.1.2 931 | dev: false 932 | 933 | /toidentifier/1.0.1: 934 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 935 | engines: {node: '>=0.6'} 936 | dev: false 937 | 938 | /tslib/2.4.1: 939 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} 940 | dev: false 941 | optional: true 942 | 943 | /type-check/0.3.2: 944 | resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} 945 | engines: {node: '>= 0.8.0'} 946 | dependencies: 947 | prelude-ls: 1.1.2 948 | dev: false 949 | optional: true 950 | 951 | /type-is/1.6.18: 952 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 953 | engines: {node: '>= 0.6'} 954 | dependencies: 955 | media-typer: 0.3.0 956 | mime-types: 2.1.35 957 | dev: false 958 | 959 | /uglify-js/3.17.4: 960 | resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} 961 | engines: {node: '>=0.8.0'} 962 | hasBin: true 963 | requiresBuild: true 964 | dev: false 965 | optional: true 966 | 967 | /universalify/0.1.2: 968 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==} 969 | engines: {node: '>= 4.0.0'} 970 | dev: false 971 | optional: true 972 | 973 | /unpipe/1.0.0: 974 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 975 | engines: {node: '>= 0.8'} 976 | dev: false 977 | 978 | /util-deprecate/1.0.2: 979 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 980 | dev: false 981 | 982 | /utils-merge/1.0.1: 983 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 984 | engines: {node: '>= 0.4.0'} 985 | dev: false 986 | 987 | /vary/1.1.2: 988 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 989 | engines: {node: '>= 0.8'} 990 | dev: false 991 | 992 | /vm2/3.9.13: 993 | resolution: {integrity: sha512-0rvxpB8P8Shm4wX2EKOiMp7H2zq+HUE/UwodY0pCZXs9IffIKZq6vUti5OgkVCTakKo9e/fgO4X1fkwfjWxE3Q==} 994 | engines: {node: '>=6.0'} 995 | hasBin: true 996 | dependencies: 997 | acorn: 8.8.1 998 | acorn-walk: 8.2.0 999 | dev: false 1000 | optional: true 1001 | 1002 | /word-wrap/1.2.3: 1003 | resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} 1004 | engines: {node: '>=0.10.0'} 1005 | dev: false 1006 | optional: true 1007 | 1008 | /wordwrap/1.0.0: 1009 | resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} 1010 | dev: false 1011 | 1012 | /wrappy/1.0.2: 1013 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1014 | dev: false 1015 | 1016 | /xregexp/2.0.0: 1017 | resolution: {integrity: sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==} 1018 | dev: false 1019 | optional: true 1020 | 1021 | /yallist/3.1.1: 1022 | resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} 1023 | dev: false 1024 | optional: true 1025 | -------------------------------------------------------------------------------- /public/css/main.css: -------------------------------------------------------------------------------- 1 | @import url("https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap"); 2 | body { 3 | margin: 0; 4 | font-family: 'Poppins', sans-serif; 5 | background-color: #F4F6F8; 6 | } 7 | 8 | img { 9 | width: 100%; 10 | } 11 | 12 | .wrapper { 13 | display: -ms-grid; 14 | display: grid; 15 | place-items: center; 16 | height: 100vh; 17 | } 18 | 19 | .btn { 20 | border: none; 21 | color: #fff; 22 | padding: 15px 32px; 23 | text-align: center; 24 | text-decoration: none; 25 | display: inline-block; 26 | font-style: 16px; 27 | margin: 4px 2px; 28 | cursor: pointer; 29 | width: 100%; 30 | border-radius: 3px; 31 | } 32 | 33 | .btn-primary { 34 | background-color: #008CBA; 35 | } 36 | 37 | .card { 38 | text-align: center; 39 | width: 360px; 40 | padding: 20px; 41 | border-radius: 5px; 42 | -webkit-box-shadow: 0 10px 20px rgba(0, 0, 0, 0), 0 6px 36px rgba(0, 0, 0, 0.13); 43 | box-shadow: 0 10px 20px rgba(0, 0, 0, 0), 0 6px 36px rgba(0, 0, 0, 0.13); 44 | background-color: #fff; 45 | } 46 | 47 | .card__image { 48 | display: block; 49 | margin: 0 auto; 50 | width: 100px; 51 | height: 100px; 52 | border-radius: 50%; 53 | overflow: hidden; 54 | -o-object-fit: cover; 55 | object-fit: cover; 56 | -webkit-box-shadow: 0 10px 20px rgba(0, 0, 0, 0), 0 6px 36px rgba(0, 0, 0, 0.13); 57 | box-shadow: 0 10px 20px rgba(0, 0, 0, 0), 0 6px 36px rgba(0, 0, 0, 0.13); 58 | border: 3px solid #fff; 59 | } 60 | 61 | .card__title { 62 | margin: 0; 63 | } 64 | 65 | .card__job { 66 | color: #6E8192; 67 | } 68 | /*# sourceMappingURL=main.css.map */ -------------------------------------------------------------------------------- /public/css/main.css.map: -------------------------------------------------------------------------------- 1 | { 2 | "version": 3, 3 | "mappings": "AAAA,OAAO,CAAC,6EAAI;AAEZ,AAAA,IAAI,CAAC;EACH,MAAM,EAAE,CAAC;EACT,WAAW,EAAE,qBAAqB;EAClC,gBAAgB,EAAE,OAAO;CAC1B;;AAED,AAAA,GAAG,CAAC;EAAE,KAAK,EAAE,IAAI;CAAI;;AAErB,AAAA,QAAQ,CAAC;EACP,OAAO,EAAE,IAAI;EACb,WAAW,EAAE,MAAM;EACnB,MAAM,EAAE,KAAK;CACd;;AAED,AAAA,IAAI,CAAC;EACH,MAAM,EAAE,IAAI;EACZ,KAAK,EAAC,IAAI;EACV,OAAO,EAAE,SAAS;EAClB,UAAU,EAAE,MAAM;EAClB,eAAe,EAAE,IAAI;EACrB,OAAO,EAAE,YAAY;EACrB,UAAU,EAAE,IAAI;EAChB,MAAM,EAAE,OAAO;EACf,MAAM,EAAE,OAAO;EACf,KAAK,EAAE,IAAI;EACX,aAAa,EAAE,GAAG;CACnB;;AAED,AAAA,YAAY,CAAC;EAAE,gBAAgB,EAAE,OAAO;CAAI;;AAE5C,AAAA,KAAK,CAAC;EACJ,UAAU,EAAE,MAAM;EAClB,KAAK,EAAE,KAAK;EACZ,OAAO,EAAE,IAAI;EACb,aAAa,EAAE,GAAG;EAClB,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB;EACxE,gBAAgB,EAAE,IAAI;CAiBvB;;AAfE,AAAD,YAAQ,CAAC;EACP,OAAO,EAAE,KAAK;EACd,MAAM,EAAE,MAAM;EACd,KAAK,EAAE,KAAK;EACZ,MAAM,EAAE,KAAK;EACb,aAAa,EAAE,GAAG;EAClB,QAAQ,EAAE,MAAM;EAChB,UAAU,EAAE,KAAK;EACjB,UAAU,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB;EACxE,MAAM,EAAE,cAAc;CACvB;;AAEA,AAAD,YAAQ,CAAC;EAAE,MAAM,EAAE,CAAC;CAAI;;AACvB,AAAD,UAAM,CAAC;EAAE,KAAK,EAAE,OAAO;CAAG", 4 | "sources": [ 5 | "main.scss" 6 | ], 7 | "names": [], 8 | "file": "main.css" 9 | } -------------------------------------------------------------------------------- /public/css/main.scss: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css2?family=Poppins:wght@300&display=swap'); 2 | 3 | body { 4 | margin: 0; 5 | font-family: 'Poppins', sans-serif; 6 | background-color: #F4F6F8; 7 | } 8 | 9 | img { width: 100%; } 10 | 11 | .wrapper { 12 | display: grid; 13 | place-items: center; 14 | height: 100vh; 15 | } 16 | 17 | .btn { 18 | border: none; 19 | color:#fff; 20 | padding: 15px 32px; 21 | text-align: center; 22 | text-decoration: none; 23 | display: inline-block; 24 | font-style: 16px; 25 | margin: 4px 2px; 26 | cursor: pointer; 27 | width: 100%; 28 | border-radius: 3px; 29 | } 30 | 31 | .btn-primary { background-color: #008CBA; } 32 | 33 | .card { 34 | text-align: center; 35 | width: 360px; 36 | padding: 20px; 37 | border-radius: 5px; 38 | box-shadow: 0 10px 20px rgba(0, 0, 0, 0), 0 6px 36px rgba(0, 0 ,0, 0.13); 39 | background-color: #fff; 40 | 41 | &__image { 42 | display: block; 43 | margin: 0 auto; 44 | width: 100px; 45 | height: 100px; 46 | border-radius: 50%; 47 | overflow: hidden; 48 | object-fit: cover; 49 | box-shadow: 0 10px 20px rgba(0, 0, 0, 0), 0 6px 36px rgba(0, 0 ,0, 0.13); 50 | border: 3px solid #fff; 51 | } 52 | 53 | &__title { margin: 0; } 54 | &__job { color: #6E8192;} 55 | 56 | } -------------------------------------------------------------------------------- /public/img/default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/adamhmid/upload-image/a4c469884023700c93c99272e29eb4ec0c42120d/public/img/default.jpg -------------------------------------------------------------------------------- /views/index.hbs: -------------------------------------------------------------------------------- 1 |
2 |

Upload Profile Photo

3 | 4 | 5 |
6 | 7 |
8 | {{#each rows}} 9 | 10 | {{#if this.profile_image}} 11 | User Profile 12 | {{else}} 13 | User Profile 14 | {{/if}} 15 | 16 |

{{this.name}}

17 |
{{this.job_title}}
18 |

19 | {{this.description}} 20 |

21 | 22 | {{/each}} 23 | 24 |
-------------------------------------------------------------------------------- /views/layouts/main.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Document 8 | 9 | 10 | 11 |
12 | {{{body}}} 13 |
14 | 15 | --------------------------------------------------------------------------------