├── .gitignore ├── README.md ├── backend ├── app.js ├── bin │ └── www ├── movies.json ├── package-lock.json ├── package.json ├── public │ ├── index.html │ ├── static │ │ ├── css │ │ │ ├── app.1031e26cd03b4ff9f32a60d1d2af704d.css │ │ │ └── app.1031e26cd03b4ff9f32a60d1d2af704d.css.map │ │ └── js │ │ │ ├── app.8ce01e45ecc11eedafe3.js │ │ │ ├── manifest.08b0c38290b77c2dbb38.js │ │ │ └── vendor.2490ad78a7bf1854c219.js │ └── stylesheets │ │ └── style.css ├── routes │ ├── index.js │ ├── movies.js │ └── users.js └── views │ ├── error.jade │ ├── index.jade │ └── layout.jade ├── frontend ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ ├── webpack.prod.conf.js │ └── webpack.test.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ ├── prod.env.js │ └── test.env.js ├── index.html ├── package-lock.json ├── package.json ├── src │ ├── App.vue │ ├── assets │ │ └── logo.png │ ├── components │ │ ├── IndexPage.vue │ │ └── ShowPage.vue │ ├── main.js │ └── router │ │ └── index.js ├── static │ └── .gitkeep └── test │ ├── e2e │ ├── custom-assertions │ │ └── elementCount.js │ ├── nightwatch.conf.js │ ├── runner.js │ └── specs │ │ └── test.js │ └── unit │ ├── .eslintrc │ ├── index.js │ ├── karma.conf.js │ └── specs │ └── Hello.spec.js └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | **/node_modules 2 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Express Generator with Vue-CLI 2 | 3 | ``` 4 | git clone https://github.com/ChangJoo-Park/express-generator-with-vue-cli sample-app 5 | cd sample-app 6 | cd backend 7 | npm install 8 | cd .. 9 | cd frontend 10 | npm install 11 | cd .. 12 | npm start 13 | ``` 14 | -------------------------------------------------------------------------------- /backend/app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var path = require('path'); 3 | var favicon = require('serve-favicon'); 4 | var logger = require('morgan'); 5 | var cookieParser = require('cookie-parser'); 6 | var bodyParser = require('body-parser'); 7 | 8 | var index = require('./routes/index'); 9 | var users = require('./routes/users'); 10 | var movies = require('./routes/movies'); 11 | 12 | var app = express(); 13 | 14 | // view engine setup 15 | app.set('views', path.join(__dirname, 'views')); 16 | app.set('view engine', 'jade'); 17 | 18 | // uncomment after placing your favicon in /public 19 | //app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 20 | app.use(logger('dev')); 21 | app.use(bodyParser.json()); 22 | app.use(bodyParser.urlencoded({ extended: false })); 23 | app.use(cookieParser()); 24 | app.use(express.static(path.join(__dirname, 'public'))); 25 | 26 | app.use('/', index); 27 | app.use('/users', users); 28 | app.use('/api/movies', movies); 29 | app.use(require('connect-history-api-fallback')()) 30 | 31 | // catch 404 and forward to error handler 32 | app.use(function (req, res, next) { 33 | var err = new Error('Not Found'); 34 | err.status = 404; 35 | next(err); 36 | }); 37 | 38 | // error handler 39 | app.use(function (err, req, res, next) { 40 | // set locals, only providing error in development 41 | res.locals.message = err.message; 42 | res.locals.error = req.app.get('env') === 'development' ? err : {}; 43 | 44 | // render the error page 45 | res.status(err.status || 500); 46 | res.render('error'); 47 | }); 48 | 49 | module.exports = app; 50 | -------------------------------------------------------------------------------- /backend/bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('backend:server'); 9 | var http = require('http'); 10 | 11 | /** 12 | * Get port from environment and store in Express. 13 | */ 14 | 15 | var port = normalizePort(process.env.PORT || '3000'); 16 | app.set('port', port); 17 | 18 | /** 19 | * Create HTTP server. 20 | */ 21 | 22 | var server = http.createServer(app); 23 | 24 | /** 25 | * Listen on provided port, on all network interfaces. 26 | */ 27 | 28 | server.listen(port); 29 | server.on('error', onError); 30 | server.on('listening', onListening); 31 | 32 | /** 33 | * Normalize a port into a number, string, or false. 34 | */ 35 | 36 | function normalizePort(val) { 37 | var port = parseInt(val, 10); 38 | 39 | if (isNaN(port)) { 40 | // named pipe 41 | return val; 42 | } 43 | 44 | if (port >= 0) { 45 | // port number 46 | return port; 47 | } 48 | 49 | return false; 50 | } 51 | 52 | /** 53 | * Event listener for HTTP server "error" event. 54 | */ 55 | 56 | function onError(error) { 57 | if (error.syscall !== 'listen') { 58 | throw error; 59 | } 60 | 61 | var bind = typeof port === 'string' 62 | ? 'Pipe ' + port 63 | : 'Port ' + port; 64 | 65 | // handle specific listen errors with friendly messages 66 | switch (error.code) { 67 | case 'EACCES': 68 | console.error(bind + ' requires elevated privileges'); 69 | process.exit(1); 70 | break; 71 | case 'EADDRINUSE': 72 | console.error(bind + ' is already in use'); 73 | process.exit(1); 74 | break; 75 | default: 76 | throw error; 77 | } 78 | } 79 | 80 | /** 81 | * Event listener for HTTP server "listening" event. 82 | */ 83 | 84 | function onListening() { 85 | var addr = server.address(); 86 | var bind = typeof addr === 'string' 87 | ? 'pipe ' + addr 88 | : 'port ' + addr.port; 89 | debug('Listening on ' + bind); 90 | } 91 | -------------------------------------------------------------------------------- /backend/movies.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "id": 1, 4 | "name": "공조", 5 | "year": 2017, 6 | "director": "김성훈", 7 | "poster": "http://img.cgv.co.kr/Movie/Thumbnail/Poster/000079/79416/79416_185.jpg" 8 | }, 9 | { 10 | "id": 2, 11 | "name": "컨택트", 12 | "year": 2017, 13 | "director": "드니 빌뇌브", 14 | "poster": "http://img.cgv.co.kr/Movie/Thumbnail/Poster/000079/79437/79437_185.jpg" 15 | }, 16 | { 17 | "id": 3, 18 | "name": "더킹", 19 | "year": 2017, 20 | "director": "한재림", 21 | "poster": "http://img.cgv.co.kr/Movie/Thumbnail/Poster/000079/79423/79423_185.jpg" 22 | }, 23 | { 24 | "id": 4, 25 | "name": "모아나", 26 | "year": 2017, 27 | "director": "론 클레멘츠, 존 머스커", 28 | "poster": "http://img.cgv.co.kr/Movie/Thumbnail/Poster/000079/79316/79316_185.jpg" 29 | }, 30 | { 31 | "id": 5, 32 | "name": "라이언", 33 | "year": 2017, 34 | "director": "가스 데이비스", 35 | "poster": "http://img.cgv.co.kr/Movie/Thumbnail/Poster/000079/79396/79396_185.jpg" 36 | }, 37 | { 38 | "id": 6, 39 | "name": "너의 이름은", 40 | "year": 2017, 41 | "director": "신카이 마코토", 42 | "poster": "http://img.cgv.co.kr/Movie/Thumbnail/Poster/000079/79313/79313_1000.jpg" 43 | } 44 | ] -------------------------------------------------------------------------------- /backend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "0.0.0", 4 | "lockfileVersion": 1, 5 | "dependencies": { 6 | "abbrev": { 7 | "version": "1.1.0", 8 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz", 9 | "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=", 10 | "dev": true 11 | }, 12 | "accepts": { 13 | "version": "1.3.4", 14 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.4.tgz", 15 | "integrity": "sha1-hiRnWMfdbSGmR0/whKR0DsBesh8=" 16 | }, 17 | "acorn": { 18 | "version": "2.7.0", 19 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-2.7.0.tgz", 20 | "integrity": "sha1-q259nYhqrKiwhbwzEreaGYQz8Oc=" 21 | }, 22 | "acorn-globals": { 23 | "version": "1.0.9", 24 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-1.0.9.tgz", 25 | "integrity": "sha1-VbtemGkVB7dFedBRNBMhfDgMVM8=" 26 | }, 27 | "align-text": { 28 | "version": "0.1.4", 29 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 30 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=" 31 | }, 32 | "amdefine": { 33 | "version": "1.0.1", 34 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", 35 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=" 36 | }, 37 | "ansi-align": { 38 | "version": "2.0.0", 39 | "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-2.0.0.tgz", 40 | "integrity": "sha1-w2rsy6VjuJzrVW82kPCx2eNUf38=", 41 | "dev": true 42 | }, 43 | "ansi-regex": { 44 | "version": "3.0.0", 45 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 46 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", 47 | "dev": true 48 | }, 49 | "ansi-styles": { 50 | "version": "3.2.0", 51 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz", 52 | "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==", 53 | "dev": true 54 | }, 55 | "anymatch": { 56 | "version": "1.3.2", 57 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", 58 | "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", 59 | "dev": true 60 | }, 61 | "arr-diff": { 62 | "version": "2.0.0", 63 | "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", 64 | "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", 65 | "dev": true 66 | }, 67 | "arr-flatten": { 68 | "version": "1.1.0", 69 | "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", 70 | "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", 71 | "dev": true 72 | }, 73 | "array-flatten": { 74 | "version": "1.1.1", 75 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 76 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 77 | }, 78 | "array-unique": { 79 | "version": "0.2.1", 80 | "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", 81 | "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", 82 | "dev": true 83 | }, 84 | "asap": { 85 | "version": "1.0.0", 86 | "resolved": "https://registry.npmjs.org/asap/-/asap-1.0.0.tgz", 87 | "integrity": "sha1-sqRdpf36ILBJb8N2jMJ8EvqRan0=" 88 | }, 89 | "async-each": { 90 | "version": "1.0.1", 91 | "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.1.tgz", 92 | "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", 93 | "dev": true 94 | }, 95 | "balanced-match": { 96 | "version": "1.0.0", 97 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 98 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 99 | "dev": true 100 | }, 101 | "basic-auth": { 102 | "version": "1.0.4", 103 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-1.0.4.tgz", 104 | "integrity": "sha1-Awk1sB3nyblKgksp8/zLdQ06UpA=" 105 | }, 106 | "binary-extensions": { 107 | "version": "1.10.0", 108 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.10.0.tgz", 109 | "integrity": "sha1-muuabF6IY4qtFx4Wf1kAq+JINdA=", 110 | "dev": true 111 | }, 112 | "body-parser": { 113 | "version": "1.16.1", 114 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.16.1.tgz", 115 | "integrity": "sha1-UVQNBFrfp6DGmVoBS7ax7ZuAIyk=", 116 | "dependencies": { 117 | "debug": { 118 | "version": "2.6.1", 119 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.1.tgz", 120 | "integrity": "sha1-eYVQkLosTjEVzH2HaUkdWPBJE1E=" 121 | } 122 | } 123 | }, 124 | "boxen": { 125 | "version": "1.2.1", 126 | "resolved": "https://registry.npmjs.org/boxen/-/boxen-1.2.1.tgz", 127 | "integrity": "sha1-DxHn/jRO25OXl3/BPt5/ZNlWSB0=", 128 | "dev": true, 129 | "dependencies": { 130 | "camelcase": { 131 | "version": "4.1.0", 132 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 133 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", 134 | "dev": true 135 | }, 136 | "chalk": { 137 | "version": "2.1.0", 138 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.1.0.tgz", 139 | "integrity": "sha512-LUHGS/dge4ujbXMJrnihYMcL4AoOweGnw9Tp3kQuqy1Kx5c1qKjqvMJZ6nVJPMWJtKCTN72ZogH3oeSO9g9rXQ==", 140 | "dev": true 141 | } 142 | } 143 | }, 144 | "brace-expansion": { 145 | "version": "1.1.8", 146 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", 147 | "integrity": "sha1-wHshHHyVLsH479Uad+8NHTmQopI=", 148 | "dev": true 149 | }, 150 | "braces": { 151 | "version": "1.8.5", 152 | "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", 153 | "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", 154 | "dev": true 155 | }, 156 | "bytes": { 157 | "version": "2.4.0", 158 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-2.4.0.tgz", 159 | "integrity": "sha1-fZcZb51br39pNeJZhVSe3SpsIzk=" 160 | }, 161 | "camelcase": { 162 | "version": "1.2.1", 163 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 164 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" 165 | }, 166 | "capture-stack-trace": { 167 | "version": "1.0.0", 168 | "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz", 169 | "integrity": "sha1-Sm+gc5nCa7pH8LJJa00PtAjFVQ0=", 170 | "dev": true 171 | }, 172 | "center-align": { 173 | "version": "0.1.3", 174 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 175 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=" 176 | }, 177 | "chalk": { 178 | "version": "1.1.3", 179 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", 180 | "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", 181 | "dev": true, 182 | "dependencies": { 183 | "ansi-regex": { 184 | "version": "2.1.1", 185 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 186 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 187 | "dev": true 188 | }, 189 | "ansi-styles": { 190 | "version": "2.2.1", 191 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", 192 | "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", 193 | "dev": true 194 | }, 195 | "strip-ansi": { 196 | "version": "3.0.1", 197 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 198 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 199 | "dev": true 200 | }, 201 | "supports-color": { 202 | "version": "2.0.0", 203 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", 204 | "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", 205 | "dev": true 206 | } 207 | } 208 | }, 209 | "character-parser": { 210 | "version": "1.2.1", 211 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-1.2.1.tgz", 212 | "integrity": "sha1-wN3kqxgnE7kZuXCVmhI+zBow/NY=" 213 | }, 214 | "chokidar": { 215 | "version": "1.7.0", 216 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", 217 | "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", 218 | "dev": true 219 | }, 220 | "clean-css": { 221 | "version": "3.4.28", 222 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz", 223 | "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=", 224 | "dependencies": { 225 | "commander": { 226 | "version": "2.8.1", 227 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz", 228 | "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=" 229 | } 230 | } 231 | }, 232 | "cli-boxes": { 233 | "version": "1.0.0", 234 | "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-1.0.0.tgz", 235 | "integrity": "sha1-T6kXw+WclKAEzWH47lCdplFocUM=", 236 | "dev": true 237 | }, 238 | "cliui": { 239 | "version": "2.1.0", 240 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 241 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 242 | "dependencies": { 243 | "wordwrap": { 244 | "version": "0.0.2", 245 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 246 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" 247 | } 248 | } 249 | }, 250 | "code-point-at": { 251 | "version": "1.1.0", 252 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 253 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", 254 | "dev": true 255 | }, 256 | "color-convert": { 257 | "version": "1.9.0", 258 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.0.tgz", 259 | "integrity": "sha1-Gsz5fdc5uYO/mU1W/sj5WFNkG3o=", 260 | "dev": true 261 | }, 262 | "color-name": { 263 | "version": "1.1.3", 264 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 265 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 266 | "dev": true 267 | }, 268 | "commander": { 269 | "version": "2.6.0", 270 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.6.0.tgz", 271 | "integrity": "sha1-nfflL7Kgyw+4kFjugMMQQiXzfh0=" 272 | }, 273 | "concat-map": { 274 | "version": "0.0.1", 275 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 276 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 277 | "dev": true 278 | }, 279 | "configstore": { 280 | "version": "3.1.1", 281 | "resolved": "https://registry.npmjs.org/configstore/-/configstore-3.1.1.tgz", 282 | "integrity": "sha512-5oNkD/L++l0O6xGXxb1EWS7SivtjfGQlRyxJsYgE0Z495/L81e2h4/d3r969hoPXuFItzNOKMtsXgYG4c7dYvw==", 283 | "dev": true 284 | }, 285 | "connect-history-api-fallback": { 286 | "version": "1.3.0", 287 | "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-1.3.0.tgz", 288 | "integrity": "sha1-5R0X+PDvDbkKZP20feMFFVbp8Wk=" 289 | }, 290 | "constantinople": { 291 | "version": "3.0.2", 292 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.0.2.tgz", 293 | "integrity": "sha1-S5RdmTeQe82Y7ldRIsOBdRZUQUE=" 294 | }, 295 | "content-disposition": { 296 | "version": "0.5.2", 297 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 298 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 299 | }, 300 | "content-type": { 301 | "version": "1.0.4", 302 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 303 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 304 | }, 305 | "cookie": { 306 | "version": "0.3.1", 307 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 308 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 309 | }, 310 | "cookie-parser": { 311 | "version": "1.4.3", 312 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", 313 | "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=" 314 | }, 315 | "cookie-signature": { 316 | "version": "1.0.6", 317 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 318 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 319 | }, 320 | "core-util-is": { 321 | "version": "1.0.2", 322 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 323 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 324 | "dev": true 325 | }, 326 | "create-error-class": { 327 | "version": "3.0.2", 328 | "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", 329 | "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", 330 | "dev": true 331 | }, 332 | "cross-spawn": { 333 | "version": "5.1.0", 334 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 335 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 336 | "dev": true 337 | }, 338 | "crypto-random-string": { 339 | "version": "1.0.0", 340 | "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-1.0.0.tgz", 341 | "integrity": "sha1-ojD2T1aDEOFJgAmUB5DsmVRbyn4=", 342 | "dev": true 343 | }, 344 | "css": { 345 | "version": "1.0.8", 346 | "resolved": "https://registry.npmjs.org/css/-/css-1.0.8.tgz", 347 | "integrity": "sha1-k4aBHKgrzMnuf7WnMrHioxfIo+c=" 348 | }, 349 | "css-parse": { 350 | "version": "1.0.4", 351 | "resolved": "https://registry.npmjs.org/css-parse/-/css-parse-1.0.4.tgz", 352 | "integrity": "sha1-OLBQP7+dqfVOnB29pg4UXHcRe90=" 353 | }, 354 | "css-stringify": { 355 | "version": "1.0.5", 356 | "resolved": "https://registry.npmjs.org/css-stringify/-/css-stringify-1.0.5.tgz", 357 | "integrity": "sha1-sNBClG2ylTu50pKQCmy19tASIDE=" 358 | }, 359 | "debug": { 360 | "version": "2.6.8", 361 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 362 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 363 | "dependencies": { 364 | "ms": { 365 | "version": "2.0.0", 366 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 367 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 368 | } 369 | } 370 | }, 371 | "decamelize": { 372 | "version": "1.2.0", 373 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 374 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 375 | }, 376 | "deep-extend": { 377 | "version": "0.4.2", 378 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", 379 | "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", 380 | "dev": true 381 | }, 382 | "depd": { 383 | "version": "1.1.1", 384 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 385 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 386 | }, 387 | "destroy": { 388 | "version": "1.0.4", 389 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 390 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 391 | }, 392 | "dot-prop": { 393 | "version": "4.2.0", 394 | "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", 395 | "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", 396 | "dev": true 397 | }, 398 | "duplexer": { 399 | "version": "0.1.1", 400 | "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", 401 | "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", 402 | "dev": true 403 | }, 404 | "duplexer3": { 405 | "version": "0.1.4", 406 | "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", 407 | "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", 408 | "dev": true 409 | }, 410 | "ee-first": { 411 | "version": "1.1.1", 412 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 413 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 414 | }, 415 | "encodeurl": { 416 | "version": "1.0.1", 417 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", 418 | "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" 419 | }, 420 | "es6-promise": { 421 | "version": "3.3.1", 422 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", 423 | "integrity": "sha1-oIzd6EzNvzTQJ6FFG8kdS80ophM=", 424 | "dev": true 425 | }, 426 | "escape-html": { 427 | "version": "1.0.3", 428 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 429 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 430 | }, 431 | "escape-string-regexp": { 432 | "version": "1.0.5", 433 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 434 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 435 | "dev": true 436 | }, 437 | "etag": { 438 | "version": "1.7.0", 439 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", 440 | "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=" 441 | }, 442 | "event-stream": { 443 | "version": "3.3.4", 444 | "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", 445 | "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", 446 | "dev": true 447 | }, 448 | "execa": { 449 | "version": "0.7.0", 450 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 451 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", 452 | "dev": true 453 | }, 454 | "expand-brackets": { 455 | "version": "0.1.5", 456 | "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", 457 | "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", 458 | "dev": true 459 | }, 460 | "expand-range": { 461 | "version": "1.8.2", 462 | "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", 463 | "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", 464 | "dev": true 465 | }, 466 | "express": { 467 | "version": "4.14.1", 468 | "resolved": "https://registry.npmjs.org/express/-/express-4.14.1.tgz", 469 | "integrity": "sha1-ZGwjf3ZvFIwhIK/wc4F7nk1+DTM=", 470 | "dependencies": { 471 | "debug": { 472 | "version": "2.2.0", 473 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 474 | "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=" 475 | }, 476 | "ms": { 477 | "version": "0.7.1", 478 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", 479 | "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" 480 | }, 481 | "qs": { 482 | "version": "6.2.0", 483 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.0.tgz", 484 | "integrity": "sha1-O3hIwDwt7OaalSKw+ujEEm10Xzs=" 485 | } 486 | } 487 | }, 488 | "extglob": { 489 | "version": "0.3.2", 490 | "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", 491 | "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", 492 | "dev": true 493 | }, 494 | "filename-regex": { 495 | "version": "2.0.1", 496 | "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", 497 | "integrity": "sha1-wcS5vuPglyXdsQa3XB4wH+LxiyY=", 498 | "dev": true 499 | }, 500 | "fill-range": { 501 | "version": "2.2.3", 502 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.3.tgz", 503 | "integrity": "sha1-ULd9/X5Gm8dJJHCWNpn+eoSFpyM=", 504 | "dev": true 505 | }, 506 | "finalhandler": { 507 | "version": "0.5.1", 508 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.1.tgz", 509 | "integrity": "sha1-LEANjUUwk1vCMlScX6OF7Afeb80=", 510 | "dependencies": { 511 | "debug": { 512 | "version": "2.2.0", 513 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 514 | "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=" 515 | }, 516 | "ms": { 517 | "version": "0.7.1", 518 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", 519 | "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" 520 | } 521 | } 522 | }, 523 | "for-in": { 524 | "version": "1.0.2", 525 | "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", 526 | "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", 527 | "dev": true 528 | }, 529 | "for-own": { 530 | "version": "0.1.5", 531 | "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", 532 | "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", 533 | "dev": true 534 | }, 535 | "forwarded": { 536 | "version": "0.1.2", 537 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 538 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 539 | }, 540 | "fresh": { 541 | "version": "0.3.0", 542 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", 543 | "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" 544 | }, 545 | "from": { 546 | "version": "0.1.7", 547 | "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", 548 | "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", 549 | "dev": true 550 | }, 551 | "fsevents": { 552 | "version": "1.1.2", 553 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.1.2.tgz", 554 | "integrity": "sha512-Sn44E5wQW4bTHXvQmvSHwqbuiXtduD6Rrjm2ZtUEGbyrig+nUH3t/QD4M4/ZXViY556TBpRgZkHLDx3JxPwxiw==", 555 | "dev": true, 556 | "optional": true, 557 | "dependencies": { 558 | "abbrev": { 559 | "version": "1.1.0", 560 | "bundled": true, 561 | "dev": true, 562 | "optional": true 563 | }, 564 | "ajv": { 565 | "version": "4.11.8", 566 | "bundled": true, 567 | "dev": true, 568 | "optional": true 569 | }, 570 | "ansi-regex": { 571 | "version": "2.1.1", 572 | "bundled": true, 573 | "dev": true 574 | }, 575 | "aproba": { 576 | "version": "1.1.1", 577 | "bundled": true, 578 | "dev": true, 579 | "optional": true 580 | }, 581 | "are-we-there-yet": { 582 | "version": "1.1.4", 583 | "bundled": true, 584 | "dev": true, 585 | "optional": true 586 | }, 587 | "asn1": { 588 | "version": "0.2.3", 589 | "bundled": true, 590 | "dev": true, 591 | "optional": true 592 | }, 593 | "assert-plus": { 594 | "version": "0.2.0", 595 | "bundled": true, 596 | "dev": true, 597 | "optional": true 598 | }, 599 | "asynckit": { 600 | "version": "0.4.0", 601 | "bundled": true, 602 | "dev": true, 603 | "optional": true 604 | }, 605 | "aws-sign2": { 606 | "version": "0.6.0", 607 | "bundled": true, 608 | "dev": true, 609 | "optional": true 610 | }, 611 | "aws4": { 612 | "version": "1.6.0", 613 | "bundled": true, 614 | "dev": true, 615 | "optional": true 616 | }, 617 | "balanced-match": { 618 | "version": "0.4.2", 619 | "bundled": true, 620 | "dev": true 621 | }, 622 | "bcrypt-pbkdf": { 623 | "version": "1.0.1", 624 | "bundled": true, 625 | "dev": true, 626 | "optional": true 627 | }, 628 | "block-stream": { 629 | "version": "0.0.9", 630 | "bundled": true, 631 | "dev": true 632 | }, 633 | "boom": { 634 | "version": "2.10.1", 635 | "bundled": true, 636 | "dev": true 637 | }, 638 | "brace-expansion": { 639 | "version": "1.1.7", 640 | "bundled": true, 641 | "dev": true 642 | }, 643 | "buffer-shims": { 644 | "version": "1.0.0", 645 | "bundled": true, 646 | "dev": true 647 | }, 648 | "caseless": { 649 | "version": "0.12.0", 650 | "bundled": true, 651 | "dev": true, 652 | "optional": true 653 | }, 654 | "co": { 655 | "version": "4.6.0", 656 | "bundled": true, 657 | "dev": true, 658 | "optional": true 659 | }, 660 | "code-point-at": { 661 | "version": "1.1.0", 662 | "bundled": true, 663 | "dev": true 664 | }, 665 | "combined-stream": { 666 | "version": "1.0.5", 667 | "bundled": true, 668 | "dev": true 669 | }, 670 | "concat-map": { 671 | "version": "0.0.1", 672 | "bundled": true, 673 | "dev": true 674 | }, 675 | "console-control-strings": { 676 | "version": "1.1.0", 677 | "bundled": true, 678 | "dev": true 679 | }, 680 | "core-util-is": { 681 | "version": "1.0.2", 682 | "bundled": true, 683 | "dev": true 684 | }, 685 | "cryptiles": { 686 | "version": "2.0.5", 687 | "bundled": true, 688 | "dev": true, 689 | "optional": true 690 | }, 691 | "dashdash": { 692 | "version": "1.14.1", 693 | "bundled": true, 694 | "dev": true, 695 | "optional": true, 696 | "dependencies": { 697 | "assert-plus": { 698 | "version": "1.0.0", 699 | "bundled": true, 700 | "dev": true, 701 | "optional": true 702 | } 703 | } 704 | }, 705 | "debug": { 706 | "version": "2.6.8", 707 | "bundled": true, 708 | "dev": true, 709 | "optional": true 710 | }, 711 | "deep-extend": { 712 | "version": "0.4.2", 713 | "bundled": true, 714 | "dev": true, 715 | "optional": true 716 | }, 717 | "delayed-stream": { 718 | "version": "1.0.0", 719 | "bundled": true, 720 | "dev": true 721 | }, 722 | "delegates": { 723 | "version": "1.0.0", 724 | "bundled": true, 725 | "dev": true, 726 | "optional": true 727 | }, 728 | "ecc-jsbn": { 729 | "version": "0.1.1", 730 | "bundled": true, 731 | "dev": true, 732 | "optional": true 733 | }, 734 | "extend": { 735 | "version": "3.0.1", 736 | "bundled": true, 737 | "dev": true, 738 | "optional": true 739 | }, 740 | "extsprintf": { 741 | "version": "1.0.2", 742 | "bundled": true, 743 | "dev": true 744 | }, 745 | "forever-agent": { 746 | "version": "0.6.1", 747 | "bundled": true, 748 | "dev": true, 749 | "optional": true 750 | }, 751 | "form-data": { 752 | "version": "2.1.4", 753 | "bundled": true, 754 | "dev": true, 755 | "optional": true 756 | }, 757 | "fs.realpath": { 758 | "version": "1.0.0", 759 | "bundled": true, 760 | "dev": true 761 | }, 762 | "fstream": { 763 | "version": "1.0.11", 764 | "bundled": true, 765 | "dev": true 766 | }, 767 | "fstream-ignore": { 768 | "version": "1.0.5", 769 | "bundled": true, 770 | "dev": true, 771 | "optional": true 772 | }, 773 | "gauge": { 774 | "version": "2.7.4", 775 | "bundled": true, 776 | "dev": true, 777 | "optional": true 778 | }, 779 | "getpass": { 780 | "version": "0.1.7", 781 | "bundled": true, 782 | "dev": true, 783 | "optional": true, 784 | "dependencies": { 785 | "assert-plus": { 786 | "version": "1.0.0", 787 | "bundled": true, 788 | "dev": true, 789 | "optional": true 790 | } 791 | } 792 | }, 793 | "glob": { 794 | "version": "7.1.2", 795 | "bundled": true, 796 | "dev": true 797 | }, 798 | "graceful-fs": { 799 | "version": "4.1.11", 800 | "bundled": true, 801 | "dev": true 802 | }, 803 | "har-schema": { 804 | "version": "1.0.5", 805 | "bundled": true, 806 | "dev": true, 807 | "optional": true 808 | }, 809 | "har-validator": { 810 | "version": "4.2.1", 811 | "bundled": true, 812 | "dev": true, 813 | "optional": true 814 | }, 815 | "has-unicode": { 816 | "version": "2.0.1", 817 | "bundled": true, 818 | "dev": true, 819 | "optional": true 820 | }, 821 | "hawk": { 822 | "version": "3.1.3", 823 | "bundled": true, 824 | "dev": true, 825 | "optional": true 826 | }, 827 | "hoek": { 828 | "version": "2.16.3", 829 | "bundled": true, 830 | "dev": true 831 | }, 832 | "http-signature": { 833 | "version": "1.1.1", 834 | "bundled": true, 835 | "dev": true, 836 | "optional": true 837 | }, 838 | "inflight": { 839 | "version": "1.0.6", 840 | "bundled": true, 841 | "dev": true 842 | }, 843 | "inherits": { 844 | "version": "2.0.3", 845 | "bundled": true, 846 | "dev": true 847 | }, 848 | "ini": { 849 | "version": "1.3.4", 850 | "bundled": true, 851 | "dev": true, 852 | "optional": true 853 | }, 854 | "is-fullwidth-code-point": { 855 | "version": "1.0.0", 856 | "bundled": true, 857 | "dev": true 858 | }, 859 | "is-typedarray": { 860 | "version": "1.0.0", 861 | "bundled": true, 862 | "dev": true, 863 | "optional": true 864 | }, 865 | "isarray": { 866 | "version": "1.0.0", 867 | "bundled": true, 868 | "dev": true 869 | }, 870 | "isstream": { 871 | "version": "0.1.2", 872 | "bundled": true, 873 | "dev": true, 874 | "optional": true 875 | }, 876 | "jodid25519": { 877 | "version": "1.0.2", 878 | "bundled": true, 879 | "dev": true, 880 | "optional": true 881 | }, 882 | "jsbn": { 883 | "version": "0.1.1", 884 | "bundled": true, 885 | "dev": true, 886 | "optional": true 887 | }, 888 | "json-schema": { 889 | "version": "0.2.3", 890 | "bundled": true, 891 | "dev": true, 892 | "optional": true 893 | }, 894 | "json-stable-stringify": { 895 | "version": "1.0.1", 896 | "bundled": true, 897 | "dev": true, 898 | "optional": true 899 | }, 900 | "json-stringify-safe": { 901 | "version": "5.0.1", 902 | "bundled": true, 903 | "dev": true, 904 | "optional": true 905 | }, 906 | "jsonify": { 907 | "version": "0.0.0", 908 | "bundled": true, 909 | "dev": true, 910 | "optional": true 911 | }, 912 | "jsprim": { 913 | "version": "1.4.0", 914 | "bundled": true, 915 | "dev": true, 916 | "optional": true, 917 | "dependencies": { 918 | "assert-plus": { 919 | "version": "1.0.0", 920 | "bundled": true, 921 | "dev": true, 922 | "optional": true 923 | } 924 | } 925 | }, 926 | "mime-db": { 927 | "version": "1.27.0", 928 | "bundled": true, 929 | "dev": true 930 | }, 931 | "mime-types": { 932 | "version": "2.1.15", 933 | "bundled": true, 934 | "dev": true 935 | }, 936 | "minimatch": { 937 | "version": "3.0.4", 938 | "bundled": true, 939 | "dev": true 940 | }, 941 | "minimist": { 942 | "version": "0.0.8", 943 | "bundled": true, 944 | "dev": true 945 | }, 946 | "mkdirp": { 947 | "version": "0.5.1", 948 | "bundled": true, 949 | "dev": true 950 | }, 951 | "ms": { 952 | "version": "2.0.0", 953 | "bundled": true, 954 | "dev": true, 955 | "optional": true 956 | }, 957 | "node-pre-gyp": { 958 | "version": "0.6.36", 959 | "bundled": true, 960 | "dev": true, 961 | "optional": true 962 | }, 963 | "nopt": { 964 | "version": "4.0.1", 965 | "bundled": true, 966 | "dev": true, 967 | "optional": true 968 | }, 969 | "npmlog": { 970 | "version": "4.1.0", 971 | "bundled": true, 972 | "dev": true, 973 | "optional": true 974 | }, 975 | "number-is-nan": { 976 | "version": "1.0.1", 977 | "bundled": true, 978 | "dev": true 979 | }, 980 | "oauth-sign": { 981 | "version": "0.8.2", 982 | "bundled": true, 983 | "dev": true, 984 | "optional": true 985 | }, 986 | "object-assign": { 987 | "version": "4.1.1", 988 | "bundled": true, 989 | "dev": true, 990 | "optional": true 991 | }, 992 | "once": { 993 | "version": "1.4.0", 994 | "bundled": true, 995 | "dev": true 996 | }, 997 | "os-homedir": { 998 | "version": "1.0.2", 999 | "bundled": true, 1000 | "dev": true, 1001 | "optional": true 1002 | }, 1003 | "os-tmpdir": { 1004 | "version": "1.0.2", 1005 | "bundled": true, 1006 | "dev": true, 1007 | "optional": true 1008 | }, 1009 | "osenv": { 1010 | "version": "0.1.4", 1011 | "bundled": true, 1012 | "dev": true, 1013 | "optional": true 1014 | }, 1015 | "path-is-absolute": { 1016 | "version": "1.0.1", 1017 | "bundled": true, 1018 | "dev": true 1019 | }, 1020 | "performance-now": { 1021 | "version": "0.2.0", 1022 | "bundled": true, 1023 | "dev": true, 1024 | "optional": true 1025 | }, 1026 | "process-nextick-args": { 1027 | "version": "1.0.7", 1028 | "bundled": true, 1029 | "dev": true 1030 | }, 1031 | "punycode": { 1032 | "version": "1.4.1", 1033 | "bundled": true, 1034 | "dev": true, 1035 | "optional": true 1036 | }, 1037 | "qs": { 1038 | "version": "6.4.0", 1039 | "bundled": true, 1040 | "dev": true, 1041 | "optional": true 1042 | }, 1043 | "rc": { 1044 | "version": "1.2.1", 1045 | "bundled": true, 1046 | "dev": true, 1047 | "optional": true, 1048 | "dependencies": { 1049 | "minimist": { 1050 | "version": "1.2.0", 1051 | "bundled": true, 1052 | "dev": true, 1053 | "optional": true 1054 | } 1055 | } 1056 | }, 1057 | "readable-stream": { 1058 | "version": "2.2.9", 1059 | "bundled": true, 1060 | "dev": true 1061 | }, 1062 | "request": { 1063 | "version": "2.81.0", 1064 | "bundled": true, 1065 | "dev": true, 1066 | "optional": true 1067 | }, 1068 | "rimraf": { 1069 | "version": "2.6.1", 1070 | "bundled": true, 1071 | "dev": true 1072 | }, 1073 | "safe-buffer": { 1074 | "version": "5.0.1", 1075 | "bundled": true, 1076 | "dev": true 1077 | }, 1078 | "semver": { 1079 | "version": "5.3.0", 1080 | "bundled": true, 1081 | "dev": true, 1082 | "optional": true 1083 | }, 1084 | "set-blocking": { 1085 | "version": "2.0.0", 1086 | "bundled": true, 1087 | "dev": true, 1088 | "optional": true 1089 | }, 1090 | "signal-exit": { 1091 | "version": "3.0.2", 1092 | "bundled": true, 1093 | "dev": true, 1094 | "optional": true 1095 | }, 1096 | "sntp": { 1097 | "version": "1.0.9", 1098 | "bundled": true, 1099 | "dev": true, 1100 | "optional": true 1101 | }, 1102 | "sshpk": { 1103 | "version": "1.13.0", 1104 | "bundled": true, 1105 | "dev": true, 1106 | "optional": true, 1107 | "dependencies": { 1108 | "assert-plus": { 1109 | "version": "1.0.0", 1110 | "bundled": true, 1111 | "dev": true, 1112 | "optional": true 1113 | } 1114 | } 1115 | }, 1116 | "string_decoder": { 1117 | "version": "1.0.1", 1118 | "bundled": true, 1119 | "dev": true 1120 | }, 1121 | "string-width": { 1122 | "version": "1.0.2", 1123 | "bundled": true, 1124 | "dev": true 1125 | }, 1126 | "stringstream": { 1127 | "version": "0.0.5", 1128 | "bundled": true, 1129 | "dev": true, 1130 | "optional": true 1131 | }, 1132 | "strip-ansi": { 1133 | "version": "3.0.1", 1134 | "bundled": true, 1135 | "dev": true 1136 | }, 1137 | "strip-json-comments": { 1138 | "version": "2.0.1", 1139 | "bundled": true, 1140 | "dev": true, 1141 | "optional": true 1142 | }, 1143 | "tar": { 1144 | "version": "2.2.1", 1145 | "bundled": true, 1146 | "dev": true 1147 | }, 1148 | "tar-pack": { 1149 | "version": "3.4.0", 1150 | "bundled": true, 1151 | "dev": true, 1152 | "optional": true 1153 | }, 1154 | "tough-cookie": { 1155 | "version": "2.3.2", 1156 | "bundled": true, 1157 | "dev": true, 1158 | "optional": true 1159 | }, 1160 | "tunnel-agent": { 1161 | "version": "0.6.0", 1162 | "bundled": true, 1163 | "dev": true, 1164 | "optional": true 1165 | }, 1166 | "tweetnacl": { 1167 | "version": "0.14.5", 1168 | "bundled": true, 1169 | "dev": true, 1170 | "optional": true 1171 | }, 1172 | "uid-number": { 1173 | "version": "0.0.6", 1174 | "bundled": true, 1175 | "dev": true, 1176 | "optional": true 1177 | }, 1178 | "util-deprecate": { 1179 | "version": "1.0.2", 1180 | "bundled": true, 1181 | "dev": true 1182 | }, 1183 | "uuid": { 1184 | "version": "3.0.1", 1185 | "bundled": true, 1186 | "dev": true, 1187 | "optional": true 1188 | }, 1189 | "verror": { 1190 | "version": "1.3.6", 1191 | "bundled": true, 1192 | "dev": true, 1193 | "optional": true 1194 | }, 1195 | "wide-align": { 1196 | "version": "1.1.2", 1197 | "bundled": true, 1198 | "dev": true, 1199 | "optional": true 1200 | }, 1201 | "wrappy": { 1202 | "version": "1.0.2", 1203 | "bundled": true, 1204 | "dev": true 1205 | } 1206 | } 1207 | }, 1208 | "get-stream": { 1209 | "version": "3.0.0", 1210 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 1211 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", 1212 | "dev": true 1213 | }, 1214 | "glob-base": { 1215 | "version": "0.3.0", 1216 | "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", 1217 | "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", 1218 | "dev": true 1219 | }, 1220 | "glob-parent": { 1221 | "version": "2.0.0", 1222 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", 1223 | "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", 1224 | "dev": true 1225 | }, 1226 | "got": { 1227 | "version": "6.7.1", 1228 | "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", 1229 | "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", 1230 | "dev": true 1231 | }, 1232 | "graceful-fs": { 1233 | "version": "4.1.11", 1234 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 1235 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", 1236 | "dev": true 1237 | }, 1238 | "graceful-readlink": { 1239 | "version": "1.0.1", 1240 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 1241 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=" 1242 | }, 1243 | "has-ansi": { 1244 | "version": "2.0.0", 1245 | "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", 1246 | "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", 1247 | "dev": true, 1248 | "dependencies": { 1249 | "ansi-regex": { 1250 | "version": "2.1.1", 1251 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 1252 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 1253 | "dev": true 1254 | } 1255 | } 1256 | }, 1257 | "has-flag": { 1258 | "version": "2.0.0", 1259 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz", 1260 | "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=", 1261 | "dev": true 1262 | }, 1263 | "http-errors": { 1264 | "version": "1.5.1", 1265 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.5.1.tgz", 1266 | "integrity": "sha1-eIwNLB3iyBuebowBhDtrl+uSB1A=" 1267 | }, 1268 | "iconv-lite": { 1269 | "version": "0.4.15", 1270 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz", 1271 | "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=" 1272 | }, 1273 | "ignore-by-default": { 1274 | "version": "1.0.1", 1275 | "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", 1276 | "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", 1277 | "dev": true 1278 | }, 1279 | "import-lazy": { 1280 | "version": "2.1.0", 1281 | "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", 1282 | "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", 1283 | "dev": true 1284 | }, 1285 | "imurmurhash": { 1286 | "version": "0.1.4", 1287 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1288 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1289 | "dev": true 1290 | }, 1291 | "inherits": { 1292 | "version": "2.0.3", 1293 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 1294 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 1295 | }, 1296 | "ini": { 1297 | "version": "1.3.4", 1298 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz", 1299 | "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=", 1300 | "dev": true 1301 | }, 1302 | "ipaddr.js": { 1303 | "version": "1.4.0", 1304 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.4.0.tgz", 1305 | "integrity": "sha1-KWrKh4qCGBbluF0KKFqZvP9FgvA=" 1306 | }, 1307 | "is-binary-path": { 1308 | "version": "1.0.1", 1309 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", 1310 | "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", 1311 | "dev": true 1312 | }, 1313 | "is-buffer": { 1314 | "version": "1.1.5", 1315 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.5.tgz", 1316 | "integrity": "sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw=" 1317 | }, 1318 | "is-dotfile": { 1319 | "version": "1.0.3", 1320 | "resolved": "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz", 1321 | "integrity": "sha1-pqLzL/0t+wT1yiXs0Pa4PPeYoeE=", 1322 | "dev": true 1323 | }, 1324 | "is-equal-shallow": { 1325 | "version": "0.1.3", 1326 | "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", 1327 | "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", 1328 | "dev": true 1329 | }, 1330 | "is-extendable": { 1331 | "version": "0.1.1", 1332 | "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", 1333 | "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", 1334 | "dev": true 1335 | }, 1336 | "is-extglob": { 1337 | "version": "1.0.0", 1338 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", 1339 | "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", 1340 | "dev": true 1341 | }, 1342 | "is-fullwidth-code-point": { 1343 | "version": "2.0.0", 1344 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 1345 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", 1346 | "dev": true 1347 | }, 1348 | "is-glob": { 1349 | "version": "2.0.1", 1350 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", 1351 | "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", 1352 | "dev": true 1353 | }, 1354 | "is-npm": { 1355 | "version": "1.0.0", 1356 | "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-1.0.0.tgz", 1357 | "integrity": "sha1-8vtjpl5JBbQGyGBydloaTceTufQ=", 1358 | "dev": true 1359 | }, 1360 | "is-number": { 1361 | "version": "2.1.0", 1362 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", 1363 | "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", 1364 | "dev": true 1365 | }, 1366 | "is-obj": { 1367 | "version": "1.0.1", 1368 | "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", 1369 | "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", 1370 | "dev": true 1371 | }, 1372 | "is-posix-bracket": { 1373 | "version": "0.1.1", 1374 | "resolved": "https://registry.npmjs.org/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", 1375 | "integrity": "sha1-MzTceXdDaOkvAW5vvAqI9c1ua8Q=", 1376 | "dev": true 1377 | }, 1378 | "is-primitive": { 1379 | "version": "2.0.0", 1380 | "resolved": "https://registry.npmjs.org/is-primitive/-/is-primitive-2.0.0.tgz", 1381 | "integrity": "sha1-IHurkWOEmcB7Kt8kCkGochADRXU=", 1382 | "dev": true 1383 | }, 1384 | "is-promise": { 1385 | "version": "2.1.0", 1386 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 1387 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" 1388 | }, 1389 | "is-redirect": { 1390 | "version": "1.0.0", 1391 | "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", 1392 | "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", 1393 | "dev": true 1394 | }, 1395 | "is-retry-allowed": { 1396 | "version": "1.1.0", 1397 | "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz", 1398 | "integrity": "sha1-EaBgVotnM5REAz0BJaYaINVk+zQ=", 1399 | "dev": true 1400 | }, 1401 | "is-stream": { 1402 | "version": "1.1.0", 1403 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 1404 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", 1405 | "dev": true 1406 | }, 1407 | "isarray": { 1408 | "version": "1.0.0", 1409 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 1410 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 1411 | "dev": true 1412 | }, 1413 | "isexe": { 1414 | "version": "2.0.0", 1415 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1416 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", 1417 | "dev": true 1418 | }, 1419 | "isobject": { 1420 | "version": "2.1.0", 1421 | "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", 1422 | "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", 1423 | "dev": true 1424 | }, 1425 | "jade": { 1426 | "version": "1.11.0", 1427 | "resolved": "https://registry.npmjs.org/jade/-/jade-1.11.0.tgz", 1428 | "integrity": "sha1-nIDlOMEtP7lcjZu5VZ+gzAQEBf0=" 1429 | }, 1430 | "jstransformer": { 1431 | "version": "0.0.2", 1432 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-0.0.2.tgz", 1433 | "integrity": "sha1-eq4pqQPRls+glz2IXT5HlH7Ndqs=" 1434 | }, 1435 | "kind-of": { 1436 | "version": "3.2.2", 1437 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1438 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=" 1439 | }, 1440 | "latest-version": { 1441 | "version": "3.1.0", 1442 | "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-3.1.0.tgz", 1443 | "integrity": "sha1-ogU4P+oyKzO1rjsYq+4NwvNW7hU=", 1444 | "dev": true 1445 | }, 1446 | "lazy-cache": { 1447 | "version": "1.0.4", 1448 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 1449 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" 1450 | }, 1451 | "lodash._baseassign": { 1452 | "version": "3.2.0", 1453 | "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", 1454 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", 1455 | "dev": true 1456 | }, 1457 | "lodash._basecopy": { 1458 | "version": "3.0.1", 1459 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", 1460 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", 1461 | "dev": true 1462 | }, 1463 | "lodash._bindcallback": { 1464 | "version": "3.0.1", 1465 | "resolved": "https://registry.npmjs.org/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz", 1466 | "integrity": "sha1-5THCdkTPi1epnhftlbNcdIeJOS4=", 1467 | "dev": true 1468 | }, 1469 | "lodash._createassigner": { 1470 | "version": "3.1.1", 1471 | "resolved": "https://registry.npmjs.org/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz", 1472 | "integrity": "sha1-g4pbri/aymOsIt7o4Z+k5taXCxE=", 1473 | "dev": true 1474 | }, 1475 | "lodash._getnative": { 1476 | "version": "3.9.1", 1477 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", 1478 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", 1479 | "dev": true 1480 | }, 1481 | "lodash._isiterateecall": { 1482 | "version": "3.0.9", 1483 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", 1484 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", 1485 | "dev": true 1486 | }, 1487 | "lodash.assign": { 1488 | "version": "3.2.0", 1489 | "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-3.2.0.tgz", 1490 | "integrity": "sha1-POnwI0tLIiPilrj6CsH+6OvKZPo=", 1491 | "dev": true 1492 | }, 1493 | "lodash.defaults": { 1494 | "version": "3.1.2", 1495 | "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-3.1.2.tgz", 1496 | "integrity": "sha1-xzCLGNv4vJNy1wGnNJPGEZK9Liw=", 1497 | "dev": true 1498 | }, 1499 | "lodash.isarguments": { 1500 | "version": "3.1.0", 1501 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 1502 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", 1503 | "dev": true 1504 | }, 1505 | "lodash.isarray": { 1506 | "version": "3.0.4", 1507 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", 1508 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", 1509 | "dev": true 1510 | }, 1511 | "lodash.keys": { 1512 | "version": "3.1.2", 1513 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", 1514 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", 1515 | "dev": true 1516 | }, 1517 | "lodash.restparam": { 1518 | "version": "3.6.1", 1519 | "resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz", 1520 | "integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU=", 1521 | "dev": true 1522 | }, 1523 | "longest": { 1524 | "version": "1.0.1", 1525 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 1526 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" 1527 | }, 1528 | "lowercase-keys": { 1529 | "version": "1.0.0", 1530 | "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", 1531 | "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=", 1532 | "dev": true 1533 | }, 1534 | "lru-cache": { 1535 | "version": "4.1.1", 1536 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", 1537 | "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", 1538 | "dev": true 1539 | }, 1540 | "make-dir": { 1541 | "version": "1.0.0", 1542 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.0.0.tgz", 1543 | "integrity": "sha1-l6ARdR6R3YfPre9Ygy67BJNt6Xg=", 1544 | "dev": true 1545 | }, 1546 | "map-stream": { 1547 | "version": "0.1.0", 1548 | "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.1.0.tgz", 1549 | "integrity": "sha1-5WqpTEyAVaFkBKBnS3jyFffI4ZQ=", 1550 | "dev": true 1551 | }, 1552 | "media-typer": { 1553 | "version": "0.3.0", 1554 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1555 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1556 | }, 1557 | "merge-descriptors": { 1558 | "version": "1.0.1", 1559 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1560 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 1561 | }, 1562 | "methods": { 1563 | "version": "1.1.2", 1564 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1565 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1566 | }, 1567 | "micromatch": { 1568 | "version": "2.3.11", 1569 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", 1570 | "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", 1571 | "dev": true 1572 | }, 1573 | "mime": { 1574 | "version": "1.3.4", 1575 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.4.tgz", 1576 | "integrity": "sha1-EV+eO2s9rylZmDyzjxSaLUDrXVM=" 1577 | }, 1578 | "mime-db": { 1579 | "version": "1.30.0", 1580 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", 1581 | "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=" 1582 | }, 1583 | "mime-types": { 1584 | "version": "2.1.17", 1585 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", 1586 | "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=" 1587 | }, 1588 | "minimatch": { 1589 | "version": "3.0.4", 1590 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1591 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1592 | "dev": true 1593 | }, 1594 | "minimist": { 1595 | "version": "0.0.8", 1596 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1597 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1598 | }, 1599 | "mkdirp": { 1600 | "version": "0.5.1", 1601 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1602 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=" 1603 | }, 1604 | "morgan": { 1605 | "version": "1.7.0", 1606 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.7.0.tgz", 1607 | "integrity": "sha1-6xDKjlDRq+D409rVwCAdBS2YHGI=", 1608 | "dependencies": { 1609 | "debug": { 1610 | "version": "2.2.0", 1611 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 1612 | "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=" 1613 | }, 1614 | "ms": { 1615 | "version": "0.7.1", 1616 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", 1617 | "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" 1618 | } 1619 | } 1620 | }, 1621 | "ms": { 1622 | "version": "0.7.2", 1623 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 1624 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" 1625 | }, 1626 | "nan": { 1627 | "version": "2.7.0", 1628 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", 1629 | "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=", 1630 | "dev": true, 1631 | "optional": true 1632 | }, 1633 | "negotiator": { 1634 | "version": "0.6.1", 1635 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 1636 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 1637 | }, 1638 | "nodemon": { 1639 | "version": "1.12.0", 1640 | "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-1.12.0.tgz", 1641 | "integrity": "sha1-5ThUindzQKGfhVxPCHt+Uoqj/to=", 1642 | "dev": true 1643 | }, 1644 | "nopt": { 1645 | "version": "1.0.10", 1646 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", 1647 | "integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=", 1648 | "dev": true 1649 | }, 1650 | "normalize-path": { 1651 | "version": "2.1.1", 1652 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", 1653 | "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", 1654 | "dev": true 1655 | }, 1656 | "npm-run-path": { 1657 | "version": "2.0.2", 1658 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 1659 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 1660 | "dev": true 1661 | }, 1662 | "number-is-nan": { 1663 | "version": "1.0.1", 1664 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1665 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", 1666 | "dev": true 1667 | }, 1668 | "object.omit": { 1669 | "version": "2.0.1", 1670 | "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", 1671 | "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", 1672 | "dev": true 1673 | }, 1674 | "on-finished": { 1675 | "version": "2.3.0", 1676 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1677 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=" 1678 | }, 1679 | "on-headers": { 1680 | "version": "1.0.1", 1681 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", 1682 | "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" 1683 | }, 1684 | "optimist": { 1685 | "version": "0.3.7", 1686 | "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.3.7.tgz", 1687 | "integrity": "sha1-yQlBrVnkJzMokjB00s8ufLxuwNk=" 1688 | }, 1689 | "p-finally": { 1690 | "version": "1.0.0", 1691 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1692 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", 1693 | "dev": true 1694 | }, 1695 | "package-json": { 1696 | "version": "4.0.1", 1697 | "resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz", 1698 | "integrity": "sha1-iGmgQBJTZhxMTKPabCEh7VVfXu0=", 1699 | "dev": true 1700 | }, 1701 | "parse-glob": { 1702 | "version": "3.0.4", 1703 | "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", 1704 | "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", 1705 | "dev": true 1706 | }, 1707 | "parseurl": { 1708 | "version": "1.3.2", 1709 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 1710 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 1711 | }, 1712 | "path-is-absolute": { 1713 | "version": "1.0.1", 1714 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1715 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1716 | "dev": true 1717 | }, 1718 | "path-key": { 1719 | "version": "2.0.1", 1720 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1721 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", 1722 | "dev": true 1723 | }, 1724 | "path-to-regexp": { 1725 | "version": "0.1.7", 1726 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1727 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1728 | }, 1729 | "pause-stream": { 1730 | "version": "0.0.11", 1731 | "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", 1732 | "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", 1733 | "dev": true 1734 | }, 1735 | "pify": { 1736 | "version": "2.3.0", 1737 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1738 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", 1739 | "dev": true 1740 | }, 1741 | "prepend-http": { 1742 | "version": "1.0.4", 1743 | "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", 1744 | "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", 1745 | "dev": true 1746 | }, 1747 | "preserve": { 1748 | "version": "0.2.0", 1749 | "resolved": "https://registry.npmjs.org/preserve/-/preserve-0.2.0.tgz", 1750 | "integrity": "sha1-gV7R9uvGWSb4ZbMQwHE7yzMVzks=", 1751 | "dev": true 1752 | }, 1753 | "process-nextick-args": { 1754 | "version": "1.0.7", 1755 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", 1756 | "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", 1757 | "dev": true 1758 | }, 1759 | "promise": { 1760 | "version": "6.1.0", 1761 | "resolved": "https://registry.npmjs.org/promise/-/promise-6.1.0.tgz", 1762 | "integrity": "sha1-LOcp9rlLRcJoka0GAsXJDgTG7vY=" 1763 | }, 1764 | "proxy-addr": { 1765 | "version": "1.1.5", 1766 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-1.1.5.tgz", 1767 | "integrity": "sha1-ccDuOxAt4/IC87ZPYI0XP8uhqRg=" 1768 | }, 1769 | "ps-tree": { 1770 | "version": "1.1.0", 1771 | "resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.1.0.tgz", 1772 | "integrity": "sha1-tCGyQUDWID8e08dplrRCewjowBQ=", 1773 | "dev": true 1774 | }, 1775 | "pseudomap": { 1776 | "version": "1.0.2", 1777 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1778 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", 1779 | "dev": true 1780 | }, 1781 | "qs": { 1782 | "version": "6.2.1", 1783 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.2.1.tgz", 1784 | "integrity": "sha1-zgPF/wk1vB2daanxTL0Y5WjWdiU=" 1785 | }, 1786 | "randomatic": { 1787 | "version": "1.1.7", 1788 | "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-1.1.7.tgz", 1789 | "integrity": "sha512-D5JUjPyJbaJDkuAazpVnSfVkLlpeO3wDlPROTMLGKG1zMFNFRgrciKo1ltz/AzNTkqE0HzDx655QOL51N06how==", 1790 | "dev": true, 1791 | "dependencies": { 1792 | "is-number": { 1793 | "version": "3.0.0", 1794 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", 1795 | "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", 1796 | "dev": true, 1797 | "dependencies": { 1798 | "kind-of": { 1799 | "version": "3.2.2", 1800 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 1801 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 1802 | "dev": true 1803 | } 1804 | } 1805 | }, 1806 | "kind-of": { 1807 | "version": "4.0.0", 1808 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", 1809 | "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", 1810 | "dev": true 1811 | } 1812 | } 1813 | }, 1814 | "range-parser": { 1815 | "version": "1.2.0", 1816 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 1817 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 1818 | }, 1819 | "raw-body": { 1820 | "version": "2.2.0", 1821 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.2.0.tgz", 1822 | "integrity": "sha1-mUl2z2pQlqQRYoQEkvC9xdbn+5Y=" 1823 | }, 1824 | "rc": { 1825 | "version": "1.2.1", 1826 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz", 1827 | "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=", 1828 | "dev": true, 1829 | "dependencies": { 1830 | "minimist": { 1831 | "version": "1.2.0", 1832 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", 1833 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", 1834 | "dev": true 1835 | } 1836 | } 1837 | }, 1838 | "readable-stream": { 1839 | "version": "2.3.3", 1840 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz", 1841 | "integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==", 1842 | "dev": true 1843 | }, 1844 | "readdirp": { 1845 | "version": "2.1.0", 1846 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", 1847 | "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", 1848 | "dev": true 1849 | }, 1850 | "regex-cache": { 1851 | "version": "0.4.4", 1852 | "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", 1853 | "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", 1854 | "dev": true 1855 | }, 1856 | "registry-auth-token": { 1857 | "version": "3.3.1", 1858 | "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-3.3.1.tgz", 1859 | "integrity": "sha1-+w0yie4Nmtosu1KvXf5mywcNMAY=", 1860 | "dev": true 1861 | }, 1862 | "registry-url": { 1863 | "version": "3.1.0", 1864 | "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-3.1.0.tgz", 1865 | "integrity": "sha1-PU74cPc93h138M+aOBQyRE4XSUI=", 1866 | "dev": true 1867 | }, 1868 | "remove-trailing-separator": { 1869 | "version": "1.1.0", 1870 | "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", 1871 | "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", 1872 | "dev": true 1873 | }, 1874 | "repeat-element": { 1875 | "version": "1.1.2", 1876 | "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", 1877 | "integrity": "sha1-7wiaF40Ug7quTZPrmLT55OEdmQo=", 1878 | "dev": true 1879 | }, 1880 | "repeat-string": { 1881 | "version": "1.6.1", 1882 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1883 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 1884 | }, 1885 | "right-align": { 1886 | "version": "0.1.3", 1887 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 1888 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=" 1889 | }, 1890 | "safe-buffer": { 1891 | "version": "5.1.1", 1892 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1893 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", 1894 | "dev": true 1895 | }, 1896 | "semver": { 1897 | "version": "5.4.1", 1898 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.4.1.tgz", 1899 | "integrity": "sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg==", 1900 | "dev": true 1901 | }, 1902 | "semver-diff": { 1903 | "version": "2.1.0", 1904 | "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-2.1.0.tgz", 1905 | "integrity": "sha1-S7uEN8jTfksM8aaP1ybsbWRdbTY=", 1906 | "dev": true 1907 | }, 1908 | "send": { 1909 | "version": "0.14.2", 1910 | "resolved": "https://registry.npmjs.org/send/-/send-0.14.2.tgz", 1911 | "integrity": "sha1-ObBDiz9RC+Xcb2Z6EfcWiTaM3u8=", 1912 | "dependencies": { 1913 | "debug": { 1914 | "version": "2.2.0", 1915 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.2.0.tgz", 1916 | "integrity": "sha1-+HBX6ZWxofauaklgZkE3vFbwOdo=", 1917 | "dependencies": { 1918 | "ms": { 1919 | "version": "0.7.1", 1920 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.1.tgz", 1921 | "integrity": "sha1-nNE8A62/8ltl7/3nzoZO6VIBcJg=" 1922 | } 1923 | } 1924 | } 1925 | } 1926 | }, 1927 | "serve-favicon": { 1928 | "version": "2.3.2", 1929 | "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz", 1930 | "integrity": "sha1-3UGeJo3gEqtysxnTN/IQUBP5OB8=" 1931 | }, 1932 | "serve-static": { 1933 | "version": "1.11.2", 1934 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.11.2.tgz", 1935 | "integrity": "sha1-LPmIm9RDWjIMw2iVyapXvWYuasc=" 1936 | }, 1937 | "set-immediate-shim": { 1938 | "version": "1.0.1", 1939 | "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", 1940 | "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", 1941 | "dev": true 1942 | }, 1943 | "setprototypeof": { 1944 | "version": "1.0.2", 1945 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.2.tgz", 1946 | "integrity": "sha1-gaVSFB7BBLiOic44MQOtXGZWTQg=" 1947 | }, 1948 | "shebang-command": { 1949 | "version": "1.2.0", 1950 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1951 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1952 | "dev": true 1953 | }, 1954 | "shebang-regex": { 1955 | "version": "1.0.0", 1956 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1957 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", 1958 | "dev": true 1959 | }, 1960 | "signal-exit": { 1961 | "version": "3.0.2", 1962 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1963 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", 1964 | "dev": true 1965 | }, 1966 | "source-map": { 1967 | "version": "0.4.4", 1968 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", 1969 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=" 1970 | }, 1971 | "split": { 1972 | "version": "0.3.3", 1973 | "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", 1974 | "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", 1975 | "dev": true 1976 | }, 1977 | "statuses": { 1978 | "version": "1.3.1", 1979 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.3.1.tgz", 1980 | "integrity": "sha1-+vUbnrdKrvOzrPStX2Gr8ky3uT4=" 1981 | }, 1982 | "stream-combiner": { 1983 | "version": "0.0.4", 1984 | "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", 1985 | "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", 1986 | "dev": true 1987 | }, 1988 | "string_decoder": { 1989 | "version": "1.0.3", 1990 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 1991 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 1992 | "dev": true 1993 | }, 1994 | "string-width": { 1995 | "version": "2.1.1", 1996 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 1997 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 1998 | "dev": true 1999 | }, 2000 | "strip-ansi": { 2001 | "version": "4.0.0", 2002 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2003 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2004 | "dev": true 2005 | }, 2006 | "strip-eof": { 2007 | "version": "1.0.0", 2008 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 2009 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", 2010 | "dev": true 2011 | }, 2012 | "strip-json-comments": { 2013 | "version": "2.0.1", 2014 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", 2015 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", 2016 | "dev": true 2017 | }, 2018 | "supports-color": { 2019 | "version": "4.4.0", 2020 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.4.0.tgz", 2021 | "integrity": "sha512-rKC3+DyXWgK0ZLKwmRsrkyHVZAjNkfzeehuFWdGGcqGDTZFH73+RH6S/RDAAxl9GusSjZSUWYLmT9N5pzXFOXQ==", 2022 | "dev": true 2023 | }, 2024 | "term-size": { 2025 | "version": "1.2.0", 2026 | "resolved": "https://registry.npmjs.org/term-size/-/term-size-1.2.0.tgz", 2027 | "integrity": "sha1-RYuDiH8oj8Vtb/+/rSYuJmOO+mk=", 2028 | "dev": true 2029 | }, 2030 | "through": { 2031 | "version": "2.3.8", 2032 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2033 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", 2034 | "dev": true 2035 | }, 2036 | "timed-out": { 2037 | "version": "4.0.1", 2038 | "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", 2039 | "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=", 2040 | "dev": true 2041 | }, 2042 | "touch": { 2043 | "version": "3.1.0", 2044 | "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", 2045 | "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", 2046 | "dev": true 2047 | }, 2048 | "transformers": { 2049 | "version": "2.1.0", 2050 | "resolved": "https://registry.npmjs.org/transformers/-/transformers-2.1.0.tgz", 2051 | "integrity": "sha1-XSPLNVYd2F3Gf7hIIwm0fVPM6ac=", 2052 | "dependencies": { 2053 | "is-promise": { 2054 | "version": "1.0.1", 2055 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-1.0.1.tgz", 2056 | "integrity": "sha1-MVc3YcBX4zwukaq56W2gjO++duU=" 2057 | }, 2058 | "promise": { 2059 | "version": "2.0.0", 2060 | "resolved": "https://registry.npmjs.org/promise/-/promise-2.0.0.tgz", 2061 | "integrity": "sha1-RmSKqdYFr10ucMMCS/WUNtoCuA4=" 2062 | }, 2063 | "source-map": { 2064 | "version": "0.1.43", 2065 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", 2066 | "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=" 2067 | }, 2068 | "uglify-js": { 2069 | "version": "2.2.5", 2070 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.2.5.tgz", 2071 | "integrity": "sha1-puAqcNg5eSuXgEiLe4sYTAlcmcc=" 2072 | } 2073 | } 2074 | }, 2075 | "type-is": { 2076 | "version": "1.6.15", 2077 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.15.tgz", 2078 | "integrity": "sha1-yrEPtJCeRByChC6v4a1kbIGARBA=" 2079 | }, 2080 | "uglify-js": { 2081 | "version": "2.8.29", 2082 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 2083 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 2084 | "dependencies": { 2085 | "source-map": { 2086 | "version": "0.5.7", 2087 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 2088 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 2089 | } 2090 | } 2091 | }, 2092 | "uglify-to-browserify": { 2093 | "version": "1.0.2", 2094 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 2095 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 2096 | "optional": true 2097 | }, 2098 | "undefsafe": { 2099 | "version": "0.0.3", 2100 | "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-0.0.3.tgz", 2101 | "integrity": "sha1-7Mo6A+VrmvFzhbqsgSrIO5lKli8=", 2102 | "dev": true 2103 | }, 2104 | "unique-string": { 2105 | "version": "1.0.0", 2106 | "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-1.0.0.tgz", 2107 | "integrity": "sha1-nhBXzKhRq7kzmPizOuGHuZyuwRo=", 2108 | "dev": true 2109 | }, 2110 | "unpipe": { 2111 | "version": "1.0.0", 2112 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2113 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 2114 | }, 2115 | "unzip-response": { 2116 | "version": "2.0.1", 2117 | "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", 2118 | "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", 2119 | "dev": true 2120 | }, 2121 | "update-notifier": { 2122 | "version": "2.2.0", 2123 | "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-2.2.0.tgz", 2124 | "integrity": "sha1-G1g3z5DAc22IYncytmHBOPht5y8=", 2125 | "dev": true 2126 | }, 2127 | "url-parse-lax": { 2128 | "version": "1.0.0", 2129 | "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", 2130 | "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", 2131 | "dev": true 2132 | }, 2133 | "util-deprecate": { 2134 | "version": "1.0.2", 2135 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2136 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2137 | "dev": true 2138 | }, 2139 | "utils-merge": { 2140 | "version": "1.0.0", 2141 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.0.tgz", 2142 | "integrity": "sha1-ApT7kiu5N1FTVBxPcJYjHyh8ivg=" 2143 | }, 2144 | "vary": { 2145 | "version": "1.1.1", 2146 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.1.tgz", 2147 | "integrity": "sha1-Z1Neu2lMHVIldFeYRmUyP1h+jTc=" 2148 | }, 2149 | "void-elements": { 2150 | "version": "2.0.1", 2151 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", 2152 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" 2153 | }, 2154 | "which": { 2155 | "version": "1.3.0", 2156 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", 2157 | "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", 2158 | "dev": true 2159 | }, 2160 | "widest-line": { 2161 | "version": "1.0.0", 2162 | "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-1.0.0.tgz", 2163 | "integrity": "sha1-DAnIXCqUaD0Nfq+O4JfVZL8OEFw=", 2164 | "dev": true, 2165 | "dependencies": { 2166 | "ansi-regex": { 2167 | "version": "2.1.1", 2168 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 2169 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", 2170 | "dev": true 2171 | }, 2172 | "is-fullwidth-code-point": { 2173 | "version": "1.0.0", 2174 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 2175 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 2176 | "dev": true 2177 | }, 2178 | "string-width": { 2179 | "version": "1.0.2", 2180 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 2181 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 2182 | "dev": true 2183 | }, 2184 | "strip-ansi": { 2185 | "version": "3.0.1", 2186 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2187 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2188 | "dev": true 2189 | } 2190 | } 2191 | }, 2192 | "window-size": { 2193 | "version": "0.1.0", 2194 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 2195 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" 2196 | }, 2197 | "with": { 2198 | "version": "4.0.3", 2199 | "resolved": "https://registry.npmjs.org/with/-/with-4.0.3.tgz", 2200 | "integrity": "sha1-7v0VTp550sjTQXtkeo8U2f7M4U4=", 2201 | "dependencies": { 2202 | "acorn": { 2203 | "version": "1.2.2", 2204 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-1.2.2.tgz", 2205 | "integrity": "sha1-yM4n3grMdtiW0rH6099YjZ6C8BQ=" 2206 | } 2207 | } 2208 | }, 2209 | "wordwrap": { 2210 | "version": "0.0.3", 2211 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", 2212 | "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=" 2213 | }, 2214 | "write-file-atomic": { 2215 | "version": "2.3.0", 2216 | "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.3.0.tgz", 2217 | "integrity": "sha512-xuPeK4OdjWqtfi59ylvVL0Yn35SF3zgcAcv7rBPFHVaEapaDr4GdGgm3j7ckTwH9wHL7fGmgfAnb0+THrHb8tA==", 2218 | "dev": true 2219 | }, 2220 | "xdg-basedir": { 2221 | "version": "3.0.0", 2222 | "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-3.0.0.tgz", 2223 | "integrity": "sha1-SWsswQnsqNus/i3HK2A8F8WHCtQ=", 2224 | "dev": true 2225 | }, 2226 | "yallist": { 2227 | "version": "2.1.2", 2228 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 2229 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", 2230 | "dev": true 2231 | }, 2232 | "yargs": { 2233 | "version": "3.10.0", 2234 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 2235 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=" 2236 | } 2237 | } 2238 | } 2239 | -------------------------------------------------------------------------------- /backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "backend", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "nodemon ./bin/www localhost 3000" 7 | }, 8 | "dependencies": { 9 | "body-parser": "^1.16.1", 10 | "connect-history-api-fallback": "^1.3.0", 11 | "cookie-parser": "^1.4.3", 12 | "debug": "^2.6.8", 13 | "express": "^4.14.1", 14 | "jade": "^1.11.0", 15 | "morgan": "^1.7.0", 16 | "serve-favicon": "^2.3.2" 17 | }, 18 | "devDependencies": { 19 | "nodemon": "^1.11.0" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /backend/public/index.html: -------------------------------------------------------------------------------- 1 | frontend
-------------------------------------------------------------------------------- /backend/public/static/css/app.1031e26cd03b4ff9f32a60d1d2af704d.css: -------------------------------------------------------------------------------- 1 | 2 | #app { 3 | font-family: 'Avenir', Helvetica, Arial, sans-serif; 4 | -webkit-font-smoothing: antialiased; 5 | -moz-osx-font-smoothing: grayscale; 6 | color: #2c3e50; 7 | } 8 | * { 9 | box-sizing: border-box; 10 | } 11 | 12 | .poster[data-v-4736f89c] { 13 | width: 185px; 14 | vertical-align: middle; 15 | } 16 | .movie[data-v-4736f89c] { 17 | display: inline-block; 18 | padding: 10px; 19 | text-align: center; 20 | } 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | /*# sourceMappingURL=app.1031e26cd03b4ff9f32a60d1d2af704d.css.map*/ -------------------------------------------------------------------------------- /backend/public/static/css/app.1031e26cd03b4ff9f32a60d1d2af704d.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["webpack:///webpack:///src/App.vue","webpack:///webpack:///src/components/IndexPage.vue"],"names":[],"mappings":";AACA;EACE,oDAAoD;EACpD,oCAAoC;EACpC,mCAAmC;EACnC,eAAe;CAChB;AACD;EACE,uBAAuB;CACxB;;ACRD;EACE,aAAa;EACb,uBAAuB;CACxB;AACD;EACE,sBAAsB;EACtB,cAAc;EACd,mBAAmB;CACpB","file":"static/css/app.1031e26cd03b4ff9f32a60d1d2af704d.css","sourcesContent":["\n#app {\n font-family: 'Avenir', Helvetica, Arial, sans-serif;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n color: #2c3e50;\n}\n* {\n box-sizing: border-box;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/App.vue","\n.poster[data-v-4736f89c] {\n width: 185px;\n vertical-align: middle;\n}\n.movie[data-v-4736f89c] {\n display: inline-block;\n padding: 10px;\n text-align: center;\n}\n\n\n\n// WEBPACK FOOTER //\n// webpack:///src/components/IndexPage.vue"],"sourceRoot":""} -------------------------------------------------------------------------------- /backend/public/static/js/app.8ce01e45ecc11eedafe3.js: -------------------------------------------------------------------------------- 1 | webpackJsonp([1,2],[,,,,,,,,,,function(t,e,n){"use strict";var r=n(3),i=n.n(r),a=n(41),o=n.n(a),s=n(36),u=n.n(s),c=n(37),p=n.n(c);i.a.use(o.a),e.a=new o.a({mode:"history",routes:[{path:"/",name:"index",component:u.a},{path:"/:id",name:"show",component:p.a}]})},function(t,e,n){n(32);var r=n(2)(n(29),n(38),null,null);t.exports=r.exports},,,,,,,,,,,,,,,,,,function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={name:"app"}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={created:function(){var t=this;this.$http.get("/api/movies").then(function(e){t.movies=e.data})},name:"hello",data:function(){return{movies:[]}}}},function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.default={created:function(){var t=this,e=this.$route.params.id;this.$http.get("/api/movies/"+e).then(function(e){t.movie=e.data})},data:function(){return{movie:{}}}}},function(t,e){},function(t,e){},function(t,e){},,function(t,e,n){n(33);var r=n(2)(n(30),n(39),"data-v-4736f89c",null);t.exports=r.exports},function(t,e,n){n(34);var r=n(2)(n(31),n(40),null,null);t.exports=r.exports},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{attrs:{id:"app"}},[n("router-view")],1)},staticRenderFns:[]}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",{staticClass:"movies"},[n("h1",[t._v("영화 목록")]),t._v(" "),t._l(t.movies,function(e){return n("div",{staticClass:"movie"},[n("img",{staticClass:"poster",attrs:{src:e.poster}}),t._v(" "),n("div",[n("strong",[t._v(t._s(e.name))]),t._v(", "),n("i",[t._v(t._s(e.director))]),t._v(" ["+t._s(e.year)+"]\n "),n("router-link",{attrs:{to:{name:"show",params:{id:e.id}}}},[t._v("더보기")])],1)])})],2)},staticRenderFns:[]}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement,n=t._self._c||e;return n("div",[n("h1",[t._v("상세 내용")]),t._v("\n "+t._s(t.movie)+"\n")])},staticRenderFns:[]}},,,,function(t,e,n){"use strict";Object.defineProperty(e,"__esModule",{value:!0});var r=n(3),i=n.n(r),a=n(11),o=n.n(a),s=n(10),u=n(9),c=n.n(u);i.a.prototype.$http=c.a,new i.a({el:"#app",router:s.a,template:"",components:{App:o.a}})}],[44]); -------------------------------------------------------------------------------- /backend/public/static/js/manifest.08b0c38290b77c2dbb38.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var n=window.webpackJsonp;window.webpackJsonp=function(t,c,a){for(var i,u,f,s=0,l=[];s A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | 20 | # run unit tests 21 | npm run unit 22 | 23 | # run e2e tests 24 | npm run e2e 25 | 26 | # run all tests 27 | npm test 28 | ``` 29 | 30 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 31 | -------------------------------------------------------------------------------- /frontend/build/build.js: -------------------------------------------------------------------------------- 1 | // https://github.com/shelljs/shelljs 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | var ora = require('ora') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var shell = require('shelljs') 10 | var webpack = require('webpack') 11 | var config = require('../config') 12 | var webpackConfig = require('./webpack.prod.conf') 13 | 14 | var spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory) 18 | shell.rm('-rf', assetsPath) 19 | shell.mkdir('-p', assetsPath) 20 | shell.config.silent = true 21 | shell.cp('-R', 'static/*', assetsPath) 22 | shell.config.silent = false 23 | 24 | webpack(webpackConfig, function (err, stats) { 25 | spinner.stop() 26 | if (err) throw err 27 | process.stdout.write(stats.toString({ 28 | colors: true, 29 | modules: false, 30 | children: false, 31 | chunks: false, 32 | chunkModules: false 33 | }) + '\n\n') 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | -------------------------------------------------------------------------------- /frontend/build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | { 16 | name: 'npm', 17 | currentVersion: exec('npm --version'), 18 | versionRequirement: packageConfig.engines.npm 19 | } 20 | ] 21 | 22 | module.exports = function () { 23 | var warnings = [] 24 | for (var i = 0; i < versionRequirements.length; i++) { 25 | var mod = versionRequirements[i] 26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 27 | warnings.push(mod.name + ': ' + 28 | chalk.red(mod.currentVersion) + ' should be ' + 29 | chalk.green(mod.versionRequirement) 30 | ) 31 | } 32 | } 33 | 34 | if (warnings.length) { 35 | console.log('') 36 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 37 | console.log() 38 | for (var i = 0; i < warnings.length; i++) { 39 | var warning = warnings[i] 40 | console.log(' ' + warning) 41 | } 42 | console.log() 43 | process.exit(1) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /frontend/build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /frontend/build/dev-server.js: -------------------------------------------------------------------------------- 1 | require('./check-versions')() 2 | 3 | var config = require('../config') 4 | if (!process.env.NODE_ENV) { 5 | process.env.NODE_ENV = JSON.parse(config.dev.env.NODE_ENV) 6 | } 7 | 8 | var opn = require('opn') 9 | var path = require('path') 10 | var express = require('express') 11 | var webpack = require('webpack') 12 | var proxyMiddleware = require('http-proxy-middleware') 13 | var webpackConfig = process.env.NODE_ENV === 'testing' 14 | ? require('./webpack.prod.conf') 15 | : require('./webpack.dev.conf') 16 | 17 | // default port where dev server listens for incoming traffic 18 | var port = process.env.PORT || config.dev.port 19 | // automatically open browser, if not set will be false 20 | var autoOpenBrowser = !!config.dev.autoOpenBrowser 21 | // Define HTTP proxies to your custom API backend 22 | // https://github.com/chimurai/http-proxy-middleware 23 | var proxyTable = config.dev.proxyTable 24 | 25 | var app = express() 26 | var compiler = webpack(webpackConfig) 27 | 28 | var devMiddleware = require('webpack-dev-middleware')(compiler, { 29 | publicPath: webpackConfig.output.publicPath, 30 | quiet: true 31 | }) 32 | 33 | var hotMiddleware = require('webpack-hot-middleware')(compiler, { 34 | log: () => {} 35 | }) 36 | // force page reload when html-webpack-plugin template changes 37 | compiler.plugin('compilation', function (compilation) { 38 | compilation.plugin('html-webpack-plugin-after-emit', function (data, cb) { 39 | hotMiddleware.publish({ action: 'reload' }) 40 | cb() 41 | }) 42 | }) 43 | 44 | // proxy api requests 45 | Object.keys(proxyTable).forEach(function (context) { 46 | var options = proxyTable[context] 47 | if (typeof options === 'string') { 48 | options = { target: options } 49 | } 50 | app.use(proxyMiddleware(options.filter || context, options)) 51 | }) 52 | 53 | // handle fallback for HTML5 history API 54 | app.use(require('connect-history-api-fallback')()) 55 | 56 | // serve webpack bundle output 57 | app.use(devMiddleware) 58 | 59 | // enable hot-reload and state-preserving 60 | // compilation error display 61 | app.use(hotMiddleware) 62 | 63 | // serve pure static assets 64 | var staticPath = path.posix.join(config.dev.assetsPublicPath, config.dev.assetsSubDirectory) 65 | app.use(staticPath, express.static('./static')) 66 | 67 | var uri = 'http://localhost:' + port 68 | 69 | devMiddleware.waitUntilValid(function () { 70 | console.log('> Listening at ' + uri + '\n') 71 | }) 72 | 73 | module.exports = app.listen(port, function (err) { 74 | if (err) { 75 | console.log(err) 76 | return 77 | } 78 | 79 | // when env is testing, don't need open it 80 | if (autoOpenBrowser && process.env.NODE_ENV !== 'testing') { 81 | opn(uri) 82 | } 83 | }) 84 | -------------------------------------------------------------------------------- /frontend/build/utils.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var config = require('../config') 3 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 4 | 5 | exports.assetsPath = function (_path) { 6 | var assetsSubDirectory = process.env.NODE_ENV === 'production' 7 | ? config.build.assetsSubDirectory 8 | : config.dev.assetsSubDirectory 9 | return path.posix.join(assetsSubDirectory, _path) 10 | } 11 | 12 | exports.cssLoaders = function (options) { 13 | options = options || {} 14 | // generate loader string to be used with extract text plugin 15 | function generateLoaders(loaders) { 16 | var sourceLoader = loaders.map(function (loader) { 17 | var extraParamChar 18 | if (/\?/.test(loader)) { 19 | loader = loader.replace(/\?/, '-loader?') 20 | extraParamChar = '&' 21 | } else { 22 | loader = loader + '-loader' 23 | extraParamChar = '?' 24 | } 25 | return loader + (options.sourceMap ? extraParamChar + 'sourceMap' : '') 26 | }).join('!') 27 | 28 | // Extract CSS when that option is specified 29 | // (which is the case during production build) 30 | if (options.extract) { 31 | return ExtractTextPlugin.extract({ 32 | loader: sourceLoader, 33 | fallbackLoader: 'vue-style-loader' 34 | }) 35 | } else { 36 | return ['vue-style-loader', sourceLoader].join('!') 37 | } 38 | } 39 | 40 | // http://vuejs.github.io/vue-loader/en/configurations/extract-css.html 41 | return { 42 | css: generateLoaders(['css']), 43 | postcss: generateLoaders(['css']), 44 | less: generateLoaders(['css', 'less']), 45 | sass: generateLoaders(['css', 'sass?indentedSyntax']), 46 | scss: generateLoaders(['css', 'sass']), 47 | stylus: generateLoaders(['css', 'stylus']), 48 | styl: generateLoaders(['css', 'stylus']) 49 | } 50 | } 51 | 52 | // Generate loaders for standalone style files (outside of .vue) 53 | exports.styleLoaders = function (options) { 54 | var output = [] 55 | var loaders = exports.cssLoaders(options) 56 | for (var extension in loaders) { 57 | var loader = loaders[extension] 58 | output.push({ 59 | test: new RegExp('\\.' + extension + '$'), 60 | loader: loader 61 | }) 62 | } 63 | return output 64 | } 65 | -------------------------------------------------------------------------------- /frontend/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }), 12 | postcss: [ 13 | require('autoprefixer')({ 14 | browsers: ['last 2 versions'] 15 | }) 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /frontend/build/webpack.base.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var config = require('../config') 4 | var vueLoaderConfig = require('./vue-loader.conf') 5 | var eslintFriendlyFormatter = require('eslint-friendly-formatter') 6 | 7 | function resolve (dir) { 8 | return path.join(__dirname, '..', dir) 9 | } 10 | 11 | module.exports = { 12 | entry: { 13 | app: './src/main.js' 14 | }, 15 | output: { 16 | path: config.build.assetsRoot, 17 | filename: '[name].js', 18 | publicPath: process.env.NODE_ENV === 'production' 19 | ? config.build.assetsPublicPath 20 | : config.dev.assetsPublicPath 21 | }, 22 | resolve: { 23 | extensions: ['.js', '.vue', '.json'], 24 | modules: [ 25 | resolve('src'), 26 | resolve('node_modules') 27 | ], 28 | alias: { 29 | 'vue$': 'vue/dist/vue.common.js', 30 | 'src': resolve('src'), 31 | 'assets': resolve('src/assets'), 32 | 'components': resolve('src/components') 33 | } 34 | }, 35 | module: { 36 | rules: [ 37 | { 38 | test: /\.(js|vue)$/, 39 | loader: 'eslint-loader', 40 | enforce: "pre", 41 | include: [resolve('src'), resolve('test')], 42 | options: { 43 | formatter: eslintFriendlyFormatter 44 | } 45 | }, 46 | { 47 | test: /\.vue$/, 48 | loader: 'vue-loader', 49 | options: vueLoaderConfig 50 | }, 51 | { 52 | test: /\.js$/, 53 | loader: 'babel-loader', 54 | include: [resolve('src'), resolve('test')] 55 | }, 56 | { 57 | test: /\.json$/, 58 | loader: 'json-loader' 59 | }, 60 | { 61 | test: /\.(png|jpe?g|gif|svg)(\?.*)?$/, 62 | loader: 'url-loader', 63 | query: { 64 | limit: 10000, 65 | name: utils.assetsPath('img/[name].[hash:7].[ext]') 66 | } 67 | }, 68 | { 69 | test: /\.(woff2?|eot|ttf|otf)(\?.*)?$/, 70 | loader: 'url-loader', 71 | query: { 72 | limit: 10000, 73 | name: utils.assetsPath('fonts/[name].[hash:7].[ext]') 74 | } 75 | } 76 | ] 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /frontend/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // add hot-reload related code to entry chunks 10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 12 | }) 13 | 14 | module.exports = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: '#cheap-module-eval-source-map', 20 | plugins: [ 21 | new webpack.DefinePlugin({ 22 | 'process.env': config.dev.env 23 | }), 24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoEmitOnErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }), 33 | new FriendlyErrorsPlugin() 34 | ] 35 | }) 36 | -------------------------------------------------------------------------------- /frontend/build/webpack.prod.conf.js: -------------------------------------------------------------------------------- 1 | var path = require('path') 2 | var utils = require('./utils') 3 | var webpack = require('webpack') 4 | var config = require('../config') 5 | var merge = require('webpack-merge') 6 | var baseWebpackConfig = require('./webpack.base.conf') 7 | var HtmlWebpackPlugin = require('html-webpack-plugin') 8 | var ExtractTextPlugin = require('extract-text-webpack-plugin') 9 | var env = process.env.NODE_ENV === 'testing' 10 | ? require('../config/test.env') 11 | : config.build.env 12 | 13 | var webpackConfig = merge(baseWebpackConfig, { 14 | module: { 15 | rules: utils.styleLoaders({ 16 | sourceMap: config.build.productionSourceMap, 17 | extract: true 18 | }) 19 | }, 20 | devtool: config.build.productionSourceMap ? '#source-map' : false, 21 | output: { 22 | path: config.build.assetsRoot, 23 | filename: utils.assetsPath('js/[name].[chunkhash].js'), 24 | chunkFilename: utils.assetsPath('js/[id].[chunkhash].js') 25 | }, 26 | plugins: [ 27 | // http://vuejs.github.io/vue-loader/en/workflow/production.html 28 | new webpack.DefinePlugin({ 29 | 'process.env': env 30 | }), 31 | new webpack.optimize.UglifyJsPlugin({ 32 | compress: { 33 | warnings: false 34 | } 35 | }), 36 | // extract css into its own file 37 | new ExtractTextPlugin(utils.assetsPath('css/[name].[contenthash].css')), 38 | // generate dist index.html with correct asset hash for caching. 39 | // you can customize output by editing /index.html 40 | // see https://github.com/ampedandwired/html-webpack-plugin 41 | new HtmlWebpackPlugin({ 42 | filename: process.env.NODE_ENV === 'testing' 43 | ? 'index.html' 44 | : config.build.index, 45 | template: 'index.html', 46 | inject: true, 47 | minify: { 48 | removeComments: true, 49 | collapseWhitespace: true, 50 | removeAttributeQuotes: true 51 | // more options: 52 | // https://github.com/kangax/html-minifier#options-quick-reference 53 | }, 54 | // necessary to consistently work with multiple chunks via CommonsChunkPlugin 55 | chunksSortMode: 'dependency' 56 | }), 57 | // split vendor js into its own file 58 | new webpack.optimize.CommonsChunkPlugin({ 59 | name: 'vendor', 60 | minChunks: function (module, count) { 61 | // any required modules inside node_modules are extracted to vendor 62 | return ( 63 | module.resource && 64 | /\.js$/.test(module.resource) && 65 | module.resource.indexOf( 66 | path.join(__dirname, '../node_modules') 67 | ) === 0 68 | ) 69 | } 70 | }), 71 | // extract webpack runtime and module manifest to its own file in order to 72 | // prevent vendor hash from being updated whenever app bundle is updated 73 | new webpack.optimize.CommonsChunkPlugin({ 74 | name: 'manifest', 75 | chunks: ['vendor'] 76 | }) 77 | ] 78 | }) 79 | 80 | if (config.build.productionGzip) { 81 | var CompressionWebpackPlugin = require('compression-webpack-plugin') 82 | 83 | webpackConfig.plugins.push( 84 | new CompressionWebpackPlugin({ 85 | asset: '[path].gz[query]', 86 | algorithm: 'gzip', 87 | test: new RegExp( 88 | '\\.(' + 89 | config.build.productionGzipExtensions.join('|') + 90 | ')$' 91 | ), 92 | threshold: 10240, 93 | minRatio: 0.8 94 | }) 95 | ) 96 | } 97 | 98 | if (config.build.bundleAnalyzerReport) { 99 | var BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin 100 | webpackConfig.plugins.push(new BundleAnalyzerPlugin()) 101 | } 102 | 103 | module.exports = webpackConfig 104 | -------------------------------------------------------------------------------- /frontend/build/webpack.test.conf.js: -------------------------------------------------------------------------------- 1 | // This is the webpack config used for unit tests. 2 | 3 | var utils = require('./utils') 4 | var webpack = require('webpack') 5 | var merge = require('webpack-merge') 6 | var baseConfig = require('./webpack.base.conf') 7 | 8 | var webpackConfig = merge(baseConfig, { 9 | // use inline sourcemap for karma-sourcemap-loader 10 | module: { 11 | rules: utils.styleLoaders() 12 | }, 13 | devtool: '#inline-source-map', 14 | plugins: [ 15 | new webpack.DefinePlugin({ 16 | 'process.env': require('../config/test.env') 17 | }) 18 | ] 19 | }) 20 | 21 | // no need for app entry during tests 22 | delete webpackConfig.entry 23 | 24 | module.exports = webpackConfig 25 | -------------------------------------------------------------------------------- /frontend/config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /frontend/config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../../backend/public/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../../backend/public'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8080, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: { 31 | '/api': { 32 | target: 'http://localhost:3000/api', 33 | changeOrigin: true, 34 | pathRewrite: { 35 | '^/api': '' 36 | } 37 | } 38 | }, 39 | // CSS Sourcemaps off by default because relative paths are "buggy" 40 | // with this option, according to the CSS-Loader README 41 | // (https://github.com/webpack/css-loader#sourcemaps) 42 | // In our experience, they generally work as expected, 43 | // just be aware of this issue when enabling this option. 44 | cssSourceMap: false 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /frontend/config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /frontend/config/test.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var devEnv = require('./dev.env') 3 | 4 | module.exports = merge(devEnv, { 5 | NODE_ENV: '"testing"' 6 | }) 7 | -------------------------------------------------------------------------------- /frontend/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | frontend 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "frontend", 3 | "version": "1.0.0", 4 | "description": "A Vue.js project", 5 | "author": "ChangJoo Park ", 6 | "private": true, 7 | "scripts": { 8 | "dev": "node build/dev-server.js", 9 | "build": "node build/build.js", 10 | "unit": "cross-env BABEL_ENV=test karma start test/unit/karma.conf.js --single-run", 11 | "e2e": "node test/e2e/runner.js", 12 | "test": "npm run unit && npm run e2e", 13 | "lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs" 14 | }, 15 | "dependencies": { 16 | "axios": "^0.15.3", 17 | "vue": "^2.4.4", 18 | "vue-router": "^2.7.0" 19 | }, 20 | "devDependencies": { 21 | "autoprefixer": "^6.7.2", 22 | "babel-core": "^6.22.1", 23 | "babel-eslint": "^7.1.1", 24 | "babel-loader": "^6.2.10", 25 | "babel-plugin-transform-runtime": "^6.22.0", 26 | "babel-preset-es2015": "^6.22.0", 27 | "babel-preset-stage-2": "^6.22.0", 28 | "babel-register": "^6.22.0", 29 | "chalk": "^1.1.3", 30 | "connect-history-api-fallback": "^1.3.0", 31 | "css-loader": "^0.26.1", 32 | "eslint": "^3.14.1", 33 | "eslint-friendly-formatter": "^2.0.7", 34 | "eslint-loader": "^1.6.1", 35 | "eslint-plugin-html": "^2.0.0", 36 | "eslint-config-standard": "^6.2.1", 37 | "eslint-plugin-promise": "^3.4.0", 38 | "eslint-plugin-standard": "^2.0.1", 39 | "eventsource-polyfill": "^0.9.6", 40 | "express": "^4.14.1", 41 | "extract-text-webpack-plugin": "^2.0.0-rc.2", 42 | "file-loader": "^0.10.0", 43 | "friendly-errors-webpack-plugin": "^1.1.3", 44 | "function-bind": "^1.1.0", 45 | "html-webpack-plugin": "^2.28.0", 46 | "http-proxy-middleware": "^0.17.3", 47 | "json-loader": "^0.5.4", 48 | "webpack-bundle-analyzer": "^2.2.1", 49 | "cross-env": "^3.1.4", 50 | "karma": "^1.4.1", 51 | "karma-coverage": "^1.1.1", 52 | "karma-mocha": "^1.3.0", 53 | "karma-phantomjs-launcher": "^1.0.2", 54 | "karma-sinon-chai": "^1.2.4", 55 | "karma-sourcemap-loader": "^0.3.7", 56 | "karma-spec-reporter": "0.0.26", 57 | "karma-webpack": "^2.0.2", 58 | "lolex": "^1.5.2", 59 | "mocha": "^3.2.0", 60 | "chai": "^3.5.0", 61 | "sinon": "^1.17.7", 62 | "sinon-chai": "^2.8.0", 63 | "inject-loader": "^2.0.1", 64 | "babel-plugin-istanbul": "^3.1.2", 65 | "phantomjs-prebuilt": "^2.1.14", 66 | "chromedriver": "^2.27.2", 67 | "cross-spawn": "^5.0.1", 68 | "nightwatch": "^0.9.12", 69 | "selenium-server": "^3.0.1", 70 | "semver": "^5.3.0", 71 | "opn": "^4.0.2", 72 | "ora": "^1.1.0", 73 | "shelljs": "^0.7.6", 74 | "url-loader": "^0.5.7", 75 | "vue-loader": "^10.3.0", 76 | "vue-style-loader": "^2.0.0", 77 | "vue-template-compiler": "^2.1.10", 78 | "webpack": "^2.2.1", 79 | "webpack-dev-middleware": "^1.10.0", 80 | "webpack-hot-middleware": "^2.16.1", 81 | "webpack-merge": "^2.6.1" 82 | }, 83 | "engines": { 84 | "node": ">= 4.0.0", 85 | "npm": ">= 3.0.0" 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /frontend/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 25 | -------------------------------------------------------------------------------- /frontend/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChangJoo-Park/express-generator-with-vue-cli/c7b29626306dfb55cbbce2db25ebe0e845cb1476/frontend/src/assets/logo.png -------------------------------------------------------------------------------- /frontend/src/components/IndexPage.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 30 | 31 | 32 | 44 | -------------------------------------------------------------------------------- /frontend/src/components/ShowPage.vue: -------------------------------------------------------------------------------- 1 | 7 | 8 | 24 | 25 | 28 | -------------------------------------------------------------------------------- /frontend/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import axios from 'axios' 7 | Vue.prototype.$http = axios 8 | 9 | /* eslint-disable no-new */ 10 | new Vue({ 11 | el: '#app', 12 | router, 13 | template: '', 14 | components: { App } 15 | }) 16 | -------------------------------------------------------------------------------- /frontend/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | 4 | Vue.use(Router) 5 | 6 | import Index from 'components/IndexPage' 7 | import Show from 'components/ShowPage' 8 | export default new Router({ 9 | mode: 'history', 10 | routes: [ 11 | { 12 | path: '/', 13 | name: 'index', 14 | component: Index 15 | }, 16 | { 17 | path: '/:id', 18 | name: 'show', 19 | component: Show 20 | } 21 | ] 22 | }) 23 | -------------------------------------------------------------------------------- /frontend/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ChangJoo-Park/express-generator-with-vue-cli/c7b29626306dfb55cbbce2db25ebe0e845cb1476/frontend/static/.gitkeep -------------------------------------------------------------------------------- /frontend/test/e2e/custom-assertions/elementCount.js: -------------------------------------------------------------------------------- 1 | // A custom Nightwatch assertion. 2 | // the name of the method is the filename. 3 | // can be used in tests like this: 4 | // 5 | // browser.assert.elementCount(selector, count) 6 | // 7 | // for how to write custom assertions see 8 | // http://nightwatchjs.org/guide#writing-custom-assertions 9 | exports.assertion = function (selector, count) { 10 | this.message = 'Testing if element <' + selector + '> has count: ' + count 11 | this.expected = count 12 | this.pass = function (val) { 13 | return val === this.expected 14 | } 15 | this.value = function (res) { 16 | return res.value 17 | } 18 | this.command = function (cb) { 19 | var self = this 20 | return this.api.execute(function (selector) { 21 | return document.querySelectorAll(selector).length 22 | }, [selector], function (res) { 23 | cb.call(self, res) 24 | }) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /frontend/test/e2e/nightwatch.conf.js: -------------------------------------------------------------------------------- 1 | require('babel-register') 2 | var config = require('../../config') 3 | 4 | // http://nightwatchjs.org/guide#settings-file 5 | module.exports = { 6 | src_folders: ['test/e2e/specs'], 7 | output_folder: 'test/e2e/reports', 8 | custom_assertions_path: ['test/e2e/custom-assertions'], 9 | 10 | selenium: { 11 | start_process: true, 12 | server_path: require('selenium-server').path, 13 | host: '127.0.0.1', 14 | port: 4444, 15 | cli_args: { 16 | 'webdriver.chrome.driver': require('chromedriver').path 17 | } 18 | }, 19 | 20 | test_settings: { 21 | default: { 22 | selenium_port: 4444, 23 | selenium_host: 'localhost', 24 | silent: true, 25 | globals: { 26 | devServerURL: 'http://localhost:' + (process.env.PORT || config.dev.port) 27 | } 28 | }, 29 | 30 | chrome: { 31 | desiredCapabilities: { 32 | browserName: 'chrome', 33 | javascriptEnabled: true, 34 | acceptSslCerts: true 35 | } 36 | }, 37 | 38 | firefox: { 39 | desiredCapabilities: { 40 | browserName: 'firefox', 41 | javascriptEnabled: true, 42 | acceptSslCerts: true 43 | } 44 | } 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /frontend/test/e2e/runner.js: -------------------------------------------------------------------------------- 1 | // 1. start the dev server using production config 2 | process.env.NODE_ENV = 'testing' 3 | var server = require('../../build/dev-server.js') 4 | 5 | // 2. run the nightwatch test suite against it 6 | // to run in additional browsers: 7 | // 1. add an entry in test/e2e/nightwatch.conf.json under "test_settings" 8 | // 2. add it to the --env flag below 9 | // or override the environment flag, for example: `npm run e2e -- --env chrome,firefox` 10 | // For more information on Nightwatch's config file, see 11 | // http://nightwatchjs.org/guide#settings-file 12 | var opts = process.argv.slice(2) 13 | if (opts.indexOf('--config') === -1) { 14 | opts = opts.concat(['--config', 'test/e2e/nightwatch.conf.js']) 15 | } 16 | if (opts.indexOf('--env') === -1) { 17 | opts = opts.concat(['--env', 'chrome']) 18 | } 19 | 20 | var spawn = require('cross-spawn') 21 | var runner = spawn('./node_modules/.bin/nightwatch', opts, { stdio: 'inherit' }) 22 | 23 | runner.on('exit', function (code) { 24 | server.close() 25 | process.exit(code) 26 | }) 27 | 28 | runner.on('error', function (err) { 29 | server.close() 30 | throw err 31 | }) 32 | -------------------------------------------------------------------------------- /frontend/test/e2e/specs/test.js: -------------------------------------------------------------------------------- 1 | // For authoring Nightwatch tests, see 2 | // http://nightwatchjs.org/guide#usage 3 | 4 | module.exports = { 5 | 'default e2e tests': function (browser) { 6 | // automatically uses dev Server port from /config.index.js 7 | // default: http://localhost:8080 8 | // see nightwatch.conf.js 9 | const devServer = browser.globals.devServerURL 10 | 11 | browser 12 | .url(devServer) 13 | .waitForElementVisible('#app', 5000) 14 | .assert.elementPresent('.hello') 15 | .assert.containsText('h1', 'Welcome to Your Vue.js App') 16 | .assert.elementCount('img', 1) 17 | .end() 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /frontend/test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "expect": true, 7 | "sinon": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /frontend/test/unit/index.js: -------------------------------------------------------------------------------- 1 | // Polyfill fn.bind() for PhantomJS 2 | /* eslint-disable no-extend-native */ 3 | Function.prototype.bind = require('function-bind') 4 | 5 | // require all test files (files that ends with .spec.js) 6 | const testsContext = require.context('./specs', true, /\.spec$/) 7 | testsContext.keys().forEach(testsContext) 8 | 9 | // require all src files except main.js for coverage. 10 | // you can also change this to match only the subset of files that 11 | // you want coverage for. 12 | const srcContext = require.context('src', true, /^\.\/(?!main(\.js)?$)/) 13 | srcContext.keys().forEach(srcContext) 14 | -------------------------------------------------------------------------------- /frontend/test/unit/karma.conf.js: -------------------------------------------------------------------------------- 1 | // This is a karma config file. For more details see 2 | // http://karma-runner.github.io/0.13/config/configuration-file.html 3 | // we are also using it with karma-webpack 4 | // https://github.com/webpack/karma-webpack 5 | 6 | var webpackConfig = require('../../build/webpack.test.conf') 7 | 8 | module.exports = function (config) { 9 | config.set({ 10 | // to run in additional browsers: 11 | // 1. install corresponding karma launcher 12 | // http://karma-runner.github.io/0.13/config/browsers.html 13 | // 2. add it to the `browsers` array below. 14 | browsers: ['PhantomJS'], 15 | frameworks: ['mocha', 'sinon-chai'], 16 | reporters: ['spec', 'coverage'], 17 | files: ['./index.js'], 18 | preprocessors: { 19 | './index.js': ['webpack', 'sourcemap'] 20 | }, 21 | webpack: webpackConfig, 22 | webpackMiddleware: { 23 | noInfo: true 24 | }, 25 | coverageReporter: { 26 | dir: './coverage', 27 | reporters: [ 28 | { type: 'lcov', subdir: '.' }, 29 | { type: 'text-summary' } 30 | ] 31 | } 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /frontend/test/unit/specs/Hello.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Hello from 'src/components/Hello' 3 | 4 | describe('Hello.vue', () => { 5 | it('should render correct contents', () => { 6 | const vm = new Vue({ 7 | el: document.createElement('div'), 8 | render: (h) => h(Hello) 9 | }) 10 | expect(vm.$el.querySelector('.hello h1').textContent) 11 | .to.equal('Welcome to Your Vue.js App') 12 | }) 13 | }) 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vue-with-express", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "server": "cd backend && npm start", 8 | "client": "cd frontend && npm run dev", 9 | "start": "concurrently \"npm run client\" \"npm run server\"", 10 | "test": "echo \"Error: no test specified\" && exit 1" 11 | }, 12 | "keywords": [], 13 | "author": "", 14 | "license": "ISC", 15 | "devDependencies": { 16 | "concurrently": "^3.1.0" 17 | } 18 | } --------------------------------------------------------------------------------