├── .gitignore ├── app.js ├── controllers └── index.js ├── package-lock.json ├── package.json ├── public └── css │ └── main.css ├── readme.md ├── routes └── index.js └── views ├── index.ejs ├── partials ├── foot.ejs └── head.ejs └── products.ejs /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | -------------------------------------------------------------------------------- /app.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const express = require('express'); 3 | const bodyParser = require('body-parser'); 4 | 5 | const app = express(); 6 | const routes = require('./routes/index.js'); 7 | 8 | // db settings 9 | 10 | // settings 11 | app.set('view engine', 'ejs'); 12 | app.set('views', path.join(__dirname, 'views')); 13 | app.set('port', process.env.PORT || 3000); 14 | 15 | // middlewares 16 | app.use((req, res, next) => { 17 | console.log(`${req.url} - ${req.method}`); 18 | next(); 19 | }); 20 | app.use(bodyParser.json()); 21 | app.use(bodyParser.urlencoded({extended: false})); 22 | 23 | // routes 24 | app.use(routes); 25 | 26 | // satic files 27 | app.use(express.static(path.join(__dirname, 'public'))); 28 | 29 | // bootstraping the app 30 | app.listen(3000, () => console.log('server on port 3000')); 31 | -------------------------------------------------------------------------------- /controllers/index.js: -------------------------------------------------------------------------------- 1 | var items = [ 2 | {id: 1, name: 'product1'}, 3 | {id: 2, name: 'product2'}, 4 | {id: 3, name: 'product3'} 5 | ]; 6 | 7 | const index = (req, res, next) => { 8 | res.render('index', { 9 | title: 'MyWebStore' 10 | }); 11 | }; 12 | 13 | const getProducts = (req, res, next) => { 14 | res.render('products', { 15 | title: 'List of Products', 16 | items 17 | }); 18 | }; 19 | 20 | const addProduct = (req, res) => { 21 | 22 | var newItem = req.body.newItem; 23 | console.log(newItem); 24 | 25 | items.push({ 26 | id: items.length + 1, 27 | name: newItem 28 | }); 29 | 30 | res.redirect('/products'); 31 | }; 32 | 33 | module.exports = { 34 | index, 35 | getProducts, 36 | addProduct 37 | }; 38 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simple-server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "abbrev": { 8 | "version": "1.1.0", 9 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", 10 | "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", 11 | "dev": true 12 | }, 13 | "accepts": { 14 | "version": "1.3.3", 15 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.3.tgz", 16 | "integrity": "sha1-w8p0NJOGSMPg2cHjKN1otiLChMo=", 17 | "requires": { 18 | "mime-types": "2.1.16", 19 | "negotiator": "0.6.1" 20 | } 21 | }, 22 | "ansi-regex": { 23 | "version": "2.1.1", 24 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 25 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 26 | "dev": true 27 | }, 28 | "ansi-styles": { 29 | "version": "2.2.1", 30 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 31 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 32 | "dev": true 33 | }, 34 | "anymatch": { 35 | "version": "1.3.2", 36 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", 37 | "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", 38 | "dev": true, 39 | "requires": { 40 | "micromatch": "2.3.11", 41 | "normalize-path": "2.1.1" 42 | } 43 | }, 44 | "arr-diff": { 45 | "version": "2.0.0", 46 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", 47 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", 48 | "dev": true, 49 | "requires": { 50 | "arr-flatten": "1.1.0" 51 | } 52 | }, 53 | "arr-flatten": { 54 | "version": "1.1.0", 55 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 56 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 57 | "dev": true 58 | }, 59 | "array-flatten": { 60 | "version": "1.1.1", 61 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 62 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 63 | }, 64 | "array-unique": { 65 | "version": "0.2.1", 66 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", 67 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", 68 | "dev": true 69 | }, 70 | "async-each": { 71 | "version": "1.0.1", 72 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", 73 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", 74 | "dev": true 75 | }, 76 | "balanced-match": { 77 | "version": "1.0.0", 78 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 79 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 80 | "dev": true 81 | }, 82 | "binary-extensions": { 83 | "version": "1.9.0", 84 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.9.0.tgz", 85 | "integrity": "sha1-ZlBsFs5vTWkopbPNajPKQelB43s=", 86 | "dev": true 87 | }, 88 | "body-parser": { 89 | "version": "1.17.2", 90 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.17.2.tgz", 91 | "integrity": "sha1-+IkqvI+eYn1Crtr7yma/WrmRBO4=", 92 | "requires": { 93 | "bytes": "2.4.0", 94 | "content-type": "1.0.2", 95 | "debug": "2.6.7", 96 | "depd": "1.1.1", 97 | "http-errors": "1.6.1", 98 | "iconv-lite": "0.4.15", 99 | "on-finished": "2.3.0", 100 | "qs": "6.4.0", 101 | "raw-body": "2.2.0", 102 | "type-is": "1.6.15" 103 | } 104 | }, 105 | "brace-expansion": { 106 | "version": "1.1.8", 107 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 108 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 109 | "dev": true, 110 | "requires": { 111 | "balanced-match": "1.0.0", 112 | "concat-map": "0.0.1" 113 | } 114 | }, 115 | "braces": { 116 | "version": "1.8.5", 117 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", 118 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", 119 | "dev": true, 120 | "requires": { 121 | "expand-range": "1.8.2", 122 | "preserve": "0.2.0", 123 | "repeat-element": "1.1.2" 124 | } 125 | }, 126 | "bytes": { 127 | "version": "2.4.0", 128 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", 129 | "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" 130 | }, 131 | "chalk": { 132 | "version": "1.1.3", 133 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 134 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 135 | "dev": true, 136 | "requires": { 137 | "ansi-styles": "2.2.1", 138 | "escape-string-regexp": "1.0.5", 139 | "has-ansi": "2.0.0", 140 | "strip-ansi": "3.0.1", 141 | "supports-color": "2.0.0" 142 | } 143 | }, 144 | "chokidar": { 145 | "version": "1.7.0", 146 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", 147 | "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", 148 | "dev": true, 149 | "requires": { 150 | "anymatch": "1.3.2", 151 | "async-each": "1.0.1", 152 | "glob-parent": "2.0.0", 153 | "inherits": "2.0.3", 154 | "is-binary-path": "1.0.1", 155 | "is-glob": "2.0.1", 156 | "path-is-absolute": "1.0.1", 157 | "readdirp": "2.1.0" 158 | } 159 | }, 160 | "concat-map": { 161 | "version": "0.0.1", 162 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 163 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 164 | "dev": true 165 | }, 166 | "configstore": { 167 | "version": "1.4.0", 168 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-1.4.0.tgz", 169 | "integrity": "sha1-w1eB0FAdJowlxUuLF/YkDopPsCE=", 170 | "dev": true, 171 | "requires": { 172 | "graceful-fs": "4.1.11", 173 | "mkdirp": "0.5.1", 174 | "object-assign": "4.1.1", 175 | "os-tmpdir": "1.0.2", 176 | "osenv": "0.1.4", 177 | "uuid": "2.0.3", 178 | "write-file-atomic": "1.3.4", 179 | "xdg-basedir": "2.0.0" 180 | } 181 | }, 182 | "content-disposition": { 183 | "version": "0.5.2", 184 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 185 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 186 | }, 187 | "content-type": { 188 | "version": "1.0.2", 189 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.2.tgz", 190 | "integrity": "sha1-t9ETrueo3Se9IRM8TcJSnfFyHu0=" 191 | }, 192 | "cookie": { 193 | "version": "0.3.1", 194 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 195 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 196 | }, 197 | "cookie-signature": { 198 | "version": "1.0.6", 199 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 200 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 201 | }, 202 | "core-util-is": { 203 | "version": "1.0.2", 204 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 205 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 206 | "dev": true 207 | }, 208 | "debug": { 209 | "version": "2.6.7", 210 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.7.tgz", 211 | "integrity": "sha1-krrR9tBbu2u6Isyoi80OyJTChh4=", 212 | "requires": { 213 | "ms": "2.0.0" 214 | } 215 | }, 216 | "deep-extend": { 217 | "version": "0.4.2", 218 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", 219 | "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", 220 | "dev": true 221 | }, 222 | "depd": { 223 | "version": "1.1.1", 224 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 225 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 226 | }, 227 | "destroy": { 228 | "version": "1.0.4", 229 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 230 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 231 | }, 232 | "duplexer": { 233 | "version": "0.1.1", 234 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 235 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 236 | "dev": true 237 | }, 238 | "duplexify": { 239 | "version": "3.5.1", 240 | "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz", 241 | "integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==", 242 | "dev": true, 243 | "requires": { 244 | "end-of-stream": "1.4.0", 245 | "inherits": "2.0.3", 246 | "readable-stream": "2.3.3", 247 | "stream-shift": "1.0.0" 248 | } 249 | }, 250 | "ee-first": { 251 | "version": "1.1.1", 252 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 253 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 254 | }, 255 | "ejs": { 256 | "version": "2.5.7", 257 | "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.5.7.tgz", 258 | "integrity": "sha1-zIcsFoiArjxxiXYv1f/ACJbJUYo=" 259 | }, 260 | "encodeurl": { 261 | "version": "1.0.1", 262 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", 263 | "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" 264 | }, 265 | "end-of-stream": { 266 | "version": "1.4.0", 267 | "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz", 268 | "integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=", 269 | "dev": true, 270 | "requires": { 271 | "once": "1.4.0" 272 | } 273 | }, 274 | "es6-promise": { 275 | "version": "3.3.1", 276 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", 277 | "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", 278 | "dev": true 279 | }, 280 | "escape-html": { 281 | "version": "1.0.3", 282 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 283 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 284 | }, 285 | "escape-string-regexp": { 286 | "version": "1.0.5", 287 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 288 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 289 | "dev": true 290 | }, 291 | "etag": { 292 | "version": "1.8.0", 293 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.0.tgz", 294 | "integrity": "sha1-b2Ma7zNtbEY2K1F2QETOIWvjwFE=" 295 | }, 296 | "event-stream": { 297 | "version": "3.3.4", 298 | "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 299 | "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", 300 | "dev": true, 301 | "requires": { 302 | "duplexer": "0.1.1", 303 | "from": "0.1.7", 304 | "map-stream": "0.1.0", 305 | "pause-stream": "0.0.11", 306 | "split": "0.3.3", 307 | "stream-combiner": "0.0.4", 308 | "through": "2.3.8" 309 | } 310 | }, 311 | "expand-brackets": { 312 | "version": "0.1.5", 313 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", 314 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", 315 | "dev": true, 316 | "requires": { 317 | "is-posix-bracket": "0.1.1" 318 | } 319 | }, 320 | "expand-range": { 321 | "version": "1.8.2", 322 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", 323 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", 324 | "dev": true, 325 | "requires": { 326 | "fill-range": "2.2.3" 327 | } 328 | }, 329 | "express": { 330 | "version": "4.15.3", 331 | "resolved": "https://registry.npmjs.org/express/-/express-4.15.3.tgz", 332 | "integrity": "sha1-urZdDwOqgMNYQIly/HAPkWlEtmI=", 333 | "requires": { 334 | "accepts": "1.3.3", 335 | "array-flatten": "1.1.1", 336 | "content-disposition": "0.5.2", 337 | "content-type": "1.0.2", 338 | "cookie": "0.3.1", 339 | "cookie-signature": "1.0.6", 340 | "debug": "2.6.7", 341 | "depd": "1.1.1", 342 | "encodeurl": "1.0.1", 343 | "escape-html": "1.0.3", 344 | "etag": "1.8.0", 345 | "finalhandler": "1.0.3", 346 | "fresh": "0.5.0", 347 | "merge-descriptors": "1.0.1", 348 | "methods": "1.1.2", 349 | "on-finished": "2.3.0", 350 | "parseurl": "1.3.1", 351 | "path-to-regexp": "0.1.7", 352 | "proxy-addr": "1.1.5", 353 | "qs": "6.4.0", 354 | "range-parser": "1.2.0", 355 | "send": "0.15.3", 356 | "serve-static": "1.12.3", 357 | "setprototypeof": "1.0.3", 358 | "statuses": "1.3.1", 359 | "type-is": "1.6.15", 360 | "utils-merge": "1.0.0", 361 | "vary": "1.1.1" 362 | } 363 | }, 364 | "extglob": { 365 | "version": "0.3.2", 366 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", 367 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", 368 | "dev": true, 369 | "requires": { 370 | "is-extglob": "1.0.0" 371 | } 372 | }, 373 | "filename-regex": { 374 | "version": "2.0.1", 375 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", 376 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", 377 | "dev": true 378 | }, 379 | "fill-range": { 380 | "version": "2.2.3", 381 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", 382 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", 383 | "dev": true, 384 | "requires": { 385 | "is-number": "2.1.0", 386 | "isobject": "2.1.0", 387 | "randomatic": "1.1.7", 388 | "repeat-element": "1.1.2", 389 | "repeat-string": "1.6.1" 390 | } 391 | }, 392 | "finalhandler": { 393 | "version": "1.0.3", 394 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.0.3.tgz", 395 | "integrity": "sha1-70fneVDpmXgOhgIqVg4yF+DQzIk=", 396 | "requires": { 397 | "debug": "2.6.7", 398 | "encodeurl": "1.0.1", 399 | "escape-html": "1.0.3", 400 | "on-finished": "2.3.0", 401 | "parseurl": "1.3.1", 402 | "statuses": "1.3.1", 403 | "unpipe": "1.0.0" 404 | } 405 | }, 406 | "for-in": { 407 | "version": "1.0.2", 408 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 409 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 410 | "dev": true 411 | }, 412 | "for-own": { 413 | "version": "0.1.5", 414 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", 415 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", 416 | "dev": true, 417 | "requires": { 418 | "for-in": "1.0.2" 419 | } 420 | }, 421 | "forwarded": { 422 | "version": "0.1.0", 423 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.0.tgz", 424 | "integrity": "sha1-Ge+YdMSuHCl7zweP3mOgm2aoQ2M=" 425 | }, 426 | "fresh": { 427 | "version": "0.5.0", 428 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.0.tgz", 429 | "integrity": "sha1-9HTKXmqSRtb9jglTz6m5yAWvp44=" 430 | }, 431 | "from": { 432 | "version": "0.1.7", 433 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 434 | "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", 435 | "dev": true 436 | }, 437 | "glob-base": { 438 | "version": "0.3.0", 439 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", 440 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", 441 | "dev": true, 442 | "requires": { 443 | "glob-parent": "2.0.0", 444 | "is-glob": "2.0.1" 445 | } 446 | }, 447 | "glob-parent": { 448 | "version": "2.0.0", 449 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", 450 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", 451 | "dev": true, 452 | "requires": { 453 | "is-glob": "2.0.1" 454 | } 455 | }, 456 | "got": { 457 | "version": "3.3.1", 458 | "resolved": "https://registry.npmjs.org/got/-/got-3.3.1.tgz", 459 | "integrity": "sha1-5dDtSvVfw+701WAHdp2YGSvLLso=", 460 | "dev": true, 461 | "requires": { 462 | "duplexify": "3.5.1", 463 | "infinity-agent": "2.0.3", 464 | "is-redirect": "1.0.0", 465 | "is-stream": "1.1.0", 466 | "lowercase-keys": "1.0.0", 467 | "nested-error-stacks": "1.0.2", 468 | "object-assign": "3.0.0", 469 | "prepend-http": "1.0.4", 470 | "read-all-stream": "3.1.0", 471 | "timed-out": "2.0.0" 472 | }, 473 | "dependencies": { 474 | "object-assign": { 475 | "version": "3.0.0", 476 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz", 477 | "integrity": "sha1-m+3VygiXlJvKR+f/QIBi1Un1h/I=", 478 | "dev": true 479 | } 480 | } 481 | }, 482 | "graceful-fs": { 483 | "version": "4.1.11", 484 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 485 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 486 | "dev": true 487 | }, 488 | "has-ansi": { 489 | "version": "2.0.0", 490 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 491 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 492 | "dev": true, 493 | "requires": { 494 | "ansi-regex": "2.1.1" 495 | } 496 | }, 497 | "http-errors": { 498 | "version": "1.6.1", 499 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.1.tgz", 500 | "integrity": "sha1-X4uO2YrKVFZWv1cplzh/kEpyIlc=", 501 | "requires": { 502 | "depd": "1.1.0", 503 | "inherits": "2.0.3", 504 | "setprototypeof": "1.0.3", 505 | "statuses": "1.3.1" 506 | }, 507 | "dependencies": { 508 | "depd": { 509 | "version": "1.1.0", 510 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz", 511 | "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM=" 512 | } 513 | } 514 | }, 515 | "iconv-lite": { 516 | "version": "0.4.15", 517 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", 518 | "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" 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 | "imurmurhash": { 527 | "version": "0.1.4", 528 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 529 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 530 | "dev": true 531 | }, 532 | "infinity-agent": { 533 | "version": "2.0.3", 534 | "resolved": "https://registry.npmjs.org/infinity-agent/-/infinity-agent-2.0.3.tgz", 535 | "integrity": "sha1-ReDi/3qesDCyfWK3SzdEt6esQhY=", 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.4", 545 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", 546 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", 547 | "dev": true 548 | }, 549 | "ipaddr.js": { 550 | "version": "1.4.0", 551 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", 552 | "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" 553 | }, 554 | "is-binary-path": { 555 | "version": "1.0.1", 556 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 557 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 558 | "dev": true, 559 | "requires": { 560 | "binary-extensions": "1.9.0" 561 | } 562 | }, 563 | "is-buffer": { 564 | "version": "1.1.5", 565 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", 566 | "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=", 567 | "dev": true 568 | }, 569 | "is-dotfile": { 570 | "version": "1.0.3", 571 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", 572 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", 573 | "dev": true 574 | }, 575 | "is-equal-shallow": { 576 | "version": "0.1.3", 577 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", 578 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", 579 | "dev": true, 580 | "requires": { 581 | "is-primitive": "2.0.0" 582 | } 583 | }, 584 | "is-extendable": { 585 | "version": "0.1.1", 586 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 587 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 588 | "dev": true 589 | }, 590 | "is-extglob": { 591 | "version": "1.0.0", 592 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 593 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", 594 | "dev": true 595 | }, 596 | "is-finite": { 597 | "version": "1.0.2", 598 | "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", 599 | "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", 600 | "dev": true, 601 | "requires": { 602 | "number-is-nan": "1.0.1" 603 | } 604 | }, 605 | "is-glob": { 606 | "version": "2.0.1", 607 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 608 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 609 | "dev": true, 610 | "requires": { 611 | "is-extglob": "1.0.0" 612 | } 613 | }, 614 | "is-npm": { 615 | "version": "1.0.0", 616 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", 617 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", 618 | "dev": true 619 | }, 620 | "is-number": { 621 | "version": "2.1.0", 622 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", 623 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", 624 | "dev": true, 625 | "requires": { 626 | "kind-of": "3.2.2" 627 | } 628 | }, 629 | "is-posix-bracket": { 630 | "version": "0.1.1", 631 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", 632 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", 633 | "dev": true 634 | }, 635 | "is-primitive": { 636 | "version": "2.0.0", 637 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", 638 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", 639 | "dev": true 640 | }, 641 | "is-redirect": { 642 | "version": "1.0.0", 643 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", 644 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", 645 | "dev": true 646 | }, 647 | "is-stream": { 648 | "version": "1.1.0", 649 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 650 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 651 | "dev": true 652 | }, 653 | "isarray": { 654 | "version": "1.0.0", 655 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 656 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 657 | "dev": true 658 | }, 659 | "isobject": { 660 | "version": "2.1.0", 661 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 662 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 663 | "dev": true, 664 | "requires": { 665 | "isarray": "1.0.0" 666 | } 667 | }, 668 | "kind-of": { 669 | "version": "3.2.2", 670 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 671 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 672 | "dev": true, 673 | "requires": { 674 | "is-buffer": "1.1.5" 675 | } 676 | }, 677 | "latest-version": { 678 | "version": "1.0.1", 679 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-1.0.1.tgz", 680 | "integrity": "sha1-cs/Ebj6NG+ZR4eu1Tqn26pbzdLs=", 681 | "dev": true, 682 | "requires": { 683 | "package-json": "1.2.0" 684 | } 685 | }, 686 | "lodash._baseassign": { 687 | "version": "3.2.0", 688 | "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", 689 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", 690 | "dev": true, 691 | "requires": { 692 | "lodash._basecopy": "3.0.1", 693 | "lodash.keys": "3.1.2" 694 | } 695 | }, 696 | "lodash._basecopy": { 697 | "version": "3.0.1", 698 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", 699 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", 700 | "dev": true 701 | }, 702 | "lodash._bindcallback": { 703 | "version": "3.0.1", 704 | "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", 705 | "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", 706 | "dev": true 707 | }, 708 | "lodash._createassigner": { 709 | "version": "3.1.1", 710 | "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", 711 | "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", 712 | "dev": true, 713 | "requires": { 714 | "lodash._bindcallback": "3.0.1", 715 | "lodash._isiterateecall": "3.0.9", 716 | "lodash.restparam": "3.6.1" 717 | } 718 | }, 719 | "lodash._getnative": { 720 | "version": "3.9.1", 721 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", 722 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", 723 | "dev": true 724 | }, 725 | "lodash._isiterateecall": { 726 | "version": "3.0.9", 727 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", 728 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", 729 | "dev": true 730 | }, 731 | "lodash.assign": { 732 | "version": "3.2.0", 733 | "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", 734 | "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", 735 | "dev": true, 736 | "requires": { 737 | "lodash._baseassign": "3.2.0", 738 | "lodash._createassigner": "3.1.1", 739 | "lodash.keys": "3.1.2" 740 | } 741 | }, 742 | "lodash.defaults": { 743 | "version": "3.1.2", 744 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", 745 | "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", 746 | "dev": true, 747 | "requires": { 748 | "lodash.assign": "3.2.0", 749 | "lodash.restparam": "3.6.1" 750 | } 751 | }, 752 | "lodash.isarguments": { 753 | "version": "3.1.0", 754 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 755 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", 756 | "dev": true 757 | }, 758 | "lodash.isarray": { 759 | "version": "3.0.4", 760 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", 761 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", 762 | "dev": true 763 | }, 764 | "lodash.keys": { 765 | "version": "3.1.2", 766 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", 767 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", 768 | "dev": true, 769 | "requires": { 770 | "lodash._getnative": "3.9.1", 771 | "lodash.isarguments": "3.1.0", 772 | "lodash.isarray": "3.0.4" 773 | } 774 | }, 775 | "lodash.restparam": { 776 | "version": "3.6.1", 777 | "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", 778 | "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", 779 | "dev": true 780 | }, 781 | "lowercase-keys": { 782 | "version": "1.0.0", 783 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", 784 | "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", 785 | "dev": true 786 | }, 787 | "map-stream": { 788 | "version": "0.1.0", 789 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 790 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", 791 | "dev": true 792 | }, 793 | "media-typer": { 794 | "version": "0.3.0", 795 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 796 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 797 | }, 798 | "merge-descriptors": { 799 | "version": "1.0.1", 800 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 801 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 802 | }, 803 | "methods": { 804 | "version": "1.1.2", 805 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 806 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 807 | }, 808 | "micromatch": { 809 | "version": "2.3.11", 810 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", 811 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", 812 | "dev": true, 813 | "requires": { 814 | "arr-diff": "2.0.0", 815 | "array-unique": "0.2.1", 816 | "braces": "1.8.5", 817 | "expand-brackets": "0.1.5", 818 | "extglob": "0.3.2", 819 | "filename-regex": "2.0.1", 820 | "is-extglob": "1.0.0", 821 | "is-glob": "2.0.1", 822 | "kind-of": "3.2.2", 823 | "normalize-path": "2.1.1", 824 | "object.omit": "2.0.1", 825 | "parse-glob": "3.0.4", 826 | "regex-cache": "0.4.3" 827 | } 828 | }, 829 | "mime": { 830 | "version": "1.3.4", 831 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", 832 | "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" 833 | }, 834 | "mime-db": { 835 | "version": "1.29.0", 836 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.29.0.tgz", 837 | "integrity": "sha1-SNJtI1WJZRcErFkWygYAGRQmaHg=" 838 | }, 839 | "mime-types": { 840 | "version": "2.1.16", 841 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.16.tgz", 842 | "integrity": "sha1-K4WKUuXs1RbbiXrCvodIeDBpjiM=", 843 | "requires": { 844 | "mime-db": "1.29.0" 845 | } 846 | }, 847 | "minimatch": { 848 | "version": "3.0.4", 849 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 850 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 851 | "dev": true, 852 | "requires": { 853 | "brace-expansion": "1.1.8" 854 | } 855 | }, 856 | "minimist": { 857 | "version": "0.0.8", 858 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 859 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", 860 | "dev": true 861 | }, 862 | "mkdirp": { 863 | "version": "0.5.1", 864 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 865 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 866 | "dev": true, 867 | "requires": { 868 | "minimist": "0.0.8" 869 | } 870 | }, 871 | "ms": { 872 | "version": "2.0.0", 873 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 874 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 875 | }, 876 | "negotiator": { 877 | "version": "0.6.1", 878 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 879 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 880 | }, 881 | "nested-error-stacks": { 882 | "version": "1.0.2", 883 | "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-1.0.2.tgz", 884 | "integrity": "sha1-GfYZWRUZ8JZ2mlupqG5u7sgjw88=", 885 | "dev": true, 886 | "requires": { 887 | "inherits": "2.0.3" 888 | } 889 | }, 890 | "nodemon": { 891 | "version": "1.11.0", 892 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.11.0.tgz", 893 | "integrity": "sha1-ImxWK9KnsT09dRi0mtSCijYj0Gw=", 894 | "dev": true, 895 | "requires": { 896 | "chokidar": "1.7.0", 897 | "debug": "2.6.7", 898 | "es6-promise": "3.3.1", 899 | "ignore-by-default": "1.0.1", 900 | "lodash.defaults": "3.1.2", 901 | "minimatch": "3.0.4", 902 | "ps-tree": "1.1.0", 903 | "touch": "1.0.0", 904 | "undefsafe": "0.0.3", 905 | "update-notifier": "0.5.0" 906 | } 907 | }, 908 | "nopt": { 909 | "version": "1.0.10", 910 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 911 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", 912 | "dev": true, 913 | "requires": { 914 | "abbrev": "1.1.0" 915 | } 916 | }, 917 | "normalize-path": { 918 | "version": "2.1.1", 919 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 920 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 921 | "dev": true, 922 | "requires": { 923 | "remove-trailing-separator": "1.0.2" 924 | } 925 | }, 926 | "number-is-nan": { 927 | "version": "1.0.1", 928 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 929 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 930 | "dev": true 931 | }, 932 | "object-assign": { 933 | "version": "4.1.1", 934 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 935 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", 936 | "dev": true 937 | }, 938 | "object.omit": { 939 | "version": "2.0.1", 940 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", 941 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", 942 | "dev": true, 943 | "requires": { 944 | "for-own": "0.1.5", 945 | "is-extendable": "0.1.1" 946 | } 947 | }, 948 | "on-finished": { 949 | "version": "2.3.0", 950 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 951 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 952 | "requires": { 953 | "ee-first": "1.1.1" 954 | } 955 | }, 956 | "once": { 957 | "version": "1.4.0", 958 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 959 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 960 | "dev": true, 961 | "requires": { 962 | "wrappy": "1.0.2" 963 | } 964 | }, 965 | "os-homedir": { 966 | "version": "1.0.2", 967 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", 968 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", 969 | "dev": true 970 | }, 971 | "os-tmpdir": { 972 | "version": "1.0.2", 973 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", 974 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", 975 | "dev": true 976 | }, 977 | "osenv": { 978 | "version": "0.1.4", 979 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz", 980 | "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=", 981 | "dev": true, 982 | "requires": { 983 | "os-homedir": "1.0.2", 984 | "os-tmpdir": "1.0.2" 985 | } 986 | }, 987 | "package-json": { 988 | "version": "1.2.0", 989 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-1.2.0.tgz", 990 | "integrity": "sha1-yOysCUInzfdqMWh07QXifMk5oOA=", 991 | "dev": true, 992 | "requires": { 993 | "got": "3.3.1", 994 | "registry-url": "3.1.0" 995 | } 996 | }, 997 | "parse-glob": { 998 | "version": "3.0.4", 999 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", 1000 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", 1001 | "dev": true, 1002 | "requires": { 1003 | "glob-base": "0.3.0", 1004 | "is-dotfile": "1.0.3", 1005 | "is-extglob": "1.0.0", 1006 | "is-glob": "2.0.1" 1007 | } 1008 | }, 1009 | "parseurl": { 1010 | "version": "1.3.1", 1011 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.1.tgz", 1012 | "integrity": "sha1-yKuMkiO6NIiKpkopeyiFO+wY2lY=" 1013 | }, 1014 | "path-is-absolute": { 1015 | "version": "1.0.1", 1016 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1017 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1018 | "dev": true 1019 | }, 1020 | "path-to-regexp": { 1021 | "version": "0.1.7", 1022 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1023 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1024 | }, 1025 | "pause-stream": { 1026 | "version": "0.0.11", 1027 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 1028 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", 1029 | "dev": true, 1030 | "requires": { 1031 | "through": "2.3.8" 1032 | } 1033 | }, 1034 | "pinkie": { 1035 | "version": "2.0.4", 1036 | "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", 1037 | "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", 1038 | "dev": true 1039 | }, 1040 | "pinkie-promise": { 1041 | "version": "2.0.1", 1042 | "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", 1043 | "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", 1044 | "dev": true, 1045 | "requires": { 1046 | "pinkie": "2.0.4" 1047 | } 1048 | }, 1049 | "prepend-http": { 1050 | "version": "1.0.4", 1051 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", 1052 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", 1053 | "dev": true 1054 | }, 1055 | "preserve": { 1056 | "version": "0.2.0", 1057 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", 1058 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", 1059 | "dev": true 1060 | }, 1061 | "process-nextick-args": { 1062 | "version": "1.0.7", 1063 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1064 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 1065 | "dev": true 1066 | }, 1067 | "proxy-addr": { 1068 | "version": "1.1.5", 1069 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", 1070 | "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=", 1071 | "requires": { 1072 | "forwarded": "0.1.0", 1073 | "ipaddr.js": "1.4.0" 1074 | } 1075 | }, 1076 | "ps-tree": { 1077 | "version": "1.1.0", 1078 | "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", 1079 | "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", 1080 | "dev": true, 1081 | "requires": { 1082 | "event-stream": "3.3.4" 1083 | } 1084 | }, 1085 | "qs": { 1086 | "version": "6.4.0", 1087 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", 1088 | "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=" 1089 | }, 1090 | "randomatic": { 1091 | "version": "1.1.7", 1092 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", 1093 | "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", 1094 | "dev": true, 1095 | "requires": { 1096 | "is-number": "3.0.0", 1097 | "kind-of": "4.0.0" 1098 | }, 1099 | "dependencies": { 1100 | "is-number": { 1101 | "version": "3.0.0", 1102 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 1103 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 1104 | "dev": true, 1105 | "requires": { 1106 | "kind-of": "3.2.2" 1107 | }, 1108 | "dependencies": { 1109 | "kind-of": { 1110 | "version": "3.2.2", 1111 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1112 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1113 | "dev": true, 1114 | "requires": { 1115 | "is-buffer": "1.1.5" 1116 | } 1117 | } 1118 | } 1119 | }, 1120 | "kind-of": { 1121 | "version": "4.0.0", 1122 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 1123 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 1124 | "dev": true, 1125 | "requires": { 1126 | "is-buffer": "1.1.5" 1127 | } 1128 | } 1129 | } 1130 | }, 1131 | "range-parser": { 1132 | "version": "1.2.0", 1133 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 1134 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 1135 | }, 1136 | "raw-body": { 1137 | "version": "2.2.0", 1138 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", 1139 | "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=", 1140 | "requires": { 1141 | "bytes": "2.4.0", 1142 | "iconv-lite": "0.4.15", 1143 | "unpipe": "1.0.0" 1144 | } 1145 | }, 1146 | "rc": { 1147 | "version": "1.2.1", 1148 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", 1149 | "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", 1150 | "dev": true, 1151 | "requires": { 1152 | "deep-extend": "0.4.2", 1153 | "ini": "1.3.4", 1154 | "minimist": "1.2.0", 1155 | "strip-json-comments": "2.0.1" 1156 | }, 1157 | "dependencies": { 1158 | "minimist": { 1159 | "version": "1.2.0", 1160 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1161 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1162 | "dev": true 1163 | } 1164 | } 1165 | }, 1166 | "read-all-stream": { 1167 | "version": "3.1.0", 1168 | "resolved": "https://registry.npmjs.org/read-all-stream/-/read-all-stream-3.1.0.tgz", 1169 | "integrity": "sha1-NcPhd/IHjveJ7kv6+kNzB06u9Po=", 1170 | "dev": true, 1171 | "requires": { 1172 | "pinkie-promise": "2.0.1", 1173 | "readable-stream": "2.3.3" 1174 | } 1175 | }, 1176 | "readable-stream": { 1177 | "version": "2.3.3", 1178 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 1179 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 1180 | "dev": true, 1181 | "requires": { 1182 | "core-util-is": "1.0.2", 1183 | "inherits": "2.0.3", 1184 | "isarray": "1.0.0", 1185 | "process-nextick-args": "1.0.7", 1186 | "safe-buffer": "5.1.1", 1187 | "string_decoder": "1.0.3", 1188 | "util-deprecate": "1.0.2" 1189 | } 1190 | }, 1191 | "readdirp": { 1192 | "version": "2.1.0", 1193 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", 1194 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", 1195 | "dev": true, 1196 | "requires": { 1197 | "graceful-fs": "4.1.11", 1198 | "minimatch": "3.0.4", 1199 | "readable-stream": "2.3.3", 1200 | "set-immediate-shim": "1.0.1" 1201 | } 1202 | }, 1203 | "regex-cache": { 1204 | "version": "0.4.3", 1205 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.3.tgz", 1206 | "integrity": "sha1-mxpsNdTQ3871cRrmUejp09cRQUU=", 1207 | "dev": true, 1208 | "requires": { 1209 | "is-equal-shallow": "0.1.3", 1210 | "is-primitive": "2.0.0" 1211 | } 1212 | }, 1213 | "registry-url": { 1214 | "version": "3.1.0", 1215 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 1216 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", 1217 | "dev": true, 1218 | "requires": { 1219 | "rc": "1.2.1" 1220 | } 1221 | }, 1222 | "remove-trailing-separator": { 1223 | "version": "1.0.2", 1224 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.0.2.tgz", 1225 | "integrity": "sha1-abBi2XhyetFNxrVrpKt3L9jXBRE=", 1226 | "dev": true 1227 | }, 1228 | "repeat-element": { 1229 | "version": "1.1.2", 1230 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", 1231 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", 1232 | "dev": true 1233 | }, 1234 | "repeat-string": { 1235 | "version": "1.6.1", 1236 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1237 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", 1238 | "dev": true 1239 | }, 1240 | "repeating": { 1241 | "version": "1.1.3", 1242 | "resolved": "https://registry.npmjs.org/repeating/-/repeating-1.1.3.tgz", 1243 | "integrity": "sha1-PUEUIYh3U3SU+X93+Xhfq4EPpKw=", 1244 | "dev": true, 1245 | "requires": { 1246 | "is-finite": "1.0.2" 1247 | } 1248 | }, 1249 | "safe-buffer": { 1250 | "version": "5.1.1", 1251 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1252 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 1253 | "dev": true 1254 | }, 1255 | "semver": { 1256 | "version": "5.4.1", 1257 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 1258 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", 1259 | "dev": true 1260 | }, 1261 | "semver-diff": { 1262 | "version": "2.1.0", 1263 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", 1264 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", 1265 | "dev": true, 1266 | "requires": { 1267 | "semver": "5.4.1" 1268 | } 1269 | }, 1270 | "send": { 1271 | "version": "0.15.3", 1272 | "resolved": "https://registry.npmjs.org/send/-/send-0.15.3.tgz", 1273 | "integrity": "sha1-UBP5+ZAj31DRvZiSwZ4979HVMwk=", 1274 | "requires": { 1275 | "debug": "2.6.7", 1276 | "depd": "1.1.1", 1277 | "destroy": "1.0.4", 1278 | "encodeurl": "1.0.1", 1279 | "escape-html": "1.0.3", 1280 | "etag": "1.8.0", 1281 | "fresh": "0.5.0", 1282 | "http-errors": "1.6.1", 1283 | "mime": "1.3.4", 1284 | "ms": "2.0.0", 1285 | "on-finished": "2.3.0", 1286 | "range-parser": "1.2.0", 1287 | "statuses": "1.3.1" 1288 | } 1289 | }, 1290 | "serve-static": { 1291 | "version": "1.12.3", 1292 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.12.3.tgz", 1293 | "integrity": "sha1-n0uhni8wMMVH+K+ZEHg47DjVseI=", 1294 | "requires": { 1295 | "encodeurl": "1.0.1", 1296 | "escape-html": "1.0.3", 1297 | "parseurl": "1.3.1", 1298 | "send": "0.15.3" 1299 | } 1300 | }, 1301 | "set-immediate-shim": { 1302 | "version": "1.0.1", 1303 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", 1304 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", 1305 | "dev": true 1306 | }, 1307 | "setprototypeof": { 1308 | "version": "1.0.3", 1309 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 1310 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 1311 | }, 1312 | "slide": { 1313 | "version": "1.1.6", 1314 | "resolved": "https://registry.npmjs.org/slide/-/slide-1.1.6.tgz", 1315 | "integrity": "sha1-VusCfWW00tzmyy4tMsTUr8nh1wc=", 1316 | "dev": true 1317 | }, 1318 | "split": { 1319 | "version": "0.3.3", 1320 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 1321 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", 1322 | "dev": true, 1323 | "requires": { 1324 | "through": "2.3.8" 1325 | } 1326 | }, 1327 | "statuses": { 1328 | "version": "1.3.1", 1329 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 1330 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" 1331 | }, 1332 | "stream-combiner": { 1333 | "version": "0.0.4", 1334 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 1335 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", 1336 | "dev": true, 1337 | "requires": { 1338 | "duplexer": "0.1.1" 1339 | } 1340 | }, 1341 | "stream-shift": { 1342 | "version": "1.0.0", 1343 | "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", 1344 | "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", 1345 | "dev": true 1346 | }, 1347 | "string_decoder": { 1348 | "version": "1.0.3", 1349 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 1350 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 1351 | "dev": true, 1352 | "requires": { 1353 | "safe-buffer": "5.1.1" 1354 | } 1355 | }, 1356 | "string-length": { 1357 | "version": "1.0.1", 1358 | "resolved": "https://registry.npmjs.org/string-length/-/string-length-1.0.1.tgz", 1359 | "integrity": "sha1-VpcPscOFWOnnC3KL894mmsRa36w=", 1360 | "dev": true, 1361 | "requires": { 1362 | "strip-ansi": "3.0.1" 1363 | } 1364 | }, 1365 | "strip-ansi": { 1366 | "version": "3.0.1", 1367 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 1368 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 1369 | "dev": true, 1370 | "requires": { 1371 | "ansi-regex": "2.1.1" 1372 | } 1373 | }, 1374 | "strip-json-comments": { 1375 | "version": "2.0.1", 1376 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 1377 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 1378 | "dev": true 1379 | }, 1380 | "supports-color": { 1381 | "version": "2.0.0", 1382 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 1383 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 1384 | "dev": true 1385 | }, 1386 | "through": { 1387 | "version": "2.3.8", 1388 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 1389 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 1390 | "dev": true 1391 | }, 1392 | "timed-out": { 1393 | "version": "2.0.0", 1394 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-2.0.0.tgz", 1395 | "integrity": "sha1-84sK6B03R9YoAB9B2vxlKs5nHAo=", 1396 | "dev": true 1397 | }, 1398 | "touch": { 1399 | "version": "1.0.0", 1400 | "resolved": "https://registry.npmjs.org/touch/-/touch-1.0.0.tgz", 1401 | "integrity": "sha1-RJy+LbrlqMgDjjDXH6D/RklHxN4=", 1402 | "dev": true, 1403 | "requires": { 1404 | "nopt": "1.0.10" 1405 | } 1406 | }, 1407 | "type-is": { 1408 | "version": "1.6.15", 1409 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", 1410 | "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=", 1411 | "requires": { 1412 | "media-typer": "0.3.0", 1413 | "mime-types": "2.1.16" 1414 | } 1415 | }, 1416 | "undefsafe": { 1417 | "version": "0.0.3", 1418 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", 1419 | "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=", 1420 | "dev": true 1421 | }, 1422 | "unpipe": { 1423 | "version": "1.0.0", 1424 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 1425 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 1426 | }, 1427 | "update-notifier": { 1428 | "version": "0.5.0", 1429 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-0.5.0.tgz", 1430 | "integrity": "sha1-B7XcIGazYnqztPUwEw9+3doHpMw=", 1431 | "dev": true, 1432 | "requires": { 1433 | "chalk": "1.1.3", 1434 | "configstore": "1.4.0", 1435 | "is-npm": "1.0.0", 1436 | "latest-version": "1.0.1", 1437 | "repeating": "1.1.3", 1438 | "semver-diff": "2.1.0", 1439 | "string-length": "1.0.1" 1440 | } 1441 | }, 1442 | "util-deprecate": { 1443 | "version": "1.0.2", 1444 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 1445 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 1446 | "dev": true 1447 | }, 1448 | "utils-merge": { 1449 | "version": "1.0.0", 1450 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", 1451 | "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" 1452 | }, 1453 | "uuid": { 1454 | "version": "2.0.3", 1455 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-2.0.3.tgz", 1456 | "integrity": "sha1-Z+LoY3lyFVMN/zGOW/nc6/1Hsho=", 1457 | "dev": true 1458 | }, 1459 | "vary": { 1460 | "version": "1.1.1", 1461 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", 1462 | "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" 1463 | }, 1464 | "wrappy": { 1465 | "version": "1.0.2", 1466 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1467 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1468 | "dev": true 1469 | }, 1470 | "write-file-atomic": { 1471 | "version": "1.3.4", 1472 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-1.3.4.tgz", 1473 | "integrity": "sha1-+Aek8LHZ6ROuekgRLmzDrxmRtF8=", 1474 | "dev": true, 1475 | "requires": { 1476 | "graceful-fs": "4.1.11", 1477 | "imurmurhash": "0.1.4", 1478 | "slide": "1.1.6" 1479 | } 1480 | }, 1481 | "xdg-basedir": { 1482 | "version": "2.0.0", 1483 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-2.0.0.tgz", 1484 | "integrity": "sha1-7byQPMOF/ARSPZZqM1UEtVBNG9I=", 1485 | "dev": true, 1486 | "requires": { 1487 | "os-homedir": "1.0.2" 1488 | } 1489 | } 1490 | } 1491 | } 1492 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "simple-server", 3 | "version": "1.0.0", 4 | "description": "# Dependencies this project depends on the following dependencies: \t- expressjs \t- (ejs)![https://github.com/tj/ejs]", 5 | "main": "app.js", 6 | "dependencies": { 7 | "body-parser": "^1.17.2", 8 | "ejs": "^2.5.7", 9 | "express": "^4.15.3" 10 | }, 11 | "devDependencies": { 12 | "nodemon": "^1.11.0" 13 | }, 14 | "scripts": { 15 | "start": "node app.js", 16 | "dev": "nodemon app.js", 17 | "test": "echo \"Error: no test specified\" && exit 1" 18 | }, 19 | "keywords": [], 20 | "author": "", 21 | "license": "ISC" 22 | } 23 | -------------------------------------------------------------------------------- /public/css/main.css: -------------------------------------------------------------------------------- 1 | body { 2 | background-color: #eee; 3 | } 4 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # My First Web App with Express 2 | 3 | # Dependencies 4 | this project depends on the following dependencies: 5 | - expressjs 6 | - [ejs]!() 7 | 8 | # Libraries used in this example 9 | - [bootstrap]!(https://www.bootstrapcdn.com/) 10 | -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | const express = require('express'); 2 | const router = express.Router(); 3 | 4 | const indexController = require('../controllers/index'); 5 | 6 | router.get('/', indexController.index); 7 | 8 | router.get('/products', indexController.getProducts); 9 | 10 | router.post('/new-product', indexController.addProduct); 11 | 12 | module.exports = router; 13 | -------------------------------------------------------------------------------- /views/index.ejs: -------------------------------------------------------------------------------- 1 | <% include partials/head.ejs %> 2 | 3 |