├── part03
├── .gitignore
├── data.txt
├── index.html
├── app.js
└── main.js
├── part05
├── .gitignore
├── views
│ ├── about.pug
│ ├── index.pug
│ ├── ads.pug
│ └── layout.pug
├── package.json
├── app.js
└── package-lock.json
├── part08
├── my-app
│ ├── views
│ │ ├── index.pug
│ │ ├── error.pug
│ │ └── layout.pug
│ ├── public
│ │ └── stylesheets
│ │ │ └── style.css
│ ├── routes
│ │ ├── users.js
│ │ └── index.js
│ ├── package.json
│ ├── app.js
│ ├── bin
│ │ └── www
│ └── package-lock.json
└── middleware-demo
│ ├── package.json
│ ├── app.js
│ └── package-lock.json
├── part09
└── ahoy-node-passport
│ ├── views
│ ├── error.pug
│ ├── index.pug
│ ├── layout.pug
│ ├── login.pug
│ └── register.pug
│ ├── db.js
│ ├── public
│ └── stylesheets
│ │ └── style.css
│ ├── models
│ └── User.js
│ ├── package.json
│ ├── routes
│ ├── index.js
│ └── auth.js
│ ├── bin
│ └── www
│ ├── app.js
│ └── package-lock.json
├── part04
├── app.js
├── app_02.js
└── package-lock.json
├── LICENSE
├── README.md
└── .gitignore
/part03/.gitignore:
--------------------------------------------------------------------------------
1 | hello.txt
2 | hello2.txt
--------------------------------------------------------------------------------
/part03/data.txt:
--------------------------------------------------------------------------------
1 | My data.txt
2 | this is line
--------------------------------------------------------------------------------
/part05/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 |
3 | *.log
--------------------------------------------------------------------------------
/part05/views/about.pug:
--------------------------------------------------------------------------------
1 | h1 Hello World
2 | p= message
3 | p This is still valid #{message}
--------------------------------------------------------------------------------
/part05/views/index.pug:
--------------------------------------------------------------------------------
1 | extends layout.pug
2 |
3 | block content
4 | h1 This is index.pug
5 | p Hello World
--------------------------------------------------------------------------------
/part08/my-app/views/index.pug:
--------------------------------------------------------------------------------
1 | extends layout
2 |
3 | block content
4 | h1= title
5 | p Welcome to #{title}
6 |
--------------------------------------------------------------------------------
/part05/views/ads.pug:
--------------------------------------------------------------------------------
1 | .footer
2 | .container
3 | .row
4 | .col-12
5 | h2 50% Off
6 | p ลดราคา 50% ซื้อเดี๋ยวนี้!
--------------------------------------------------------------------------------
/part08/my-app/views/error.pug:
--------------------------------------------------------------------------------
1 | extends layout
2 |
3 | block content
4 | h1= message
5 | h2= error.status
6 | pre #{error.stack}
7 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/views/error.pug:
--------------------------------------------------------------------------------
1 | extends layout
2 |
3 | block content
4 | h1= message
5 | h2= error.status
6 | pre #{error.stack}
7 |
--------------------------------------------------------------------------------
/part08/my-app/views/layout.pug:
--------------------------------------------------------------------------------
1 | doctype html
2 | html
3 | head
4 | title= title
5 | link(rel='stylesheet', href='/stylesheets/style.css')
6 | body
7 | block content
8 |
--------------------------------------------------------------------------------
/part08/my-app/public/stylesheets/style.css:
--------------------------------------------------------------------------------
1 | body {
2 | padding: 50px;
3 | font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
4 | }
5 |
6 | a {
7 | color: #00B7FF;
8 | }
9 |
--------------------------------------------------------------------------------
/part05/views/layout.pug:
--------------------------------------------------------------------------------
1 | html
2 | head
3 | title My Web with Pug
4 | link(rel='stylesheet', href='/style.css')
5 | body
6 | .container
7 | block content
8 | .footer
9 | p This is footer
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/db.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | mongoose.connect('mongodb://localhost:27017/ahoy-node-passport', {
3 | useNewUrlParser: true,
4 | useUnifiedTopology: true
5 | });
6 |
--------------------------------------------------------------------------------
/part08/my-app/routes/users.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 |
4 | /* GET users listing. */
5 | router.get('/', function(req, res, next) {
6 | res.send('respond with a resource');
7 | });
8 |
9 | module.exports = router;
10 |
--------------------------------------------------------------------------------
/part08/my-app/routes/index.js:
--------------------------------------------------------------------------------
1 | var express = require('express');
2 | var router = express.Router();
3 |
4 | /* GET home page. */
5 | router.get('/', function(req, res, next) {
6 | res.render('index', { title: 'Express' });
7 | });
8 |
9 | module.exports = router;
10 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/public/stylesheets/style.css:
--------------------------------------------------------------------------------
1 | .form-container {
2 | display: flex;
3 | justify-content: center;
4 | align-items: center;
5 | height: 100vh;
6 | }
7 |
8 | .form-signin {
9 | width: 100%;
10 | max-width: 420px;
11 | padding: 2rem;
12 | margin: auto;
13 | background-color: #f3f3f3;
14 | }
--------------------------------------------------------------------------------
/part08/middleware-demo/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "middleware-demo",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "app.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "express": "4.17.1"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/part05/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "part05",
3 | "version": "1.0.0",
4 | "description": "",
5 | "main": "index.js",
6 | "scripts": {
7 | "test": "echo \"Error: no test specified\" && exit 1"
8 | },
9 | "keywords": [],
10 | "author": "",
11 | "license": "ISC",
12 | "dependencies": {
13 | "express": "4.17.1",
14 | "pug": "2.0.4"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/models/User.js:
--------------------------------------------------------------------------------
1 | const mongoose = require('mongoose');
2 | const Schema = mongoose.Schema;
3 |
4 | const userSchema = new Schema({
5 | name: String,
6 | username: {
7 | type: String,
8 | unique: true
9 | },
10 | password: String
11 | });
12 |
13 | const UserModel = mongoose.model('User', userSchema);
14 |
15 | module.exports = UserModel;
16 |
--------------------------------------------------------------------------------
/part08/my-app/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "start": "node ./bin/www"
7 | },
8 | "dependencies": {
9 | "cookie-parser": "~1.4.4",
10 | "debug": "~2.6.9",
11 | "express": "~4.16.1",
12 | "http-errors": "~1.6.3",
13 | "morgan": "~1.9.1",
14 | "pug": "2.0.0-beta11"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/views/index.pug:
--------------------------------------------------------------------------------
1 | extends layout
2 |
3 | block content
4 | .container
5 | .row
6 | .col-12
7 | h1= title
8 | if user
9 | .row
10 | .col-12
11 | p Ahoy! #{user.name}
12 | .row
13 | .col-12
14 | a(href="/logout") Logout
15 | else
16 | .row
17 | .col-12
18 | a(class="btn btn-link",, href="/login") Please Login to see TOP Secret!
19 |
20 |
--------------------------------------------------------------------------------
/part05/app.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 |
3 | const app = express();
4 |
5 | // app.set('views', __dirname + '/views');
6 |
7 | app.use(express.static('views'));
8 | app.set('view engine', 'pug');
9 |
10 | app.get('/', function(req, res) {
11 | res.render('index');
12 | });
13 |
14 | app.get('/about', (req, res) => {
15 | res.render('about', {
16 | message: 'This is sent from app.js file'
17 | });
18 | });
19 |
20 | app.listen(3000);
21 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/views/layout.pug:
--------------------------------------------------------------------------------
1 | doctype html
2 | html
3 | head
4 | meta(name='viewport', content='width=device-width, initial-scale=1')
5 | title= title
6 | link(rel='stylesheet', href='https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css', integrity='sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm', crossorigin='anonymous')
7 | link(rel='stylesheet', href='/stylesheets/style.css')
8 | body
9 | block content
10 |
--------------------------------------------------------------------------------
/part04/app.js:
--------------------------------------------------------------------------------
1 | // 1. import express ด้วยการใช้ require
2 | const express = require('express');
3 |
4 | // 2. express() เป็นฟังค์ชั่น และ assign ไว้ที่ตัวแปร app
5 | const app = express();
6 |
7 | // 3. app เป็น object และมี function ชื่อเดียวกับ HTTP Method ครับ
8 | // ตัวอย่างคือ `.get()` เหมือนกับ GET
9 | app.get('/', function(req, res) {
10 | res.send('Hello World');
11 | });
12 |
13 | // 4. listen() เป็น function คล้ายๆ http module เพื่อเอาไว้ระบุว่า server จะรัน ด้วย port อะไร
14 | app.listen(3000, error => {
15 | console.log(error);
16 | });
17 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ahoy-node-passport",
3 | "version": "0.0.0",
4 | "private": true,
5 | "scripts": {
6 | "start": "node ./bin/www"
7 | },
8 | "dependencies": {
9 | "bcrypt": "4.0.1",
10 | "cookie-parser": "~1.4.4",
11 | "debug": "~2.6.9",
12 | "express": "~4.16.1",
13 | "express-session": "1.17.0",
14 | "http-errors": "~1.6.3",
15 | "mongoose": "5.9.3",
16 | "morgan": "~1.9.1",
17 | "passport": "0.4.1",
18 | "passport-local": "1.0.0",
19 | "pug": "2.0.0-beta11"
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/part08/middleware-demo/app.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const app = express();
3 |
4 | const showLog = (req, res, next) => {
5 | console.log('showLog');
6 |
7 | next();
8 | };
9 |
10 | app.use(showLog);
11 |
12 | app.use((req, res, next) => {
13 | console.log('the second log before app.get(`/`)');
14 | next();
15 | });
16 |
17 | app.get('/users/:id', (req, res, next) => {
18 | console.log('request user params', req.params);
19 | next();
20 | });
21 |
22 | app.get('/', (req, res) => {
23 | res.send('Ahoy!');
24 | });
25 |
26 | app.listen(3000);
27 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/routes/index.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const router = express.Router();
3 |
4 | const isLoggedIn = (req, res, next) => {
5 | if (req.isAuthenticated()) {
6 | next();
7 | } else {
8 | res.redirect('/login');
9 | }
10 | };
11 |
12 | router.get('/', isLoggedIn, function(req, res, next) {
13 | res.render('index', { title: 'Express', user: req.user });
14 | });
15 |
16 | router.get('/register', (req, res) => {
17 | res.render('register');
18 | });
19 |
20 | router.get('/login', (req, res) => {
21 | res.render('login');
22 | });
23 |
24 | router.get('/logout', (req, res) => {
25 | req.logout();
26 | res.redirect('/');
27 | });
28 |
29 | module.exports = router;
30 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/views/login.pug:
--------------------------------------------------------------------------------
1 | extend layout
2 |
3 | block content
4 | .form-container
5 | form(class="form-signin" method="POST" action="/auth/login")
6 | h2 Please Login
7 |
8 | .form-group
9 | label( for="username" class="sr-only") Username
10 | input(type="text" name="username" id="username" class="form-control" placeholder="Username" required)
11 |
12 | .form-group
13 | label(for="password" class="sr-only") Password
14 | input(type="password" name="password" id="password" class="form-control" placeholder="Password" required)
15 |
16 | button(class="btn btn-primary btn-block" type="submit") Login
17 |
18 | if message
19 | .alert.alert-danger #{message}
20 |
21 | a(href="/register", class="btn btn-link") Don't have an account?
22 |
--------------------------------------------------------------------------------
/part04/app_02.js:
--------------------------------------------------------------------------------
1 | // 1. import express ด้วยการใช้ require
2 | const express = require('express');
3 |
4 | // 2. express() เป็นฟังค์ชั่น และ assign ไว้ที่ตัวแปร app
5 | const app = express();
6 |
7 | // 3. app เป็น object และมี function ชื่อเดียวกับ HTTP Method ครับ
8 | // ตัวอย่างคือ `.get()` เหมือนกับ GET
9 | app.get('/', function(req, res) {
10 | res.send('Hello World');
11 | });
12 |
13 | app.get('/ahoy', (req, res) => {
14 | const name = req.query.name;
15 | const email = req.query.email;
16 |
17 | // หรือ
18 | // const { name, email } = req.query;
19 | res.send(`Ahoy! ${name}`);
20 | });
21 |
22 | app.get('/ahoy/:name', (req, res) => {
23 | res.send(`Ahoy! ${req.params.name}`);
24 | });
25 |
26 | // 4. listen() เป็น function คล้ายๆ http module เพื่อเอาไว้ระบุว่า server จะรัน ด้วย port อะไร
27 | app.listen(3000);
28 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/views/register.pug:
--------------------------------------------------------------------------------
1 | extend layout
2 |
3 | block content
4 | .form-container
5 | form(class="form-signin" method="POST" action="/auth/register")
6 | h2 Please Register
7 |
8 | .form-group
9 | label( for="name" class="sr-only") Name (Optional)
10 | input(type="text" name="name" id="name" class="form-control" placeholder="Name")
11 |
12 | .form-group
13 | label( for="username" class="sr-only") Username
14 | input(type="text" name="username" id="username" class="form-control" placeholder="Username" required)
15 |
16 | .form-group
17 | label(for="password" class="sr-only") Password
18 | input(type="password" name="password" id="password" class="form-control" placeholder="Password" required)
19 |
20 | button(class="btn btn-primary btn-block" type="submit") Register
21 |
22 | a(href="/login", class="btn btn-link") Have an account?
--------------------------------------------------------------------------------
/part03/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | Ahoy
8 |
9 |
30 |
31 |
32 |
33 |
34 |
Ahoy!
35 |
36 |
This is node.js tutorial by devahoy
37 |
38 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptas quia provident repellendus natus possimus, vitae consequuntur aliquam. Tempore neque libero eius molestiae. Vel impedit exercitationem magnam vero repudiandae eligendi a!
39 |
40 |
41 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Chai Phonbopit
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/part08/my-app/app.js:
--------------------------------------------------------------------------------
1 | var createError = require('http-errors');
2 | var express = require('express');
3 | var path = require('path');
4 | var cookieParser = require('cookie-parser');
5 | var logger = require('morgan');
6 |
7 | var indexRouter = require('./routes/index');
8 | var usersRouter = require('./routes/users');
9 |
10 | var app = express();
11 |
12 | // view engine setup
13 | app.set('views', path.join(__dirname, 'views'));
14 | app.set('view engine', 'pug');
15 |
16 | app.use(logger('dev'));
17 | app.use(express.json());
18 | app.use(express.urlencoded({ extended: false }));
19 | app.use(cookieParser());
20 | app.use(express.static(path.join(__dirname, 'public')));
21 |
22 | app.use('/', indexRouter);
23 | app.use('/users', usersRouter);
24 |
25 | // catch 404 and forward to error handler
26 | app.use(function(req, res, next) {
27 | next(createError(404));
28 | });
29 |
30 | // error handler
31 | app.use(function(err, req, res, next) {
32 | // set locals, only providing error in development
33 | res.locals.message = err.message;
34 | res.locals.error = req.app.get('env') === 'development' ? err : {};
35 |
36 | // render the error page
37 | res.status(err.status || 500);
38 | res.render('error');
39 | });
40 |
41 | module.exports = app;
42 |
--------------------------------------------------------------------------------
/part03/app.js:
--------------------------------------------------------------------------------
1 | // ✅ แบบ send file html
2 | const http = require('http');
3 | const fs = require('fs');
4 | const path = require('path');
5 |
6 | const hostname = '127.0.0.1';
7 | const port = 3000;
8 |
9 | const handler = (req, res) => {
10 | // res.writeHeader(200, { 'Content-Type': 'text/html' });
11 |
12 | const filename = path.join(__dirname, 'index.html');
13 | const indexData = fs.readFileSync(filename);
14 | res.end(indexData);
15 |
16 | // แบบใช้ fs.createReadStream
17 | // จะ load data ได้ไวกว่า
18 | // const readSream = fs.createReadStream(filename, 'utf8');
19 | // readSream.pipe(res);
20 | };
21 |
22 | const server = http.createServer(handler);
23 |
24 | server.listen(port, hostname, () => {
25 | console.log(`Server running at http://${hostname}:${port}/`);
26 | });
27 |
28 | // ✅ แบบ send string
29 | // const http = require('http');
30 |
31 | // const hostname = '127.0.0.1';
32 | // const port = 3000;
33 |
34 | // const handler = (req, res) => {
35 | // res.end(`
36 | //
37 | //
Ahoy!
38 | //
This is node.js tutorial
39 | //
40 | // `);
41 | // };
42 |
43 | // const server = http.createServer(handler);
44 |
45 | // server.listen(port, hostname, () => {
46 | // console.log(`Server running at http://${hostname}:${port}/`);
47 | // });
48 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # node-express-tutorial
2 |
3 | สอน Node.js + Express.js และ MongoDB สำหรับผู้เริ่มต้น ตั้งแต่พื้นฐาน จนเขียนเว็บได้ เป็นซีรีย์ยาวๆ ไม่แน่ใจกี่ตอน
4 |
5 | ## เนื้อหา
6 |
7 | * [ตอนที่ 1 - Node.js คืออะไร + ทำการติดตั้ง Node.js และ Node.js เบื้องต้น](https://devahoy.com/blog/2020/01/web-development-with-nodejs-mongodb-part1/)
8 | * [ตอนที่ 2 - ทบทวนพื้นฐาน JavaScript และ Modern JavaScript ES6, ES7+](https://devahoy.com/blog/2020/01/web-development-with-nodejs-mongodb-part2/)
9 | * [ตอนที่ 3 - ว่าด้วยพื้นฐาน Node.js / Callback / Sync และ Async](https://devahoy.com/blog/2020/01/web-development-with-nodejs-mongodb-part3/)
10 | * [ตอนที่ 4 - เริ่มต้นทำเว็บด้วย Node.js และ Express.js](https://devahoy.com/blog/2020/02/web-development-with-nodejs-mongodb-part4/)
11 | * [ตอนที่ 5 - ใช้งาน Pug - Template Engine](https://devahoy.com/blog/2020/02/web-development-with-nodejs-mongodb-part5/)
12 | * [ตอนที่ 6 - เริ่มต้นกับ MongoDB](https://devahoy.com/blog/2020/02/web-development-with-nodejs-mongodb-part6/)
13 | * [ตอนที่ 7 - ทำ Backend API ด้วย Node.js และ MongoDB กันดีกว่า](https://devahoy.com/blog/2015/07/getting-started-with-nodejs/)
14 | * [ตอนที่ 8 - Express Generator / Middleware](https://devahoy.com/blog/2020/02/web-development-with-nodejs-mongodb-part8/)
15 | * [ตอนที่ 9 - ทำระบบ Login ด้วย Passport.js](https://devahoy.com/blog/2020/03/web-development-with-nodejs-mongodb-part9/)
16 |
17 | ## Source Code
18 |
19 | - [ตอนที่ 3](/part03)
20 | - [ตอนที่ 4](/part04)
21 | - [ตอนที่ 5](/part05)
22 | - [ตอนที่ 7](https://github.com/Phonbopit/restful-api-nodejs)
23 | - [ตอนที่ 8](/part08)
24 | - [ตอนที่ 9](/part09)
25 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/routes/auth.js:
--------------------------------------------------------------------------------
1 | const express = require('express');
2 | const bcrypt = require('bcrypt');
3 | const router = express.Router();
4 | const passport = require('passport');
5 |
6 | const User = require('../models/User');
7 |
8 | router.post('/register', async (req, res) => {
9 | const { username, password, name } = req.body;
10 |
11 | // simple validation
12 | if (!name || !username || !password) {
13 | return res.render('register', { message: 'Please try again' });
14 | }
15 |
16 | const passwordHash = bcrypt.hashSync(password, 10);
17 | const user = new User({
18 | name,
19 | username,
20 | password: passwordHash
21 | });
22 |
23 | await user.save();
24 | res.render('index', { user });
25 | });
26 |
27 | router.post(
28 | '/login',
29 | passport.authenticate('local', {
30 | failureRedirect: '/login',
31 | successRedirect: '/'
32 | }),
33 | async (req, res) => {
34 | const { username, password } = req.body;
35 |
36 | return res.redirect('/');
37 |
38 | // simple validation
39 | // if (!username || !password) {
40 | // return res.render('register', { message: 'Please try again' });
41 | // }
42 |
43 | // const user = await User.findOne({
44 | // username
45 | // });
46 |
47 | // if (user) {
48 | // const isCorrect = bcrypt.compareSync(password, user.password);
49 |
50 | // if (isCorrect) {
51 | // return res.render('index', { user });
52 | // } else {
53 | // return res.render('login', {
54 | // message: 'Username or Password incorrect'
55 | // });
56 | // }
57 | // } else {
58 | // return res.render('login', { message: 'Username does not exist.' });
59 | // }
60 | }
61 | );
62 |
63 | module.exports = router;
64 |
--------------------------------------------------------------------------------
/part03/main.js:
--------------------------------------------------------------------------------
1 | const fs = require('fs');
2 | const path = require('path');
3 |
4 | // ❌แบบไม่ใส่ option
5 | // fs.readFile('data.txt', (error, data) => {
6 | // console.log('data', data);
7 | // });
8 |
9 | // ✅แบบใส่ option เป็น encoding
10 | // fs.readFile('data.txt', 'utf-8', (error, data) => {
11 | // console.log('data', data);
12 | // });
13 |
14 | // ❌แบบที่ผิด
15 | // console.log('--START---');
16 |
17 | // const data1 = fs.readFile('data.txt', 'utf-8', (error, data) => {});
18 |
19 | // const data2 = fs.readFile('data.txt', 'utf-8', (error, data) => {});
20 |
21 | // console.log('data1', data1);
22 | // console.log('data2', data2);
23 |
24 | // console.log('--END--');
25 |
26 | // ✅ แบบถูก
27 | // console.log('--START---');
28 |
29 | // fs.readFile('data.txt', 'utf-8', (error, data) => {
30 | // console.log('data 1 >>>>', data);
31 | // });
32 |
33 | // fs.readFile('data.txt', 'utf-8', (error, data) => {
34 | // console.log('data 2 >>>>', data);
35 | // });
36 |
37 | // console.log('--END--');
38 |
39 | // ✅ แบบใช้ readFileSync
40 | // console.log('--START---');
41 |
42 | // const data1 = fs.readFileSync('data.txt', 'utf-8');
43 | // const data2 = fs.readFileSync('data.txt', 'utf-8');
44 |
45 | // console.log('data1', data1);
46 | // console.log('data2', data2);
47 |
48 | // console.log('--END--');
49 |
50 | // ✅ เขียนไฟล์
51 | // fs.writeFile('hello.txt', 'Ahoy Node.js', 'utf8', (error, data) => {
52 | // console.log('file saved');
53 | // });
54 |
55 | fs.appendFile('hello2.txt', 'Ahoy Node.js\n', 'utf8', (error, data) => {
56 | console.log('file saved');
57 | });
58 |
59 | console.log('dir', __dirname);
60 | console.log('file', __filename);
61 |
62 | // ✅ เขียนไฟล์ร่วมกับ path.join()
63 | fs.appendFile(
64 | path.join(__dirname, 'hello2.txt'),
65 | 'Ahoy Node.js\n',
66 | 'utf8',
67 | (error, data) => {
68 | console.log('file saved');
69 | }
70 | );
71 |
--------------------------------------------------------------------------------
/part08/my-app/bin/www:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * Module dependencies.
5 | */
6 |
7 | var app = require('../app');
8 | var debug = require('debug')('my-app: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 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/bin/www:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | /**
4 | * Module dependencies.
5 | */
6 |
7 | var app = require('../app');
8 | var debug = require('debug')('ahoy-node-passport: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 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | lerna-debug.log*
8 |
9 | # Diagnostic reports (https://nodejs.org/api/report.html)
10 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
11 |
12 | # Runtime data
13 | pids
14 | *.pid
15 | *.seed
16 | *.pid.lock
17 |
18 | # Directory for instrumented libs generated by jscoverage/JSCover
19 | lib-cov
20 |
21 | # Coverage directory used by tools like istanbul
22 | coverage
23 | *.lcov
24 |
25 | # nyc test coverage
26 | .nyc_output
27 |
28 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
29 | .grunt
30 |
31 | # Bower dependency directory (https://bower.io/)
32 | bower_components
33 |
34 | # node-waf configuration
35 | .lock-wscript
36 |
37 | # Compiled binary addons (https://nodejs.org/api/addons.html)
38 | build/Release
39 |
40 | # Dependency directories
41 | node_modules/
42 | **/node_modules
43 | jspm_packages/
44 |
45 | # TypeScript v1 declaration files
46 | typings/
47 |
48 | # TypeScript cache
49 | *.tsbuildinfo
50 |
51 | # Optional npm cache directory
52 | .npm
53 |
54 | # Optional eslint cache
55 | .eslintcache
56 |
57 | # Microbundle cache
58 | .rpt2_cache/
59 | .rts2_cache_cjs/
60 | .rts2_cache_es/
61 | .rts2_cache_umd/
62 |
63 | # Optional REPL history
64 | .node_repl_history
65 |
66 | # Output of 'npm pack'
67 | *.tgz
68 |
69 | # Yarn Integrity file
70 | .yarn-integrity
71 |
72 | # dotenv environment variables file
73 | .env
74 | .env.test
75 |
76 | # parcel-bundler cache (https://parceljs.org/)
77 | .cache
78 |
79 | # Next.js build output
80 | .next
81 |
82 | # Nuxt.js build / generate output
83 | .nuxt
84 | dist
85 |
86 | # Gatsby files
87 | .cache/
88 | # Comment in the public line in if your project uses Gatsby and *not* Next.js
89 | # https://nextjs.org/blog/next-9-1#public-directory-support
90 | # public
91 |
92 | # vuepress build output
93 | .vuepress/dist
94 |
95 | # Serverless directories
96 | .serverless/
97 |
98 | # FuseBox cache
99 | .fusebox/
100 |
101 | # DynamoDB Local files
102 | .dynamodb/
103 |
104 | # TernJS port file
105 | .tern-port
106 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/app.js:
--------------------------------------------------------------------------------
1 | var createError = require('http-errors');
2 | var express = require('express');
3 | var path = require('path');
4 | var cookieParser = require('cookie-parser');
5 | const bcrypt = require('bcrypt');
6 | const session = require('express-session');
7 | const passport = require('passport');
8 | const LocalStrategy = require('passport-local').Strategy;
9 | const User = require('./models/User');
10 | var logger = require('morgan');
11 |
12 | // ✅passport.use()
13 | // ใช้ LocalStrategy โดยใช้ username และ password
14 | // ภายใน function จะใช้ User.findOne() เพื่อหา username ใน Database
15 | // ถ้าเจอ ก็ compareSync ด้วย bcrypt หากตรง แสดงว่า login ถูกต้อง
16 | // ก็จะ cb (คือ callback function) ส่งต่อไปให้ `req.user` จะมีค่า user
17 | // และไป step ถัดไปคือ serialzie และ deserialize
18 |
19 | passport.use(
20 | new LocalStrategy((username, password, cb) => {
21 | User.findOne({ username }, (err, user) => {
22 | if (err) {
23 | return cb(err);
24 | }
25 | if (!user) {
26 | return cb(null, false);
27 | }
28 |
29 | if (bcrypt.compareSync(password, user.password)) {
30 | return cb(null, user);
31 | }
32 | return cb(null, false);
33 | });
34 | })
35 | );
36 |
37 | // ✅serializeUser และ seserialize จะใช้ร่วมกับ session เพื่อจะดึงค่า user ระหว่าง http request
38 | // โดย serializeUser จะเก็บ ค่าไว้ที่ session
39 | // ในที่นี้คือ cb(null, user._id_) - ค่า _id จะถูกเก็บใน session
40 | // ส่วน derialize ใช้กรณีที่จะดึงค่าจาก session มาหาใน DB ว่าใช่ user จริงๆมั้ย
41 | // โดยจะเห็นได้ว่า ต้องเอา username มา `User.findById()` ถ้าเจอ ก็ cb(null, user)
42 | passport.serializeUser((user, cb) => {
43 | cb(null, user._id);
44 | });
45 |
46 | passport.deserializeUser((id, cb) => {
47 | User.findById(id, (err, user) => {
48 | if (err) {
49 | return cb(err);
50 | }
51 | cb(null, user);
52 | });
53 | });
54 |
55 | var app = express();
56 |
57 | require('./db');
58 |
59 | // view engine setup
60 | app.set('views', path.join(__dirname, 'views'));
61 | app.set('view engine', 'pug');
62 |
63 | app.use(logger('dev'));
64 | app.use(express.json());
65 | app.use(express.urlencoded({ extended: false }));
66 | app.use(cookieParser());
67 | app.use(express.static(path.join(__dirname, 'public')));
68 |
69 | app.use(
70 | session({
71 | secret: 'my_super_secret',
72 | resave: false,
73 | saveUninitialized: false
74 | })
75 | );
76 |
77 | app.use(passport.initialize());
78 | app.use(passport.session());
79 |
80 | var indexRouter = require('./routes/index');
81 | var authRouter = require('./routes/auth');
82 |
83 | app.use('/', indexRouter);
84 | app.use('/auth', authRouter);
85 |
86 | // catch 404 and forward to error handler
87 | app.use(function(req, res, next) {
88 | next(createError(404));
89 | });
90 |
91 | // error handler
92 | app.use(function(err, req, res, next) {
93 | // set locals, only providing error in development
94 | res.locals.message = err.message;
95 | res.locals.error = req.app.get('env') === 'development' ? err : {};
96 |
97 | // render the error page
98 | res.status(err.status || 500);
99 | res.render('error');
100 | });
101 |
102 | module.exports = app;
103 |
--------------------------------------------------------------------------------
/part04/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "requires": true,
3 | "lockfileVersion": 1,
4 | "dependencies": {
5 | "accepts": {
6 | "version": "1.3.7",
7 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
8 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
9 | "requires": {
10 | "mime-types": "~2.1.24",
11 | "negotiator": "0.6.2"
12 | }
13 | },
14 | "array-flatten": {
15 | "version": "1.1.1",
16 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
17 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
18 | },
19 | "body-parser": {
20 | "version": "1.19.0",
21 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
22 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
23 | "requires": {
24 | "bytes": "3.1.0",
25 | "content-type": "~1.0.4",
26 | "debug": "2.6.9",
27 | "depd": "~1.1.2",
28 | "http-errors": "1.7.2",
29 | "iconv-lite": "0.4.24",
30 | "on-finished": "~2.3.0",
31 | "qs": "6.7.0",
32 | "raw-body": "2.4.0",
33 | "type-is": "~1.6.17"
34 | }
35 | },
36 | "bytes": {
37 | "version": "3.1.0",
38 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
39 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
40 | },
41 | "content-disposition": {
42 | "version": "0.5.3",
43 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
44 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
45 | "requires": {
46 | "safe-buffer": "5.1.2"
47 | }
48 | },
49 | "content-type": {
50 | "version": "1.0.4",
51 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
52 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
53 | },
54 | "cookie": {
55 | "version": "0.4.0",
56 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
57 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
58 | },
59 | "cookie-signature": {
60 | "version": "1.0.6",
61 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
62 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
63 | },
64 | "debug": {
65 | "version": "2.6.9",
66 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
67 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
68 | "requires": {
69 | "ms": "2.0.0"
70 | }
71 | },
72 | "depd": {
73 | "version": "1.1.2",
74 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
75 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
76 | },
77 | "destroy": {
78 | "version": "1.0.4",
79 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
80 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
81 | },
82 | "ee-first": {
83 | "version": "1.1.1",
84 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
85 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
86 | },
87 | "encodeurl": {
88 | "version": "1.0.2",
89 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
90 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
91 | },
92 | "escape-html": {
93 | "version": "1.0.3",
94 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
95 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
96 | },
97 | "etag": {
98 | "version": "1.8.1",
99 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
100 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
101 | },
102 | "express": {
103 | "version": "4.17.1",
104 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
105 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
106 | "requires": {
107 | "accepts": "~1.3.7",
108 | "array-flatten": "1.1.1",
109 | "body-parser": "1.19.0",
110 | "content-disposition": "0.5.3",
111 | "content-type": "~1.0.4",
112 | "cookie": "0.4.0",
113 | "cookie-signature": "1.0.6",
114 | "debug": "2.6.9",
115 | "depd": "~1.1.2",
116 | "encodeurl": "~1.0.2",
117 | "escape-html": "~1.0.3",
118 | "etag": "~1.8.1",
119 | "finalhandler": "~1.1.2",
120 | "fresh": "0.5.2",
121 | "merge-descriptors": "1.0.1",
122 | "methods": "~1.1.2",
123 | "on-finished": "~2.3.0",
124 | "parseurl": "~1.3.3",
125 | "path-to-regexp": "0.1.7",
126 | "proxy-addr": "~2.0.5",
127 | "qs": "6.7.0",
128 | "range-parser": "~1.2.1",
129 | "safe-buffer": "5.1.2",
130 | "send": "0.17.1",
131 | "serve-static": "1.14.1",
132 | "setprototypeof": "1.1.1",
133 | "statuses": "~1.5.0",
134 | "type-is": "~1.6.18",
135 | "utils-merge": "1.0.1",
136 | "vary": "~1.1.2"
137 | }
138 | },
139 | "finalhandler": {
140 | "version": "1.1.2",
141 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
142 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
143 | "requires": {
144 | "debug": "2.6.9",
145 | "encodeurl": "~1.0.2",
146 | "escape-html": "~1.0.3",
147 | "on-finished": "~2.3.0",
148 | "parseurl": "~1.3.3",
149 | "statuses": "~1.5.0",
150 | "unpipe": "~1.0.0"
151 | }
152 | },
153 | "forwarded": {
154 | "version": "0.1.2",
155 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
156 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
157 | },
158 | "fresh": {
159 | "version": "0.5.2",
160 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
161 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
162 | },
163 | "http-errors": {
164 | "version": "1.7.2",
165 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
166 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
167 | "requires": {
168 | "depd": "~1.1.2",
169 | "inherits": "2.0.3",
170 | "setprototypeof": "1.1.1",
171 | "statuses": ">= 1.5.0 < 2",
172 | "toidentifier": "1.0.0"
173 | }
174 | },
175 | "iconv-lite": {
176 | "version": "0.4.24",
177 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
178 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
179 | "requires": {
180 | "safer-buffer": ">= 2.1.2 < 3"
181 | }
182 | },
183 | "inherits": {
184 | "version": "2.0.3",
185 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
186 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
187 | },
188 | "ipaddr.js": {
189 | "version": "1.9.0",
190 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
191 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
192 | },
193 | "media-typer": {
194 | "version": "0.3.0",
195 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
196 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
197 | },
198 | "merge-descriptors": {
199 | "version": "1.0.1",
200 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
201 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
202 | },
203 | "methods": {
204 | "version": "1.1.2",
205 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
206 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
207 | },
208 | "mime": {
209 | "version": "1.6.0",
210 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
211 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
212 | },
213 | "mime-db": {
214 | "version": "1.43.0",
215 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
216 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
217 | },
218 | "mime-types": {
219 | "version": "2.1.26",
220 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
221 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
222 | "requires": {
223 | "mime-db": "1.43.0"
224 | }
225 | },
226 | "ms": {
227 | "version": "2.0.0",
228 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
229 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
230 | },
231 | "negotiator": {
232 | "version": "0.6.2",
233 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
234 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
235 | },
236 | "on-finished": {
237 | "version": "2.3.0",
238 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
239 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
240 | "requires": {
241 | "ee-first": "1.1.1"
242 | }
243 | },
244 | "parseurl": {
245 | "version": "1.3.3",
246 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
247 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
248 | },
249 | "path-to-regexp": {
250 | "version": "0.1.7",
251 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
252 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
253 | },
254 | "proxy-addr": {
255 | "version": "2.0.5",
256 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
257 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
258 | "requires": {
259 | "forwarded": "~0.1.2",
260 | "ipaddr.js": "1.9.0"
261 | }
262 | },
263 | "qs": {
264 | "version": "6.7.0",
265 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
266 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
267 | },
268 | "range-parser": {
269 | "version": "1.2.1",
270 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
271 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
272 | },
273 | "raw-body": {
274 | "version": "2.4.0",
275 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
276 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
277 | "requires": {
278 | "bytes": "3.1.0",
279 | "http-errors": "1.7.2",
280 | "iconv-lite": "0.4.24",
281 | "unpipe": "1.0.0"
282 | }
283 | },
284 | "safe-buffer": {
285 | "version": "5.1.2",
286 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
287 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
288 | },
289 | "safer-buffer": {
290 | "version": "2.1.2",
291 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
292 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
293 | },
294 | "send": {
295 | "version": "0.17.1",
296 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
297 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
298 | "requires": {
299 | "debug": "2.6.9",
300 | "depd": "~1.1.2",
301 | "destroy": "~1.0.4",
302 | "encodeurl": "~1.0.2",
303 | "escape-html": "~1.0.3",
304 | "etag": "~1.8.1",
305 | "fresh": "0.5.2",
306 | "http-errors": "~1.7.2",
307 | "mime": "1.6.0",
308 | "ms": "2.1.1",
309 | "on-finished": "~2.3.0",
310 | "range-parser": "~1.2.1",
311 | "statuses": "~1.5.0"
312 | },
313 | "dependencies": {
314 | "ms": {
315 | "version": "2.1.1",
316 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
317 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
318 | }
319 | }
320 | },
321 | "serve-static": {
322 | "version": "1.14.1",
323 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
324 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
325 | "requires": {
326 | "encodeurl": "~1.0.2",
327 | "escape-html": "~1.0.3",
328 | "parseurl": "~1.3.3",
329 | "send": "0.17.1"
330 | }
331 | },
332 | "setprototypeof": {
333 | "version": "1.1.1",
334 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
335 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
336 | },
337 | "statuses": {
338 | "version": "1.5.0",
339 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
340 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
341 | },
342 | "toidentifier": {
343 | "version": "1.0.0",
344 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
345 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
346 | },
347 | "type-is": {
348 | "version": "1.6.18",
349 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
350 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
351 | "requires": {
352 | "media-typer": "0.3.0",
353 | "mime-types": "~2.1.24"
354 | }
355 | },
356 | "unpipe": {
357 | "version": "1.0.0",
358 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
359 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
360 | },
361 | "utils-merge": {
362 | "version": "1.0.1",
363 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
364 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
365 | },
366 | "vary": {
367 | "version": "1.1.2",
368 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
369 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
370 | }
371 | }
372 | }
373 |
--------------------------------------------------------------------------------
/part08/middleware-demo/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "middleware-demo",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "accepts": {
8 | "version": "1.3.7",
9 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
10 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
11 | "requires": {
12 | "mime-types": "~2.1.24",
13 | "negotiator": "0.6.2"
14 | }
15 | },
16 | "array-flatten": {
17 | "version": "1.1.1",
18 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
19 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
20 | },
21 | "body-parser": {
22 | "version": "1.19.0",
23 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
24 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
25 | "requires": {
26 | "bytes": "3.1.0",
27 | "content-type": "~1.0.4",
28 | "debug": "2.6.9",
29 | "depd": "~1.1.2",
30 | "http-errors": "1.7.2",
31 | "iconv-lite": "0.4.24",
32 | "on-finished": "~2.3.0",
33 | "qs": "6.7.0",
34 | "raw-body": "2.4.0",
35 | "type-is": "~1.6.17"
36 | }
37 | },
38 | "bytes": {
39 | "version": "3.1.0",
40 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
41 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
42 | },
43 | "content-disposition": {
44 | "version": "0.5.3",
45 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
46 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
47 | "requires": {
48 | "safe-buffer": "5.1.2"
49 | }
50 | },
51 | "content-type": {
52 | "version": "1.0.4",
53 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
54 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
55 | },
56 | "cookie": {
57 | "version": "0.4.0",
58 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
59 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
60 | },
61 | "cookie-signature": {
62 | "version": "1.0.6",
63 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
64 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
65 | },
66 | "debug": {
67 | "version": "2.6.9",
68 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
69 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
70 | "requires": {
71 | "ms": "2.0.0"
72 | }
73 | },
74 | "depd": {
75 | "version": "1.1.2",
76 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
77 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
78 | },
79 | "destroy": {
80 | "version": "1.0.4",
81 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
82 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
83 | },
84 | "ee-first": {
85 | "version": "1.1.1",
86 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
87 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
88 | },
89 | "encodeurl": {
90 | "version": "1.0.2",
91 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
92 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
93 | },
94 | "escape-html": {
95 | "version": "1.0.3",
96 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
97 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
98 | },
99 | "etag": {
100 | "version": "1.8.1",
101 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
102 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
103 | },
104 | "express": {
105 | "version": "4.17.1",
106 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
107 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
108 | "requires": {
109 | "accepts": "~1.3.7",
110 | "array-flatten": "1.1.1",
111 | "body-parser": "1.19.0",
112 | "content-disposition": "0.5.3",
113 | "content-type": "~1.0.4",
114 | "cookie": "0.4.0",
115 | "cookie-signature": "1.0.6",
116 | "debug": "2.6.9",
117 | "depd": "~1.1.2",
118 | "encodeurl": "~1.0.2",
119 | "escape-html": "~1.0.3",
120 | "etag": "~1.8.1",
121 | "finalhandler": "~1.1.2",
122 | "fresh": "0.5.2",
123 | "merge-descriptors": "1.0.1",
124 | "methods": "~1.1.2",
125 | "on-finished": "~2.3.0",
126 | "parseurl": "~1.3.3",
127 | "path-to-regexp": "0.1.7",
128 | "proxy-addr": "~2.0.5",
129 | "qs": "6.7.0",
130 | "range-parser": "~1.2.1",
131 | "safe-buffer": "5.1.2",
132 | "send": "0.17.1",
133 | "serve-static": "1.14.1",
134 | "setprototypeof": "1.1.1",
135 | "statuses": "~1.5.0",
136 | "type-is": "~1.6.18",
137 | "utils-merge": "1.0.1",
138 | "vary": "~1.1.2"
139 | }
140 | },
141 | "finalhandler": {
142 | "version": "1.1.2",
143 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
144 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
145 | "requires": {
146 | "debug": "2.6.9",
147 | "encodeurl": "~1.0.2",
148 | "escape-html": "~1.0.3",
149 | "on-finished": "~2.3.0",
150 | "parseurl": "~1.3.3",
151 | "statuses": "~1.5.0",
152 | "unpipe": "~1.0.0"
153 | }
154 | },
155 | "forwarded": {
156 | "version": "0.1.2",
157 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
158 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
159 | },
160 | "fresh": {
161 | "version": "0.5.2",
162 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
163 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
164 | },
165 | "http-errors": {
166 | "version": "1.7.2",
167 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
168 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
169 | "requires": {
170 | "depd": "~1.1.2",
171 | "inherits": "2.0.3",
172 | "setprototypeof": "1.1.1",
173 | "statuses": ">= 1.5.0 < 2",
174 | "toidentifier": "1.0.0"
175 | }
176 | },
177 | "iconv-lite": {
178 | "version": "0.4.24",
179 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
180 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
181 | "requires": {
182 | "safer-buffer": ">= 2.1.2 < 3"
183 | }
184 | },
185 | "inherits": {
186 | "version": "2.0.3",
187 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
188 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
189 | },
190 | "ipaddr.js": {
191 | "version": "1.9.1",
192 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
193 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
194 | },
195 | "media-typer": {
196 | "version": "0.3.0",
197 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
198 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
199 | },
200 | "merge-descriptors": {
201 | "version": "1.0.1",
202 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
203 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
204 | },
205 | "methods": {
206 | "version": "1.1.2",
207 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
208 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
209 | },
210 | "mime": {
211 | "version": "1.6.0",
212 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
213 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
214 | },
215 | "mime-db": {
216 | "version": "1.43.0",
217 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
218 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
219 | },
220 | "mime-types": {
221 | "version": "2.1.26",
222 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
223 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
224 | "requires": {
225 | "mime-db": "1.43.0"
226 | }
227 | },
228 | "ms": {
229 | "version": "2.0.0",
230 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
231 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
232 | },
233 | "negotiator": {
234 | "version": "0.6.2",
235 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
236 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
237 | },
238 | "on-finished": {
239 | "version": "2.3.0",
240 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
241 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
242 | "requires": {
243 | "ee-first": "1.1.1"
244 | }
245 | },
246 | "parseurl": {
247 | "version": "1.3.3",
248 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
249 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
250 | },
251 | "path-to-regexp": {
252 | "version": "0.1.7",
253 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
254 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
255 | },
256 | "proxy-addr": {
257 | "version": "2.0.6",
258 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
259 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
260 | "requires": {
261 | "forwarded": "~0.1.2",
262 | "ipaddr.js": "1.9.1"
263 | }
264 | },
265 | "qs": {
266 | "version": "6.7.0",
267 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
268 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
269 | },
270 | "range-parser": {
271 | "version": "1.2.1",
272 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
273 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
274 | },
275 | "raw-body": {
276 | "version": "2.4.0",
277 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
278 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
279 | "requires": {
280 | "bytes": "3.1.0",
281 | "http-errors": "1.7.2",
282 | "iconv-lite": "0.4.24",
283 | "unpipe": "1.0.0"
284 | }
285 | },
286 | "safe-buffer": {
287 | "version": "5.1.2",
288 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
289 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
290 | },
291 | "safer-buffer": {
292 | "version": "2.1.2",
293 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
294 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
295 | },
296 | "send": {
297 | "version": "0.17.1",
298 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
299 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
300 | "requires": {
301 | "debug": "2.6.9",
302 | "depd": "~1.1.2",
303 | "destroy": "~1.0.4",
304 | "encodeurl": "~1.0.2",
305 | "escape-html": "~1.0.3",
306 | "etag": "~1.8.1",
307 | "fresh": "0.5.2",
308 | "http-errors": "~1.7.2",
309 | "mime": "1.6.0",
310 | "ms": "2.1.1",
311 | "on-finished": "~2.3.0",
312 | "range-parser": "~1.2.1",
313 | "statuses": "~1.5.0"
314 | },
315 | "dependencies": {
316 | "ms": {
317 | "version": "2.1.1",
318 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
319 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
320 | }
321 | }
322 | },
323 | "serve-static": {
324 | "version": "1.14.1",
325 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
326 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
327 | "requires": {
328 | "encodeurl": "~1.0.2",
329 | "escape-html": "~1.0.3",
330 | "parseurl": "~1.3.3",
331 | "send": "0.17.1"
332 | }
333 | },
334 | "setprototypeof": {
335 | "version": "1.1.1",
336 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
337 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
338 | },
339 | "statuses": {
340 | "version": "1.5.0",
341 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
342 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
343 | },
344 | "toidentifier": {
345 | "version": "1.0.0",
346 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
347 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
348 | },
349 | "type-is": {
350 | "version": "1.6.18",
351 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
352 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
353 | "requires": {
354 | "media-typer": "0.3.0",
355 | "mime-types": "~2.1.24"
356 | }
357 | },
358 | "unpipe": {
359 | "version": "1.0.0",
360 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
361 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
362 | },
363 | "utils-merge": {
364 | "version": "1.0.1",
365 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
366 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
367 | },
368 | "vary": {
369 | "version": "1.1.2",
370 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
371 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
372 | }
373 | }
374 | }
375 |
--------------------------------------------------------------------------------
/part05/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "part05",
3 | "version": "1.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/babel-types": {
8 | "version": "7.0.7",
9 | "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz",
10 | "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ=="
11 | },
12 | "@types/babylon": {
13 | "version": "6.16.5",
14 | "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz",
15 | "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==",
16 | "requires": {
17 | "@types/babel-types": "*"
18 | }
19 | },
20 | "accepts": {
21 | "version": "1.3.7",
22 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
23 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
24 | "requires": {
25 | "mime-types": "~2.1.24",
26 | "negotiator": "0.6.2"
27 | }
28 | },
29 | "acorn": {
30 | "version": "3.3.0",
31 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
32 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
33 | },
34 | "acorn-globals": {
35 | "version": "3.1.0",
36 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
37 | "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
38 | "requires": {
39 | "acorn": "^4.0.4"
40 | },
41 | "dependencies": {
42 | "acorn": {
43 | "version": "4.0.13",
44 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
45 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
46 | }
47 | }
48 | },
49 | "align-text": {
50 | "version": "0.1.4",
51 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
52 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
53 | "requires": {
54 | "kind-of": "^3.0.2",
55 | "longest": "^1.0.1",
56 | "repeat-string": "^1.5.2"
57 | }
58 | },
59 | "array-flatten": {
60 | "version": "1.1.1",
61 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
62 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
63 | },
64 | "asap": {
65 | "version": "2.0.6",
66 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
67 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
68 | },
69 | "babel-runtime": {
70 | "version": "6.26.0",
71 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
72 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
73 | "requires": {
74 | "core-js": "^2.4.0",
75 | "regenerator-runtime": "^0.11.0"
76 | }
77 | },
78 | "babel-types": {
79 | "version": "6.26.0",
80 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
81 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
82 | "requires": {
83 | "babel-runtime": "^6.26.0",
84 | "esutils": "^2.0.2",
85 | "lodash": "^4.17.4",
86 | "to-fast-properties": "^1.0.3"
87 | }
88 | },
89 | "babylon": {
90 | "version": "6.18.0",
91 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
92 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
93 | },
94 | "body-parser": {
95 | "version": "1.19.0",
96 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
97 | "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
98 | "requires": {
99 | "bytes": "3.1.0",
100 | "content-type": "~1.0.4",
101 | "debug": "2.6.9",
102 | "depd": "~1.1.2",
103 | "http-errors": "1.7.2",
104 | "iconv-lite": "0.4.24",
105 | "on-finished": "~2.3.0",
106 | "qs": "6.7.0",
107 | "raw-body": "2.4.0",
108 | "type-is": "~1.6.17"
109 | }
110 | },
111 | "bytes": {
112 | "version": "3.1.0",
113 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
114 | "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg=="
115 | },
116 | "camelcase": {
117 | "version": "1.2.1",
118 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
119 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
120 | },
121 | "center-align": {
122 | "version": "0.1.3",
123 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
124 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
125 | "requires": {
126 | "align-text": "^0.1.3",
127 | "lazy-cache": "^1.0.3"
128 | }
129 | },
130 | "character-parser": {
131 | "version": "2.2.0",
132 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
133 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
134 | "requires": {
135 | "is-regex": "^1.0.3"
136 | }
137 | },
138 | "clean-css": {
139 | "version": "4.2.3",
140 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
141 | "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
142 | "requires": {
143 | "source-map": "~0.6.0"
144 | }
145 | },
146 | "cliui": {
147 | "version": "2.1.0",
148 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
149 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
150 | "requires": {
151 | "center-align": "^0.1.1",
152 | "right-align": "^0.1.1",
153 | "wordwrap": "0.0.2"
154 | }
155 | },
156 | "constantinople": {
157 | "version": "3.1.2",
158 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz",
159 | "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==",
160 | "requires": {
161 | "@types/babel-types": "^7.0.0",
162 | "@types/babylon": "^6.16.2",
163 | "babel-types": "^6.26.0",
164 | "babylon": "^6.18.0"
165 | }
166 | },
167 | "content-disposition": {
168 | "version": "0.5.3",
169 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz",
170 | "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==",
171 | "requires": {
172 | "safe-buffer": "5.1.2"
173 | }
174 | },
175 | "content-type": {
176 | "version": "1.0.4",
177 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
178 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
179 | },
180 | "cookie": {
181 | "version": "0.4.0",
182 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
183 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
184 | },
185 | "cookie-signature": {
186 | "version": "1.0.6",
187 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
188 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
189 | },
190 | "core-js": {
191 | "version": "2.6.11",
192 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
193 | "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
194 | },
195 | "debug": {
196 | "version": "2.6.9",
197 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
198 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
199 | "requires": {
200 | "ms": "2.0.0"
201 | }
202 | },
203 | "decamelize": {
204 | "version": "1.2.0",
205 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
206 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
207 | },
208 | "depd": {
209 | "version": "1.1.2",
210 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
211 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
212 | },
213 | "destroy": {
214 | "version": "1.0.4",
215 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
216 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
217 | },
218 | "doctypes": {
219 | "version": "1.1.0",
220 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
221 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
222 | },
223 | "ee-first": {
224 | "version": "1.1.1",
225 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
226 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
227 | },
228 | "encodeurl": {
229 | "version": "1.0.2",
230 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
231 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
232 | },
233 | "escape-html": {
234 | "version": "1.0.3",
235 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
236 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
237 | },
238 | "esutils": {
239 | "version": "2.0.3",
240 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
241 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
242 | },
243 | "etag": {
244 | "version": "1.8.1",
245 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
246 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
247 | },
248 | "express": {
249 | "version": "4.17.1",
250 | "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz",
251 | "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==",
252 | "requires": {
253 | "accepts": "~1.3.7",
254 | "array-flatten": "1.1.1",
255 | "body-parser": "1.19.0",
256 | "content-disposition": "0.5.3",
257 | "content-type": "~1.0.4",
258 | "cookie": "0.4.0",
259 | "cookie-signature": "1.0.6",
260 | "debug": "2.6.9",
261 | "depd": "~1.1.2",
262 | "encodeurl": "~1.0.2",
263 | "escape-html": "~1.0.3",
264 | "etag": "~1.8.1",
265 | "finalhandler": "~1.1.2",
266 | "fresh": "0.5.2",
267 | "merge-descriptors": "1.0.1",
268 | "methods": "~1.1.2",
269 | "on-finished": "~2.3.0",
270 | "parseurl": "~1.3.3",
271 | "path-to-regexp": "0.1.7",
272 | "proxy-addr": "~2.0.5",
273 | "qs": "6.7.0",
274 | "range-parser": "~1.2.1",
275 | "safe-buffer": "5.1.2",
276 | "send": "0.17.1",
277 | "serve-static": "1.14.1",
278 | "setprototypeof": "1.1.1",
279 | "statuses": "~1.5.0",
280 | "type-is": "~1.6.18",
281 | "utils-merge": "1.0.1",
282 | "vary": "~1.1.2"
283 | }
284 | },
285 | "finalhandler": {
286 | "version": "1.1.2",
287 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
288 | "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
289 | "requires": {
290 | "debug": "2.6.9",
291 | "encodeurl": "~1.0.2",
292 | "escape-html": "~1.0.3",
293 | "on-finished": "~2.3.0",
294 | "parseurl": "~1.3.3",
295 | "statuses": "~1.5.0",
296 | "unpipe": "~1.0.0"
297 | }
298 | },
299 | "forwarded": {
300 | "version": "0.1.2",
301 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
302 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
303 | },
304 | "fresh": {
305 | "version": "0.5.2",
306 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
307 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
308 | },
309 | "function-bind": {
310 | "version": "1.1.1",
311 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
312 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
313 | },
314 | "has": {
315 | "version": "1.0.3",
316 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
317 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
318 | "requires": {
319 | "function-bind": "^1.1.1"
320 | }
321 | },
322 | "http-errors": {
323 | "version": "1.7.2",
324 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
325 | "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
326 | "requires": {
327 | "depd": "~1.1.2",
328 | "inherits": "2.0.3",
329 | "setprototypeof": "1.1.1",
330 | "statuses": ">= 1.5.0 < 2",
331 | "toidentifier": "1.0.0"
332 | }
333 | },
334 | "iconv-lite": {
335 | "version": "0.4.24",
336 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
337 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
338 | "requires": {
339 | "safer-buffer": ">= 2.1.2 < 3"
340 | }
341 | },
342 | "inherits": {
343 | "version": "2.0.3",
344 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
345 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
346 | },
347 | "ipaddr.js": {
348 | "version": "1.9.0",
349 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
350 | "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA=="
351 | },
352 | "is-buffer": {
353 | "version": "1.1.6",
354 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
355 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
356 | },
357 | "is-expression": {
358 | "version": "3.0.0",
359 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz",
360 | "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=",
361 | "requires": {
362 | "acorn": "~4.0.2",
363 | "object-assign": "^4.0.1"
364 | },
365 | "dependencies": {
366 | "acorn": {
367 | "version": "4.0.13",
368 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
369 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
370 | }
371 | }
372 | },
373 | "is-promise": {
374 | "version": "2.1.0",
375 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
376 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
377 | },
378 | "is-regex": {
379 | "version": "1.0.5",
380 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
381 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
382 | "requires": {
383 | "has": "^1.0.3"
384 | }
385 | },
386 | "js-stringify": {
387 | "version": "1.0.2",
388 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
389 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
390 | },
391 | "jstransformer": {
392 | "version": "1.0.0",
393 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
394 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
395 | "requires": {
396 | "is-promise": "^2.0.0",
397 | "promise": "^7.0.1"
398 | }
399 | },
400 | "kind-of": {
401 | "version": "3.2.2",
402 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
403 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
404 | "requires": {
405 | "is-buffer": "^1.1.5"
406 | }
407 | },
408 | "lazy-cache": {
409 | "version": "1.0.4",
410 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
411 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
412 | },
413 | "lodash": {
414 | "version": "4.17.15",
415 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
416 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
417 | },
418 | "longest": {
419 | "version": "1.0.1",
420 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
421 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
422 | },
423 | "media-typer": {
424 | "version": "0.3.0",
425 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
426 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
427 | },
428 | "merge-descriptors": {
429 | "version": "1.0.1",
430 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
431 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
432 | },
433 | "methods": {
434 | "version": "1.1.2",
435 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
436 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
437 | },
438 | "mime": {
439 | "version": "1.6.0",
440 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
441 | "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
442 | },
443 | "mime-db": {
444 | "version": "1.43.0",
445 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
446 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
447 | },
448 | "mime-types": {
449 | "version": "2.1.26",
450 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
451 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
452 | "requires": {
453 | "mime-db": "1.43.0"
454 | }
455 | },
456 | "ms": {
457 | "version": "2.0.0",
458 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
459 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
460 | },
461 | "negotiator": {
462 | "version": "0.6.2",
463 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
464 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
465 | },
466 | "object-assign": {
467 | "version": "4.1.1",
468 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
469 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
470 | },
471 | "on-finished": {
472 | "version": "2.3.0",
473 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
474 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
475 | "requires": {
476 | "ee-first": "1.1.1"
477 | }
478 | },
479 | "parseurl": {
480 | "version": "1.3.3",
481 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
482 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
483 | },
484 | "path-parse": {
485 | "version": "1.0.6",
486 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
487 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
488 | },
489 | "path-to-regexp": {
490 | "version": "0.1.7",
491 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
492 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
493 | },
494 | "promise": {
495 | "version": "7.3.1",
496 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
497 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
498 | "requires": {
499 | "asap": "~2.0.3"
500 | }
501 | },
502 | "proxy-addr": {
503 | "version": "2.0.5",
504 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
505 | "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
506 | "requires": {
507 | "forwarded": "~0.1.2",
508 | "ipaddr.js": "1.9.0"
509 | }
510 | },
511 | "pug": {
512 | "version": "2.0.4",
513 | "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.4.tgz",
514 | "integrity": "sha512-XhoaDlvi6NIzL49nu094R2NA6P37ijtgMDuWE+ofekDChvfKnzFal60bhSdiy8y2PBO6fmz3oMEIcfpBVRUdvw==",
515 | "requires": {
516 | "pug-code-gen": "^2.0.2",
517 | "pug-filters": "^3.1.1",
518 | "pug-lexer": "^4.1.0",
519 | "pug-linker": "^3.0.6",
520 | "pug-load": "^2.0.12",
521 | "pug-parser": "^5.0.1",
522 | "pug-runtime": "^2.0.5",
523 | "pug-strip-comments": "^1.0.4"
524 | }
525 | },
526 | "pug-attrs": {
527 | "version": "2.0.4",
528 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz",
529 | "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==",
530 | "requires": {
531 | "constantinople": "^3.0.1",
532 | "js-stringify": "^1.0.1",
533 | "pug-runtime": "^2.0.5"
534 | }
535 | },
536 | "pug-code-gen": {
537 | "version": "2.0.2",
538 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.2.tgz",
539 | "integrity": "sha512-kROFWv/AHx/9CRgoGJeRSm+4mLWchbgpRzTEn8XCiwwOy6Vh0gAClS8Vh5TEJ9DBjaP8wCjS3J6HKsEsYdvaCw==",
540 | "requires": {
541 | "constantinople": "^3.1.2",
542 | "doctypes": "^1.1.0",
543 | "js-stringify": "^1.0.1",
544 | "pug-attrs": "^2.0.4",
545 | "pug-error": "^1.3.3",
546 | "pug-runtime": "^2.0.5",
547 | "void-elements": "^2.0.1",
548 | "with": "^5.0.0"
549 | }
550 | },
551 | "pug-error": {
552 | "version": "1.3.3",
553 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz",
554 | "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ=="
555 | },
556 | "pug-filters": {
557 | "version": "3.1.1",
558 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.1.tgz",
559 | "integrity": "sha512-lFfjNyGEyVWC4BwX0WyvkoWLapI5xHSM3xZJFUhx4JM4XyyRdO8Aucc6pCygnqV2uSgJFaJWW3Ft1wCWSoQkQg==",
560 | "requires": {
561 | "clean-css": "^4.1.11",
562 | "constantinople": "^3.0.1",
563 | "jstransformer": "1.0.0",
564 | "pug-error": "^1.3.3",
565 | "pug-walk": "^1.1.8",
566 | "resolve": "^1.1.6",
567 | "uglify-js": "^2.6.1"
568 | }
569 | },
570 | "pug-lexer": {
571 | "version": "4.1.0",
572 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.1.0.tgz",
573 | "integrity": "sha512-i55yzEBtjm0mlplW4LoANq7k3S8gDdfC6+LThGEvsK4FuobcKfDAwt6V4jKPH9RtiE3a2Akfg5UpafZ1OksaPA==",
574 | "requires": {
575 | "character-parser": "^2.1.1",
576 | "is-expression": "^3.0.0",
577 | "pug-error": "^1.3.3"
578 | }
579 | },
580 | "pug-linker": {
581 | "version": "3.0.6",
582 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.6.tgz",
583 | "integrity": "sha512-bagfuHttfQOpANGy1Y6NJ+0mNb7dD2MswFG2ZKj22s8g0wVsojpRlqveEQHmgXXcfROB2RT6oqbPYr9EN2ZWzg==",
584 | "requires": {
585 | "pug-error": "^1.3.3",
586 | "pug-walk": "^1.1.8"
587 | }
588 | },
589 | "pug-load": {
590 | "version": "2.0.12",
591 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz",
592 | "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==",
593 | "requires": {
594 | "object-assign": "^4.1.0",
595 | "pug-walk": "^1.1.8"
596 | }
597 | },
598 | "pug-parser": {
599 | "version": "5.0.1",
600 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.1.tgz",
601 | "integrity": "sha512-nGHqK+w07p5/PsPIyzkTQfzlYfuqoiGjaoqHv1LjOv2ZLXmGX1O+4Vcvps+P4LhxZ3drYSljjq4b+Naid126wA==",
602 | "requires": {
603 | "pug-error": "^1.3.3",
604 | "token-stream": "0.0.1"
605 | }
606 | },
607 | "pug-runtime": {
608 | "version": "2.0.5",
609 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz",
610 | "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw=="
611 | },
612 | "pug-strip-comments": {
613 | "version": "1.0.4",
614 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz",
615 | "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==",
616 | "requires": {
617 | "pug-error": "^1.3.3"
618 | }
619 | },
620 | "pug-walk": {
621 | "version": "1.1.8",
622 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz",
623 | "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA=="
624 | },
625 | "qs": {
626 | "version": "6.7.0",
627 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
628 | "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ=="
629 | },
630 | "range-parser": {
631 | "version": "1.2.1",
632 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
633 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
634 | },
635 | "raw-body": {
636 | "version": "2.4.0",
637 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
638 | "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
639 | "requires": {
640 | "bytes": "3.1.0",
641 | "http-errors": "1.7.2",
642 | "iconv-lite": "0.4.24",
643 | "unpipe": "1.0.0"
644 | }
645 | },
646 | "regenerator-runtime": {
647 | "version": "0.11.1",
648 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
649 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
650 | },
651 | "repeat-string": {
652 | "version": "1.6.1",
653 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
654 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
655 | },
656 | "resolve": {
657 | "version": "1.15.1",
658 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
659 | "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
660 | "requires": {
661 | "path-parse": "^1.0.6"
662 | }
663 | },
664 | "right-align": {
665 | "version": "0.1.3",
666 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
667 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
668 | "requires": {
669 | "align-text": "^0.1.1"
670 | }
671 | },
672 | "safe-buffer": {
673 | "version": "5.1.2",
674 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
675 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
676 | },
677 | "safer-buffer": {
678 | "version": "2.1.2",
679 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
680 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
681 | },
682 | "send": {
683 | "version": "0.17.1",
684 | "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz",
685 | "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==",
686 | "requires": {
687 | "debug": "2.6.9",
688 | "depd": "~1.1.2",
689 | "destroy": "~1.0.4",
690 | "encodeurl": "~1.0.2",
691 | "escape-html": "~1.0.3",
692 | "etag": "~1.8.1",
693 | "fresh": "0.5.2",
694 | "http-errors": "~1.7.2",
695 | "mime": "1.6.0",
696 | "ms": "2.1.1",
697 | "on-finished": "~2.3.0",
698 | "range-parser": "~1.2.1",
699 | "statuses": "~1.5.0"
700 | },
701 | "dependencies": {
702 | "ms": {
703 | "version": "2.1.1",
704 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
705 | "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg=="
706 | }
707 | }
708 | },
709 | "serve-static": {
710 | "version": "1.14.1",
711 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz",
712 | "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==",
713 | "requires": {
714 | "encodeurl": "~1.0.2",
715 | "escape-html": "~1.0.3",
716 | "parseurl": "~1.3.3",
717 | "send": "0.17.1"
718 | }
719 | },
720 | "setprototypeof": {
721 | "version": "1.1.1",
722 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
723 | "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw=="
724 | },
725 | "source-map": {
726 | "version": "0.6.1",
727 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
728 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
729 | },
730 | "statuses": {
731 | "version": "1.5.0",
732 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
733 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow="
734 | },
735 | "to-fast-properties": {
736 | "version": "1.0.3",
737 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
738 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
739 | },
740 | "toidentifier": {
741 | "version": "1.0.0",
742 | "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
743 | "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw=="
744 | },
745 | "token-stream": {
746 | "version": "0.0.1",
747 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz",
748 | "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo="
749 | },
750 | "type-is": {
751 | "version": "1.6.18",
752 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
753 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
754 | "requires": {
755 | "media-typer": "0.3.0",
756 | "mime-types": "~2.1.24"
757 | }
758 | },
759 | "uglify-js": {
760 | "version": "2.8.29",
761 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
762 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
763 | "requires": {
764 | "source-map": "~0.5.1",
765 | "uglify-to-browserify": "~1.0.0",
766 | "yargs": "~3.10.0"
767 | },
768 | "dependencies": {
769 | "source-map": {
770 | "version": "0.5.7",
771 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
772 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
773 | }
774 | }
775 | },
776 | "uglify-to-browserify": {
777 | "version": "1.0.2",
778 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
779 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
780 | "optional": true
781 | },
782 | "unpipe": {
783 | "version": "1.0.0",
784 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
785 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
786 | },
787 | "utils-merge": {
788 | "version": "1.0.1",
789 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
790 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
791 | },
792 | "vary": {
793 | "version": "1.1.2",
794 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
795 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
796 | },
797 | "void-elements": {
798 | "version": "2.0.1",
799 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
800 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
801 | },
802 | "window-size": {
803 | "version": "0.1.0",
804 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
805 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
806 | },
807 | "with": {
808 | "version": "5.1.1",
809 | "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz",
810 | "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=",
811 | "requires": {
812 | "acorn": "^3.1.0",
813 | "acorn-globals": "^3.0.0"
814 | }
815 | },
816 | "wordwrap": {
817 | "version": "0.0.2",
818 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
819 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
820 | },
821 | "yargs": {
822 | "version": "3.10.0",
823 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
824 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
825 | "requires": {
826 | "camelcase": "^1.0.2",
827 | "cliui": "^2.1.0",
828 | "decamelize": "^1.0.0",
829 | "window-size": "0.1.0"
830 | }
831 | }
832 | }
833 | }
834 |
--------------------------------------------------------------------------------
/part08/my-app/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "my-app",
3 | "version": "0.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/babel-types": {
8 | "version": "7.0.7",
9 | "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz",
10 | "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ=="
11 | },
12 | "@types/babylon": {
13 | "version": "6.16.5",
14 | "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz",
15 | "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==",
16 | "requires": {
17 | "@types/babel-types": "*"
18 | }
19 | },
20 | "accepts": {
21 | "version": "1.3.7",
22 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
23 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
24 | "requires": {
25 | "mime-types": "~2.1.24",
26 | "negotiator": "0.6.2"
27 | }
28 | },
29 | "acorn": {
30 | "version": "3.3.0",
31 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
32 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
33 | },
34 | "acorn-globals": {
35 | "version": "3.1.0",
36 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
37 | "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
38 | "requires": {
39 | "acorn": "^4.0.4"
40 | },
41 | "dependencies": {
42 | "acorn": {
43 | "version": "4.0.13",
44 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
45 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
46 | }
47 | }
48 | },
49 | "align-text": {
50 | "version": "0.1.4",
51 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
52 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
53 | "requires": {
54 | "kind-of": "^3.0.2",
55 | "longest": "^1.0.1",
56 | "repeat-string": "^1.5.2"
57 | }
58 | },
59 | "amdefine": {
60 | "version": "1.0.1",
61 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
62 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
63 | },
64 | "array-flatten": {
65 | "version": "1.1.1",
66 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
67 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
68 | },
69 | "asap": {
70 | "version": "2.0.6",
71 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
72 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
73 | },
74 | "babel-runtime": {
75 | "version": "6.26.0",
76 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
77 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
78 | "requires": {
79 | "core-js": "^2.4.0",
80 | "regenerator-runtime": "^0.11.0"
81 | }
82 | },
83 | "babel-types": {
84 | "version": "6.26.0",
85 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
86 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
87 | "requires": {
88 | "babel-runtime": "^6.26.0",
89 | "esutils": "^2.0.2",
90 | "lodash": "^4.17.4",
91 | "to-fast-properties": "^1.0.3"
92 | }
93 | },
94 | "babylon": {
95 | "version": "6.18.0",
96 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
97 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
98 | },
99 | "basic-auth": {
100 | "version": "2.0.1",
101 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
102 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
103 | "requires": {
104 | "safe-buffer": "5.1.2"
105 | }
106 | },
107 | "body-parser": {
108 | "version": "1.18.3",
109 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
110 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
111 | "requires": {
112 | "bytes": "3.0.0",
113 | "content-type": "~1.0.4",
114 | "debug": "2.6.9",
115 | "depd": "~1.1.2",
116 | "http-errors": "~1.6.3",
117 | "iconv-lite": "0.4.23",
118 | "on-finished": "~2.3.0",
119 | "qs": "6.5.2",
120 | "raw-body": "2.3.3",
121 | "type-is": "~1.6.16"
122 | }
123 | },
124 | "bytes": {
125 | "version": "3.0.0",
126 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
127 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
128 | },
129 | "camelcase": {
130 | "version": "1.2.1",
131 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
132 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
133 | },
134 | "center-align": {
135 | "version": "0.1.3",
136 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
137 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
138 | "requires": {
139 | "align-text": "^0.1.3",
140 | "lazy-cache": "^1.0.3"
141 | }
142 | },
143 | "character-parser": {
144 | "version": "2.2.0",
145 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
146 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
147 | "requires": {
148 | "is-regex": "^1.0.3"
149 | }
150 | },
151 | "clean-css": {
152 | "version": "3.4.28",
153 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
154 | "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
155 | "requires": {
156 | "commander": "2.8.x",
157 | "source-map": "0.4.x"
158 | }
159 | },
160 | "cliui": {
161 | "version": "2.1.0",
162 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
163 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
164 | "requires": {
165 | "center-align": "^0.1.1",
166 | "right-align": "^0.1.1",
167 | "wordwrap": "0.0.2"
168 | }
169 | },
170 | "commander": {
171 | "version": "2.8.1",
172 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
173 | "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
174 | "requires": {
175 | "graceful-readlink": ">= 1.0.0"
176 | }
177 | },
178 | "constantinople": {
179 | "version": "3.1.2",
180 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz",
181 | "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==",
182 | "requires": {
183 | "@types/babel-types": "^7.0.0",
184 | "@types/babylon": "^6.16.2",
185 | "babel-types": "^6.26.0",
186 | "babylon": "^6.18.0"
187 | }
188 | },
189 | "content-disposition": {
190 | "version": "0.5.2",
191 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
192 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
193 | },
194 | "content-type": {
195 | "version": "1.0.4",
196 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
197 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
198 | },
199 | "cookie": {
200 | "version": "0.3.1",
201 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
202 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
203 | },
204 | "cookie-parser": {
205 | "version": "1.4.4",
206 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.4.tgz",
207 | "integrity": "sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==",
208 | "requires": {
209 | "cookie": "0.3.1",
210 | "cookie-signature": "1.0.6"
211 | }
212 | },
213 | "cookie-signature": {
214 | "version": "1.0.6",
215 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
216 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
217 | },
218 | "core-js": {
219 | "version": "2.6.11",
220 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
221 | "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
222 | },
223 | "debug": {
224 | "version": "2.6.9",
225 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
226 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
227 | "requires": {
228 | "ms": "2.0.0"
229 | }
230 | },
231 | "decamelize": {
232 | "version": "1.2.0",
233 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
234 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
235 | },
236 | "depd": {
237 | "version": "1.1.2",
238 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
239 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
240 | },
241 | "destroy": {
242 | "version": "1.0.4",
243 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
244 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
245 | },
246 | "doctypes": {
247 | "version": "1.1.0",
248 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
249 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
250 | },
251 | "ee-first": {
252 | "version": "1.1.1",
253 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
254 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
255 | },
256 | "encodeurl": {
257 | "version": "1.0.2",
258 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
259 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
260 | },
261 | "escape-html": {
262 | "version": "1.0.3",
263 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
264 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
265 | },
266 | "esutils": {
267 | "version": "2.0.3",
268 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
269 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
270 | },
271 | "etag": {
272 | "version": "1.8.1",
273 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
274 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
275 | },
276 | "express": {
277 | "version": "4.16.4",
278 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
279 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
280 | "requires": {
281 | "accepts": "~1.3.5",
282 | "array-flatten": "1.1.1",
283 | "body-parser": "1.18.3",
284 | "content-disposition": "0.5.2",
285 | "content-type": "~1.0.4",
286 | "cookie": "0.3.1",
287 | "cookie-signature": "1.0.6",
288 | "debug": "2.6.9",
289 | "depd": "~1.1.2",
290 | "encodeurl": "~1.0.2",
291 | "escape-html": "~1.0.3",
292 | "etag": "~1.8.1",
293 | "finalhandler": "1.1.1",
294 | "fresh": "0.5.2",
295 | "merge-descriptors": "1.0.1",
296 | "methods": "~1.1.2",
297 | "on-finished": "~2.3.0",
298 | "parseurl": "~1.3.2",
299 | "path-to-regexp": "0.1.7",
300 | "proxy-addr": "~2.0.4",
301 | "qs": "6.5.2",
302 | "range-parser": "~1.2.0",
303 | "safe-buffer": "5.1.2",
304 | "send": "0.16.2",
305 | "serve-static": "1.13.2",
306 | "setprototypeof": "1.1.0",
307 | "statuses": "~1.4.0",
308 | "type-is": "~1.6.16",
309 | "utils-merge": "1.0.1",
310 | "vary": "~1.1.2"
311 | }
312 | },
313 | "finalhandler": {
314 | "version": "1.1.1",
315 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
316 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
317 | "requires": {
318 | "debug": "2.6.9",
319 | "encodeurl": "~1.0.2",
320 | "escape-html": "~1.0.3",
321 | "on-finished": "~2.3.0",
322 | "parseurl": "~1.3.2",
323 | "statuses": "~1.4.0",
324 | "unpipe": "~1.0.0"
325 | }
326 | },
327 | "forwarded": {
328 | "version": "0.1.2",
329 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
330 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
331 | },
332 | "fresh": {
333 | "version": "0.5.2",
334 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
335 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
336 | },
337 | "function-bind": {
338 | "version": "1.1.1",
339 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
340 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
341 | },
342 | "graceful-readlink": {
343 | "version": "1.0.1",
344 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
345 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
346 | },
347 | "has": {
348 | "version": "1.0.3",
349 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
350 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
351 | "requires": {
352 | "function-bind": "^1.1.1"
353 | }
354 | },
355 | "http-errors": {
356 | "version": "1.6.3",
357 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
358 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
359 | "requires": {
360 | "depd": "~1.1.2",
361 | "inherits": "2.0.3",
362 | "setprototypeof": "1.1.0",
363 | "statuses": ">= 1.4.0 < 2"
364 | }
365 | },
366 | "iconv-lite": {
367 | "version": "0.4.23",
368 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
369 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
370 | "requires": {
371 | "safer-buffer": ">= 2.1.2 < 3"
372 | }
373 | },
374 | "inherits": {
375 | "version": "2.0.3",
376 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
377 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
378 | },
379 | "ipaddr.js": {
380 | "version": "1.9.1",
381 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
382 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
383 | },
384 | "is-buffer": {
385 | "version": "1.1.6",
386 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
387 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
388 | },
389 | "is-expression": {
390 | "version": "3.0.0",
391 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz",
392 | "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=",
393 | "requires": {
394 | "acorn": "~4.0.2",
395 | "object-assign": "^4.0.1"
396 | },
397 | "dependencies": {
398 | "acorn": {
399 | "version": "4.0.13",
400 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
401 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
402 | }
403 | }
404 | },
405 | "is-promise": {
406 | "version": "2.1.0",
407 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
408 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
409 | },
410 | "is-regex": {
411 | "version": "1.0.5",
412 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
413 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
414 | "requires": {
415 | "has": "^1.0.3"
416 | }
417 | },
418 | "js-stringify": {
419 | "version": "1.0.2",
420 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
421 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
422 | },
423 | "jstransformer": {
424 | "version": "1.0.0",
425 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
426 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
427 | "requires": {
428 | "is-promise": "^2.0.0",
429 | "promise": "^7.0.1"
430 | }
431 | },
432 | "kind-of": {
433 | "version": "3.2.2",
434 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
435 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
436 | "requires": {
437 | "is-buffer": "^1.1.5"
438 | }
439 | },
440 | "lazy-cache": {
441 | "version": "1.0.4",
442 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
443 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
444 | },
445 | "lodash": {
446 | "version": "4.17.15",
447 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
448 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
449 | },
450 | "longest": {
451 | "version": "1.0.1",
452 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
453 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
454 | },
455 | "media-typer": {
456 | "version": "0.3.0",
457 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
458 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
459 | },
460 | "merge-descriptors": {
461 | "version": "1.0.1",
462 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
463 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
464 | },
465 | "methods": {
466 | "version": "1.1.2",
467 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
468 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
469 | },
470 | "mime": {
471 | "version": "1.4.1",
472 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
473 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
474 | },
475 | "mime-db": {
476 | "version": "1.43.0",
477 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
478 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
479 | },
480 | "mime-types": {
481 | "version": "2.1.26",
482 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
483 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
484 | "requires": {
485 | "mime-db": "1.43.0"
486 | }
487 | },
488 | "morgan": {
489 | "version": "1.9.1",
490 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
491 | "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
492 | "requires": {
493 | "basic-auth": "~2.0.0",
494 | "debug": "2.6.9",
495 | "depd": "~1.1.2",
496 | "on-finished": "~2.3.0",
497 | "on-headers": "~1.0.1"
498 | }
499 | },
500 | "ms": {
501 | "version": "2.0.0",
502 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
503 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
504 | },
505 | "negotiator": {
506 | "version": "0.6.2",
507 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
508 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
509 | },
510 | "object-assign": {
511 | "version": "4.1.1",
512 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
513 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
514 | },
515 | "on-finished": {
516 | "version": "2.3.0",
517 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
518 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
519 | "requires": {
520 | "ee-first": "1.1.1"
521 | }
522 | },
523 | "on-headers": {
524 | "version": "1.0.2",
525 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
526 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
527 | },
528 | "parseurl": {
529 | "version": "1.3.3",
530 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
531 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
532 | },
533 | "path-parse": {
534 | "version": "1.0.6",
535 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
536 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
537 | },
538 | "path-to-regexp": {
539 | "version": "0.1.7",
540 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
541 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
542 | },
543 | "promise": {
544 | "version": "7.3.1",
545 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
546 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
547 | "requires": {
548 | "asap": "~2.0.3"
549 | }
550 | },
551 | "proxy-addr": {
552 | "version": "2.0.6",
553 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
554 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
555 | "requires": {
556 | "forwarded": "~0.1.2",
557 | "ipaddr.js": "1.9.1"
558 | }
559 | },
560 | "pug": {
561 | "version": "2.0.0-beta11",
562 | "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta11.tgz",
563 | "integrity": "sha1-Favmr1AEx+LPRhPksnRlyVRrXwE=",
564 | "requires": {
565 | "pug-code-gen": "^1.1.1",
566 | "pug-filters": "^2.1.1",
567 | "pug-lexer": "^3.0.0",
568 | "pug-linker": "^2.0.2",
569 | "pug-load": "^2.0.5",
570 | "pug-parser": "^2.0.2",
571 | "pug-runtime": "^2.0.3",
572 | "pug-strip-comments": "^1.0.2"
573 | }
574 | },
575 | "pug-attrs": {
576 | "version": "2.0.4",
577 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz",
578 | "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==",
579 | "requires": {
580 | "constantinople": "^3.0.1",
581 | "js-stringify": "^1.0.1",
582 | "pug-runtime": "^2.0.5"
583 | }
584 | },
585 | "pug-code-gen": {
586 | "version": "1.1.1",
587 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-1.1.1.tgz",
588 | "integrity": "sha1-HPcnRO8qA56uajNAyqoRBYcSWOg=",
589 | "requires": {
590 | "constantinople": "^3.0.1",
591 | "doctypes": "^1.1.0",
592 | "js-stringify": "^1.0.1",
593 | "pug-attrs": "^2.0.2",
594 | "pug-error": "^1.3.2",
595 | "pug-runtime": "^2.0.3",
596 | "void-elements": "^2.0.1",
597 | "with": "^5.0.0"
598 | }
599 | },
600 | "pug-error": {
601 | "version": "1.3.3",
602 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz",
603 | "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ=="
604 | },
605 | "pug-filters": {
606 | "version": "2.1.5",
607 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-2.1.5.tgz",
608 | "integrity": "sha512-xkw71KtrC4sxleKiq+cUlQzsiLn8pM5+vCgkChW2E6oNOzaqTSIBKIQ5cl4oheuDzvJYCTSYzRaVinMUrV4YLQ==",
609 | "requires": {
610 | "clean-css": "^3.3.0",
611 | "constantinople": "^3.0.1",
612 | "jstransformer": "1.0.0",
613 | "pug-error": "^1.3.2",
614 | "pug-walk": "^1.1.5",
615 | "resolve": "^1.1.6",
616 | "uglify-js": "^2.6.1"
617 | }
618 | },
619 | "pug-lexer": {
620 | "version": "3.1.0",
621 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-3.1.0.tgz",
622 | "integrity": "sha1-/QhzdtSmdbT1n4/vQiiDQ06VgaI=",
623 | "requires": {
624 | "character-parser": "^2.1.1",
625 | "is-expression": "^3.0.0",
626 | "pug-error": "^1.3.2"
627 | }
628 | },
629 | "pug-linker": {
630 | "version": "2.0.3",
631 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-2.0.3.tgz",
632 | "integrity": "sha1-szH/olc33eacEntWwQ/xf652bco=",
633 | "requires": {
634 | "pug-error": "^1.3.2",
635 | "pug-walk": "^1.1.2"
636 | }
637 | },
638 | "pug-load": {
639 | "version": "2.0.12",
640 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz",
641 | "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==",
642 | "requires": {
643 | "object-assign": "^4.1.0",
644 | "pug-walk": "^1.1.8"
645 | }
646 | },
647 | "pug-parser": {
648 | "version": "2.0.2",
649 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-2.0.2.tgz",
650 | "integrity": "sha1-U6aAz9BQOdywwn0CkJS8SnkmibA=",
651 | "requires": {
652 | "pug-error": "^1.3.2",
653 | "token-stream": "0.0.1"
654 | }
655 | },
656 | "pug-runtime": {
657 | "version": "2.0.5",
658 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz",
659 | "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw=="
660 | },
661 | "pug-strip-comments": {
662 | "version": "1.0.4",
663 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz",
664 | "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==",
665 | "requires": {
666 | "pug-error": "^1.3.3"
667 | }
668 | },
669 | "pug-walk": {
670 | "version": "1.1.8",
671 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz",
672 | "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA=="
673 | },
674 | "qs": {
675 | "version": "6.5.2",
676 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
677 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
678 | },
679 | "range-parser": {
680 | "version": "1.2.1",
681 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
682 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
683 | },
684 | "raw-body": {
685 | "version": "2.3.3",
686 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
687 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
688 | "requires": {
689 | "bytes": "3.0.0",
690 | "http-errors": "1.6.3",
691 | "iconv-lite": "0.4.23",
692 | "unpipe": "1.0.0"
693 | }
694 | },
695 | "regenerator-runtime": {
696 | "version": "0.11.1",
697 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
698 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
699 | },
700 | "repeat-string": {
701 | "version": "1.6.1",
702 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
703 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
704 | },
705 | "resolve": {
706 | "version": "1.15.1",
707 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
708 | "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
709 | "requires": {
710 | "path-parse": "^1.0.6"
711 | }
712 | },
713 | "right-align": {
714 | "version": "0.1.3",
715 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
716 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
717 | "requires": {
718 | "align-text": "^0.1.1"
719 | }
720 | },
721 | "safe-buffer": {
722 | "version": "5.1.2",
723 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
724 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
725 | },
726 | "safer-buffer": {
727 | "version": "2.1.2",
728 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
729 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
730 | },
731 | "send": {
732 | "version": "0.16.2",
733 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
734 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
735 | "requires": {
736 | "debug": "2.6.9",
737 | "depd": "~1.1.2",
738 | "destroy": "~1.0.4",
739 | "encodeurl": "~1.0.2",
740 | "escape-html": "~1.0.3",
741 | "etag": "~1.8.1",
742 | "fresh": "0.5.2",
743 | "http-errors": "~1.6.2",
744 | "mime": "1.4.1",
745 | "ms": "2.0.0",
746 | "on-finished": "~2.3.0",
747 | "range-parser": "~1.2.0",
748 | "statuses": "~1.4.0"
749 | }
750 | },
751 | "serve-static": {
752 | "version": "1.13.2",
753 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
754 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
755 | "requires": {
756 | "encodeurl": "~1.0.2",
757 | "escape-html": "~1.0.3",
758 | "parseurl": "~1.3.2",
759 | "send": "0.16.2"
760 | }
761 | },
762 | "setprototypeof": {
763 | "version": "1.1.0",
764 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
765 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
766 | },
767 | "source-map": {
768 | "version": "0.4.4",
769 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
770 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
771 | "requires": {
772 | "amdefine": ">=0.0.4"
773 | }
774 | },
775 | "statuses": {
776 | "version": "1.4.0",
777 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
778 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
779 | },
780 | "to-fast-properties": {
781 | "version": "1.0.3",
782 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
783 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
784 | },
785 | "token-stream": {
786 | "version": "0.0.1",
787 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz",
788 | "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo="
789 | },
790 | "type-is": {
791 | "version": "1.6.18",
792 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
793 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
794 | "requires": {
795 | "media-typer": "0.3.0",
796 | "mime-types": "~2.1.24"
797 | }
798 | },
799 | "uglify-js": {
800 | "version": "2.8.29",
801 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
802 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
803 | "requires": {
804 | "source-map": "~0.5.1",
805 | "uglify-to-browserify": "~1.0.0",
806 | "yargs": "~3.10.0"
807 | },
808 | "dependencies": {
809 | "source-map": {
810 | "version": "0.5.7",
811 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
812 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
813 | }
814 | }
815 | },
816 | "uglify-to-browserify": {
817 | "version": "1.0.2",
818 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
819 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
820 | "optional": true
821 | },
822 | "unpipe": {
823 | "version": "1.0.0",
824 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
825 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
826 | },
827 | "utils-merge": {
828 | "version": "1.0.1",
829 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
830 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
831 | },
832 | "vary": {
833 | "version": "1.1.2",
834 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
835 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
836 | },
837 | "void-elements": {
838 | "version": "2.0.1",
839 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
840 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
841 | },
842 | "window-size": {
843 | "version": "0.1.0",
844 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
845 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
846 | },
847 | "with": {
848 | "version": "5.1.1",
849 | "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz",
850 | "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=",
851 | "requires": {
852 | "acorn": "^3.1.0",
853 | "acorn-globals": "^3.0.0"
854 | }
855 | },
856 | "wordwrap": {
857 | "version": "0.0.2",
858 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
859 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
860 | },
861 | "yargs": {
862 | "version": "3.10.0",
863 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
864 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
865 | "requires": {
866 | "camelcase": "^1.0.2",
867 | "cliui": "^2.1.0",
868 | "decamelize": "^1.0.0",
869 | "window-size": "0.1.0"
870 | }
871 | }
872 | }
873 | }
874 |
--------------------------------------------------------------------------------
/part09/ahoy-node-passport/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ahoy-node-passport",
3 | "version": "0.0.0",
4 | "lockfileVersion": 1,
5 | "requires": true,
6 | "dependencies": {
7 | "@types/babel-types": {
8 | "version": "7.0.7",
9 | "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.7.tgz",
10 | "integrity": "sha512-dBtBbrc+qTHy1WdfHYjBwRln4+LWqASWakLHsWHR2NWHIFkv4W3O070IGoGLEBrJBvct3r0L1BUPuvURi7kYUQ=="
11 | },
12 | "@types/babylon": {
13 | "version": "6.16.5",
14 | "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.5.tgz",
15 | "integrity": "sha512-xH2e58elpj1X4ynnKp9qSnWlsRTIs6n3tgLGNfwAGHwePw0mulHQllV34n0T25uYSu1k0hRKkWXF890B1yS47w==",
16 | "requires": {
17 | "@types/babel-types": "*"
18 | }
19 | },
20 | "abbrev": {
21 | "version": "1.1.1",
22 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz",
23 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q=="
24 | },
25 | "accepts": {
26 | "version": "1.3.7",
27 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
28 | "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
29 | "requires": {
30 | "mime-types": "~2.1.24",
31 | "negotiator": "0.6.2"
32 | }
33 | },
34 | "acorn": {
35 | "version": "3.3.0",
36 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz",
37 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo="
38 | },
39 | "acorn-globals": {
40 | "version": "3.1.0",
41 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz",
42 | "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=",
43 | "requires": {
44 | "acorn": "^4.0.4"
45 | },
46 | "dependencies": {
47 | "acorn": {
48 | "version": "4.0.13",
49 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
50 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
51 | }
52 | }
53 | },
54 | "align-text": {
55 | "version": "0.1.4",
56 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
57 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
58 | "requires": {
59 | "kind-of": "^3.0.2",
60 | "longest": "^1.0.1",
61 | "repeat-string": "^1.5.2"
62 | }
63 | },
64 | "amdefine": {
65 | "version": "1.0.1",
66 | "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz",
67 | "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU="
68 | },
69 | "ansi-regex": {
70 | "version": "2.1.1",
71 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
72 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
73 | },
74 | "aproba": {
75 | "version": "1.2.0",
76 | "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
77 | "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw=="
78 | },
79 | "are-we-there-yet": {
80 | "version": "1.1.5",
81 | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz",
82 | "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==",
83 | "requires": {
84 | "delegates": "^1.0.0",
85 | "readable-stream": "^2.0.6"
86 | }
87 | },
88 | "array-flatten": {
89 | "version": "1.1.1",
90 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
91 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
92 | },
93 | "asap": {
94 | "version": "2.0.6",
95 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
96 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY="
97 | },
98 | "babel-runtime": {
99 | "version": "6.26.0",
100 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz",
101 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=",
102 | "requires": {
103 | "core-js": "^2.4.0",
104 | "regenerator-runtime": "^0.11.0"
105 | }
106 | },
107 | "babel-types": {
108 | "version": "6.26.0",
109 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz",
110 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=",
111 | "requires": {
112 | "babel-runtime": "^6.26.0",
113 | "esutils": "^2.0.2",
114 | "lodash": "^4.17.4",
115 | "to-fast-properties": "^1.0.3"
116 | }
117 | },
118 | "babylon": {
119 | "version": "6.18.0",
120 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz",
121 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ=="
122 | },
123 | "balanced-match": {
124 | "version": "1.0.0",
125 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
126 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c="
127 | },
128 | "basic-auth": {
129 | "version": "2.0.1",
130 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.1.tgz",
131 | "integrity": "sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==",
132 | "requires": {
133 | "safe-buffer": "5.1.2"
134 | }
135 | },
136 | "bcrypt": {
137 | "version": "4.0.1",
138 | "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-4.0.1.tgz",
139 | "integrity": "sha512-hSIZHkUxIDS5zA2o00Kf2O5RfVbQ888n54xQoF/eIaquU4uaLxK8vhhBdktd0B3n2MjkcAWzv4mnhogykBKOUQ==",
140 | "requires": {
141 | "node-addon-api": "^2.0.0",
142 | "node-pre-gyp": "0.14.0"
143 | }
144 | },
145 | "bl": {
146 | "version": "2.2.0",
147 | "resolved": "https://registry.npmjs.org/bl/-/bl-2.2.0.tgz",
148 | "integrity": "sha512-wbgvOpqopSr7uq6fJrLH8EsvYMJf9gzfo2jCsL2eTy75qXPukA4pCgHamOQkZtY5vmfVtjB+P3LNlMHW5CEZXA==",
149 | "requires": {
150 | "readable-stream": "^2.3.5",
151 | "safe-buffer": "^5.1.1"
152 | }
153 | },
154 | "bluebird": {
155 | "version": "3.5.1",
156 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz",
157 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA=="
158 | },
159 | "body-parser": {
160 | "version": "1.18.3",
161 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.3.tgz",
162 | "integrity": "sha1-WykhmP/dVTs6DyDe0FkrlWlVyLQ=",
163 | "requires": {
164 | "bytes": "3.0.0",
165 | "content-type": "~1.0.4",
166 | "debug": "2.6.9",
167 | "depd": "~1.1.2",
168 | "http-errors": "~1.6.3",
169 | "iconv-lite": "0.4.23",
170 | "on-finished": "~2.3.0",
171 | "qs": "6.5.2",
172 | "raw-body": "2.3.3",
173 | "type-is": "~1.6.16"
174 | }
175 | },
176 | "brace-expansion": {
177 | "version": "1.1.11",
178 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
179 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
180 | "requires": {
181 | "balanced-match": "^1.0.0",
182 | "concat-map": "0.0.1"
183 | }
184 | },
185 | "bson": {
186 | "version": "1.1.3",
187 | "resolved": "https://registry.npmjs.org/bson/-/bson-1.1.3.tgz",
188 | "integrity": "sha512-TdiJxMVnodVS7r0BdL42y/pqC9cL2iKynVwA0Ho3qbsQYr428veL3l7BQyuqiw+Q5SqqoT0m4srSY/BlZ9AxXg=="
189 | },
190 | "bytes": {
191 | "version": "3.0.0",
192 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
193 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
194 | },
195 | "camelcase": {
196 | "version": "1.2.1",
197 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz",
198 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk="
199 | },
200 | "center-align": {
201 | "version": "0.1.3",
202 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz",
203 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=",
204 | "requires": {
205 | "align-text": "^0.1.3",
206 | "lazy-cache": "^1.0.3"
207 | }
208 | },
209 | "character-parser": {
210 | "version": "2.2.0",
211 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
212 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
213 | "requires": {
214 | "is-regex": "^1.0.3"
215 | }
216 | },
217 | "chownr": {
218 | "version": "1.1.4",
219 | "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz",
220 | "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg=="
221 | },
222 | "clean-css": {
223 | "version": "3.4.28",
224 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-3.4.28.tgz",
225 | "integrity": "sha1-vxlF6C/ICPVWlebd6uwBQA79A/8=",
226 | "requires": {
227 | "commander": "2.8.x",
228 | "source-map": "0.4.x"
229 | }
230 | },
231 | "cliui": {
232 | "version": "2.1.0",
233 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz",
234 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=",
235 | "requires": {
236 | "center-align": "^0.1.1",
237 | "right-align": "^0.1.1",
238 | "wordwrap": "0.0.2"
239 | }
240 | },
241 | "code-point-at": {
242 | "version": "1.1.0",
243 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
244 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
245 | },
246 | "commander": {
247 | "version": "2.8.1",
248 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.8.1.tgz",
249 | "integrity": "sha1-Br42f+v9oMMwqh4qBy09yXYkJdQ=",
250 | "requires": {
251 | "graceful-readlink": ">= 1.0.0"
252 | }
253 | },
254 | "concat-map": {
255 | "version": "0.0.1",
256 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
257 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
258 | },
259 | "console-control-strings": {
260 | "version": "1.1.0",
261 | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
262 | "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
263 | },
264 | "constantinople": {
265 | "version": "3.1.2",
266 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz",
267 | "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==",
268 | "requires": {
269 | "@types/babel-types": "^7.0.0",
270 | "@types/babylon": "^6.16.2",
271 | "babel-types": "^6.26.0",
272 | "babylon": "^6.18.0"
273 | }
274 | },
275 | "content-disposition": {
276 | "version": "0.5.2",
277 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
278 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ="
279 | },
280 | "content-type": {
281 | "version": "1.0.4",
282 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz",
283 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA=="
284 | },
285 | "cookie": {
286 | "version": "0.3.1",
287 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz",
288 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s="
289 | },
290 | "cookie-parser": {
291 | "version": "1.4.4",
292 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.4.tgz",
293 | "integrity": "sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==",
294 | "requires": {
295 | "cookie": "0.3.1",
296 | "cookie-signature": "1.0.6"
297 | }
298 | },
299 | "cookie-signature": {
300 | "version": "1.0.6",
301 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
302 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
303 | },
304 | "core-js": {
305 | "version": "2.6.11",
306 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
307 | "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg=="
308 | },
309 | "core-util-is": {
310 | "version": "1.0.2",
311 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
312 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
313 | },
314 | "debug": {
315 | "version": "2.6.9",
316 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
317 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
318 | "requires": {
319 | "ms": "2.0.0"
320 | }
321 | },
322 | "decamelize": {
323 | "version": "1.2.0",
324 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
325 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA="
326 | },
327 | "deep-extend": {
328 | "version": "0.6.0",
329 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
330 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
331 | },
332 | "delegates": {
333 | "version": "1.0.0",
334 | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
335 | "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
336 | },
337 | "denque": {
338 | "version": "1.4.1",
339 | "resolved": "https://registry.npmjs.org/denque/-/denque-1.4.1.tgz",
340 | "integrity": "sha512-OfzPuSZKGcgr96rf1oODnfjqBFmr1DVoc/TrItj3Ohe0Ah1C5WX5Baquw/9U9KovnQ88EqmJbD66rKYUQYN1tQ=="
341 | },
342 | "depd": {
343 | "version": "1.1.2",
344 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
345 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak="
346 | },
347 | "destroy": {
348 | "version": "1.0.4",
349 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
350 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA="
351 | },
352 | "detect-libc": {
353 | "version": "1.0.3",
354 | "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
355 | "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups="
356 | },
357 | "doctypes": {
358 | "version": "1.1.0",
359 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
360 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
361 | },
362 | "ee-first": {
363 | "version": "1.1.1",
364 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
365 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0="
366 | },
367 | "encodeurl": {
368 | "version": "1.0.2",
369 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
370 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
371 | },
372 | "escape-html": {
373 | "version": "1.0.3",
374 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
375 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
376 | },
377 | "esutils": {
378 | "version": "2.0.3",
379 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
380 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g=="
381 | },
382 | "etag": {
383 | "version": "1.8.1",
384 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
385 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
386 | },
387 | "express": {
388 | "version": "4.16.4",
389 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.4.tgz",
390 | "integrity": "sha512-j12Uuyb4FMrd/qQAm6uCHAkPtO8FDTRJZBDd5D2KOL2eLaz1yUNdUB/NOIyq0iU4q4cFarsUCrnFDPBcnksuOg==",
391 | "requires": {
392 | "accepts": "~1.3.5",
393 | "array-flatten": "1.1.1",
394 | "body-parser": "1.18.3",
395 | "content-disposition": "0.5.2",
396 | "content-type": "~1.0.4",
397 | "cookie": "0.3.1",
398 | "cookie-signature": "1.0.6",
399 | "debug": "2.6.9",
400 | "depd": "~1.1.2",
401 | "encodeurl": "~1.0.2",
402 | "escape-html": "~1.0.3",
403 | "etag": "~1.8.1",
404 | "finalhandler": "1.1.1",
405 | "fresh": "0.5.2",
406 | "merge-descriptors": "1.0.1",
407 | "methods": "~1.1.2",
408 | "on-finished": "~2.3.0",
409 | "parseurl": "~1.3.2",
410 | "path-to-regexp": "0.1.7",
411 | "proxy-addr": "~2.0.4",
412 | "qs": "6.5.2",
413 | "range-parser": "~1.2.0",
414 | "safe-buffer": "5.1.2",
415 | "send": "0.16.2",
416 | "serve-static": "1.13.2",
417 | "setprototypeof": "1.1.0",
418 | "statuses": "~1.4.0",
419 | "type-is": "~1.6.16",
420 | "utils-merge": "1.0.1",
421 | "vary": "~1.1.2"
422 | }
423 | },
424 | "express-session": {
425 | "version": "1.17.0",
426 | "resolved": "https://registry.npmjs.org/express-session/-/express-session-1.17.0.tgz",
427 | "integrity": "sha512-t4oX2z7uoSqATbMfsxWMbNjAL0T5zpvcJCk3Z9wnPPN7ibddhnmDZXHfEcoBMG2ojKXZoCyPMc5FbtK+G7SoDg==",
428 | "requires": {
429 | "cookie": "0.4.0",
430 | "cookie-signature": "1.0.6",
431 | "debug": "2.6.9",
432 | "depd": "~2.0.0",
433 | "on-headers": "~1.0.2",
434 | "parseurl": "~1.3.3",
435 | "safe-buffer": "5.2.0",
436 | "uid-safe": "~2.1.5"
437 | },
438 | "dependencies": {
439 | "cookie": {
440 | "version": "0.4.0",
441 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz",
442 | "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg=="
443 | },
444 | "depd": {
445 | "version": "2.0.0",
446 | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
447 | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw=="
448 | },
449 | "safe-buffer": {
450 | "version": "5.2.0",
451 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
452 | "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
453 | }
454 | }
455 | },
456 | "finalhandler": {
457 | "version": "1.1.1",
458 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz",
459 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==",
460 | "requires": {
461 | "debug": "2.6.9",
462 | "encodeurl": "~1.0.2",
463 | "escape-html": "~1.0.3",
464 | "on-finished": "~2.3.0",
465 | "parseurl": "~1.3.2",
466 | "statuses": "~1.4.0",
467 | "unpipe": "~1.0.0"
468 | }
469 | },
470 | "forwarded": {
471 | "version": "0.1.2",
472 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz",
473 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ="
474 | },
475 | "fresh": {
476 | "version": "0.5.2",
477 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
478 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
479 | },
480 | "fs-minipass": {
481 | "version": "1.2.7",
482 | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz",
483 | "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==",
484 | "requires": {
485 | "minipass": "^2.6.0"
486 | }
487 | },
488 | "fs.realpath": {
489 | "version": "1.0.0",
490 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
491 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
492 | },
493 | "function-bind": {
494 | "version": "1.1.1",
495 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
496 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
497 | },
498 | "gauge": {
499 | "version": "2.7.4",
500 | "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
501 | "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
502 | "requires": {
503 | "aproba": "^1.0.3",
504 | "console-control-strings": "^1.0.0",
505 | "has-unicode": "^2.0.0",
506 | "object-assign": "^4.1.0",
507 | "signal-exit": "^3.0.0",
508 | "string-width": "^1.0.1",
509 | "strip-ansi": "^3.0.1",
510 | "wide-align": "^1.1.0"
511 | }
512 | },
513 | "glob": {
514 | "version": "7.1.6",
515 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
516 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
517 | "requires": {
518 | "fs.realpath": "^1.0.0",
519 | "inflight": "^1.0.4",
520 | "inherits": "2",
521 | "minimatch": "^3.0.4",
522 | "once": "^1.3.0",
523 | "path-is-absolute": "^1.0.0"
524 | }
525 | },
526 | "graceful-readlink": {
527 | "version": "1.0.1",
528 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz",
529 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU="
530 | },
531 | "has": {
532 | "version": "1.0.3",
533 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
534 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
535 | "requires": {
536 | "function-bind": "^1.1.1"
537 | }
538 | },
539 | "has-unicode": {
540 | "version": "2.0.1",
541 | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
542 | "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
543 | },
544 | "http-errors": {
545 | "version": "1.6.3",
546 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
547 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
548 | "requires": {
549 | "depd": "~1.1.2",
550 | "inherits": "2.0.3",
551 | "setprototypeof": "1.1.0",
552 | "statuses": ">= 1.4.0 < 2"
553 | }
554 | },
555 | "iconv-lite": {
556 | "version": "0.4.23",
557 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.23.tgz",
558 | "integrity": "sha512-neyTUVFtahjf0mB3dZT77u+8O0QB89jFdnBkd5P1JgYPbPaia3gXXOVL2fq8VyU2gMMD7SaN7QukTB/pmXYvDA==",
559 | "requires": {
560 | "safer-buffer": ">= 2.1.2 < 3"
561 | }
562 | },
563 | "ignore-walk": {
564 | "version": "3.0.3",
565 | "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz",
566 | "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==",
567 | "requires": {
568 | "minimatch": "^3.0.4"
569 | }
570 | },
571 | "inflight": {
572 | "version": "1.0.6",
573 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
574 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
575 | "requires": {
576 | "once": "^1.3.0",
577 | "wrappy": "1"
578 | }
579 | },
580 | "inherits": {
581 | "version": "2.0.3",
582 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
583 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
584 | },
585 | "ini": {
586 | "version": "1.3.5",
587 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz",
588 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw=="
589 | },
590 | "ipaddr.js": {
591 | "version": "1.9.1",
592 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
593 | "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g=="
594 | },
595 | "is-buffer": {
596 | "version": "1.1.6",
597 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
598 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
599 | },
600 | "is-expression": {
601 | "version": "3.0.0",
602 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz",
603 | "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=",
604 | "requires": {
605 | "acorn": "~4.0.2",
606 | "object-assign": "^4.0.1"
607 | },
608 | "dependencies": {
609 | "acorn": {
610 | "version": "4.0.13",
611 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz",
612 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c="
613 | }
614 | }
615 | },
616 | "is-fullwidth-code-point": {
617 | "version": "1.0.0",
618 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
619 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
620 | "requires": {
621 | "number-is-nan": "^1.0.0"
622 | }
623 | },
624 | "is-promise": {
625 | "version": "2.1.0",
626 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
627 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o="
628 | },
629 | "is-regex": {
630 | "version": "1.0.5",
631 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
632 | "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
633 | "requires": {
634 | "has": "^1.0.3"
635 | }
636 | },
637 | "isarray": {
638 | "version": "1.0.0",
639 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
640 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
641 | },
642 | "js-stringify": {
643 | "version": "1.0.2",
644 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
645 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
646 | },
647 | "jstransformer": {
648 | "version": "1.0.0",
649 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
650 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
651 | "requires": {
652 | "is-promise": "^2.0.0",
653 | "promise": "^7.0.1"
654 | }
655 | },
656 | "kareem": {
657 | "version": "2.3.1",
658 | "resolved": "https://registry.npmjs.org/kareem/-/kareem-2.3.1.tgz",
659 | "integrity": "sha512-l3hLhffs9zqoDe8zjmb/mAN4B8VT3L56EUvKNqLFVs9YlFA+zx7ke1DO8STAdDyYNkeSo1nKmjuvQeI12So8Xw=="
660 | },
661 | "kind-of": {
662 | "version": "3.2.2",
663 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
664 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
665 | "requires": {
666 | "is-buffer": "^1.1.5"
667 | }
668 | },
669 | "lazy-cache": {
670 | "version": "1.0.4",
671 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz",
672 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4="
673 | },
674 | "lodash": {
675 | "version": "4.17.15",
676 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
677 | "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A=="
678 | },
679 | "longest": {
680 | "version": "1.0.1",
681 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
682 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
683 | },
684 | "media-typer": {
685 | "version": "0.3.0",
686 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz",
687 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g="
688 | },
689 | "memory-pager": {
690 | "version": "1.5.0",
691 | "resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
692 | "integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
693 | "optional": true
694 | },
695 | "merge-descriptors": {
696 | "version": "1.0.1",
697 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
698 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
699 | },
700 | "methods": {
701 | "version": "1.1.2",
702 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
703 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4="
704 | },
705 | "mime": {
706 | "version": "1.4.1",
707 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
708 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ=="
709 | },
710 | "mime-db": {
711 | "version": "1.43.0",
712 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
713 | "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ=="
714 | },
715 | "mime-types": {
716 | "version": "2.1.26",
717 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
718 | "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
719 | "requires": {
720 | "mime-db": "1.43.0"
721 | }
722 | },
723 | "minimatch": {
724 | "version": "3.0.4",
725 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
726 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
727 | "requires": {
728 | "brace-expansion": "^1.1.7"
729 | }
730 | },
731 | "minimist": {
732 | "version": "0.0.8",
733 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
734 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
735 | },
736 | "minipass": {
737 | "version": "2.9.0",
738 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz",
739 | "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==",
740 | "requires": {
741 | "safe-buffer": "^5.1.2",
742 | "yallist": "^3.0.0"
743 | }
744 | },
745 | "minizlib": {
746 | "version": "1.3.3",
747 | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz",
748 | "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==",
749 | "requires": {
750 | "minipass": "^2.9.0"
751 | }
752 | },
753 | "mkdirp": {
754 | "version": "0.5.1",
755 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
756 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
757 | "requires": {
758 | "minimist": "0.0.8"
759 | }
760 | },
761 | "mongodb": {
762 | "version": "3.5.4",
763 | "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.4.tgz",
764 | "integrity": "sha512-xGH41Ig4dkSH5ROGezkgDbsgt/v5zbNUwE3TcFsSbDc6Qn3Qil17dhLsESSDDPTiyFDCPJRpfd4887dtsPgKtA==",
765 | "requires": {
766 | "bl": "^2.2.0",
767 | "bson": "^1.1.1",
768 | "denque": "^1.4.1",
769 | "require_optional": "^1.0.1",
770 | "safe-buffer": "^5.1.2",
771 | "saslprep": "^1.0.0"
772 | }
773 | },
774 | "mongoose": {
775 | "version": "5.9.3",
776 | "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.9.3.tgz",
777 | "integrity": "sha512-wgr7lpneH8VZ2limSWhqzOenlZVobPvIUvrjUhw8/afo2GzxjtJ/icAhbXV+itZcL7sFtfLSeSm8iLdMxzWqfw==",
778 | "requires": {
779 | "bson": "~1.1.1",
780 | "kareem": "2.3.1",
781 | "mongodb": "3.5.4",
782 | "mongoose-legacy-pluralize": "1.0.2",
783 | "mpath": "0.6.0",
784 | "mquery": "3.2.2",
785 | "ms": "2.1.2",
786 | "regexp-clone": "1.0.0",
787 | "safe-buffer": "5.1.2",
788 | "sift": "7.0.1",
789 | "sliced": "1.0.1"
790 | },
791 | "dependencies": {
792 | "ms": {
793 | "version": "2.1.2",
794 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
795 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
796 | }
797 | }
798 | },
799 | "mongoose-legacy-pluralize": {
800 | "version": "1.0.2",
801 | "resolved": "https://registry.npmjs.org/mongoose-legacy-pluralize/-/mongoose-legacy-pluralize-1.0.2.tgz",
802 | "integrity": "sha512-Yo/7qQU4/EyIS8YDFSeenIvXxZN+ld7YdV9LqFVQJzTLye8unujAWPZ4NWKfFA+RNjh+wvTWKY9Z3E5XM6ZZiQ=="
803 | },
804 | "morgan": {
805 | "version": "1.9.1",
806 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.1.tgz",
807 | "integrity": "sha512-HQStPIV4y3afTiCYVxirakhlCfGkI161c76kKFca7Fk1JusM//Qeo1ej2XaMniiNeaZklMVrh3vTtIzpzwbpmA==",
808 | "requires": {
809 | "basic-auth": "~2.0.0",
810 | "debug": "2.6.9",
811 | "depd": "~1.1.2",
812 | "on-finished": "~2.3.0",
813 | "on-headers": "~1.0.1"
814 | }
815 | },
816 | "mpath": {
817 | "version": "0.6.0",
818 | "resolved": "https://registry.npmjs.org/mpath/-/mpath-0.6.0.tgz",
819 | "integrity": "sha512-i75qh79MJ5Xo/sbhxrDrPSEG0H/mr1kcZXJ8dH6URU5jD/knFxCVqVC/gVSW7GIXL/9hHWlT9haLbCXWOll3qw=="
820 | },
821 | "mquery": {
822 | "version": "3.2.2",
823 | "resolved": "https://registry.npmjs.org/mquery/-/mquery-3.2.2.tgz",
824 | "integrity": "sha512-XB52992COp0KP230I3qloVUbkLUxJIu328HBP2t2EsxSFtf4W1HPSOBWOXf1bqxK4Xbb66lfMJ+Bpfd9/yZE1Q==",
825 | "requires": {
826 | "bluebird": "3.5.1",
827 | "debug": "3.1.0",
828 | "regexp-clone": "^1.0.0",
829 | "safe-buffer": "5.1.2",
830 | "sliced": "1.0.1"
831 | },
832 | "dependencies": {
833 | "debug": {
834 | "version": "3.1.0",
835 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
836 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
837 | "requires": {
838 | "ms": "2.0.0"
839 | }
840 | }
841 | }
842 | },
843 | "ms": {
844 | "version": "2.0.0",
845 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
846 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
847 | },
848 | "needle": {
849 | "version": "2.3.3",
850 | "resolved": "https://registry.npmjs.org/needle/-/needle-2.3.3.tgz",
851 | "integrity": "sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==",
852 | "requires": {
853 | "debug": "^3.2.6",
854 | "iconv-lite": "^0.4.4",
855 | "sax": "^1.2.4"
856 | },
857 | "dependencies": {
858 | "debug": {
859 | "version": "3.2.6",
860 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
861 | "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
862 | "requires": {
863 | "ms": "^2.1.1"
864 | }
865 | },
866 | "ms": {
867 | "version": "2.1.2",
868 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
869 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w=="
870 | }
871 | }
872 | },
873 | "negotiator": {
874 | "version": "0.6.2",
875 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
876 | "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw=="
877 | },
878 | "node-addon-api": {
879 | "version": "2.0.0",
880 | "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.0.tgz",
881 | "integrity": "sha512-ASCL5U13as7HhOExbT6OlWJJUV/lLzL2voOSP1UVehpRD8FbSrSDjfScK/KwAvVTI5AS6r4VwbOMlIqtvRidnA=="
882 | },
883 | "node-pre-gyp": {
884 | "version": "0.14.0",
885 | "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz",
886 | "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==",
887 | "requires": {
888 | "detect-libc": "^1.0.2",
889 | "mkdirp": "^0.5.1",
890 | "needle": "^2.2.1",
891 | "nopt": "^4.0.1",
892 | "npm-packlist": "^1.1.6",
893 | "npmlog": "^4.0.2",
894 | "rc": "^1.2.7",
895 | "rimraf": "^2.6.1",
896 | "semver": "^5.3.0",
897 | "tar": "^4.4.2"
898 | }
899 | },
900 | "nopt": {
901 | "version": "4.0.1",
902 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
903 | "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
904 | "requires": {
905 | "abbrev": "1",
906 | "osenv": "^0.1.4"
907 | }
908 | },
909 | "npm-bundled": {
910 | "version": "1.1.1",
911 | "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz",
912 | "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==",
913 | "requires": {
914 | "npm-normalize-package-bin": "^1.0.1"
915 | }
916 | },
917 | "npm-normalize-package-bin": {
918 | "version": "1.0.1",
919 | "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz",
920 | "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA=="
921 | },
922 | "npm-packlist": {
923 | "version": "1.4.8",
924 | "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz",
925 | "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==",
926 | "requires": {
927 | "ignore-walk": "^3.0.1",
928 | "npm-bundled": "^1.0.1",
929 | "npm-normalize-package-bin": "^1.0.1"
930 | }
931 | },
932 | "npmlog": {
933 | "version": "4.1.2",
934 | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
935 | "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
936 | "requires": {
937 | "are-we-there-yet": "~1.1.2",
938 | "console-control-strings": "~1.1.0",
939 | "gauge": "~2.7.3",
940 | "set-blocking": "~2.0.0"
941 | }
942 | },
943 | "number-is-nan": {
944 | "version": "1.0.1",
945 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
946 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
947 | },
948 | "object-assign": {
949 | "version": "4.1.1",
950 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
951 | "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
952 | },
953 | "on-finished": {
954 | "version": "2.3.0",
955 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
956 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
957 | "requires": {
958 | "ee-first": "1.1.1"
959 | }
960 | },
961 | "on-headers": {
962 | "version": "1.0.2",
963 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz",
964 | "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA=="
965 | },
966 | "once": {
967 | "version": "1.4.0",
968 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
969 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
970 | "requires": {
971 | "wrappy": "1"
972 | }
973 | },
974 | "os-homedir": {
975 | "version": "1.0.2",
976 | "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
977 | "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M="
978 | },
979 | "os-tmpdir": {
980 | "version": "1.0.2",
981 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
982 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
983 | },
984 | "osenv": {
985 | "version": "0.1.5",
986 | "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz",
987 | "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==",
988 | "requires": {
989 | "os-homedir": "^1.0.0",
990 | "os-tmpdir": "^1.0.0"
991 | }
992 | },
993 | "parseurl": {
994 | "version": "1.3.3",
995 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
996 | "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ=="
997 | },
998 | "passport": {
999 | "version": "0.4.1",
1000 | "resolved": "https://registry.npmjs.org/passport/-/passport-0.4.1.tgz",
1001 | "integrity": "sha512-IxXgZZs8d7uFSt3eqNjM9NQ3g3uQCW5avD8mRNoXV99Yig50vjuaez6dQK2qC0kVWPRTujxY0dWgGfT09adjYg==",
1002 | "requires": {
1003 | "passport-strategy": "1.x.x",
1004 | "pause": "0.0.1"
1005 | }
1006 | },
1007 | "passport-local": {
1008 | "version": "1.0.0",
1009 | "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz",
1010 | "integrity": "sha1-H+YyaMkudWBmJkN+O5BmYsFbpu4=",
1011 | "requires": {
1012 | "passport-strategy": "1.x.x"
1013 | }
1014 | },
1015 | "passport-strategy": {
1016 | "version": "1.0.0",
1017 | "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz",
1018 | "integrity": "sha1-tVOaqPwiWj0a0XlHbd8ja0QPUuQ="
1019 | },
1020 | "path-is-absolute": {
1021 | "version": "1.0.1",
1022 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
1023 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
1024 | },
1025 | "path-parse": {
1026 | "version": "1.0.6",
1027 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
1028 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw=="
1029 | },
1030 | "path-to-regexp": {
1031 | "version": "0.1.7",
1032 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
1033 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
1034 | },
1035 | "pause": {
1036 | "version": "0.0.1",
1037 | "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
1038 | "integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
1039 | },
1040 | "process-nextick-args": {
1041 | "version": "2.0.1",
1042 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
1043 | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag=="
1044 | },
1045 | "promise": {
1046 | "version": "7.3.1",
1047 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz",
1048 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==",
1049 | "requires": {
1050 | "asap": "~2.0.3"
1051 | }
1052 | },
1053 | "proxy-addr": {
1054 | "version": "2.0.6",
1055 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
1056 | "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
1057 | "requires": {
1058 | "forwarded": "~0.1.2",
1059 | "ipaddr.js": "1.9.1"
1060 | }
1061 | },
1062 | "pug": {
1063 | "version": "2.0.0-beta11",
1064 | "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.0-beta11.tgz",
1065 | "integrity": "sha1-Favmr1AEx+LPRhPksnRlyVRrXwE=",
1066 | "requires": {
1067 | "pug-code-gen": "^1.1.1",
1068 | "pug-filters": "^2.1.1",
1069 | "pug-lexer": "^3.0.0",
1070 | "pug-linker": "^2.0.2",
1071 | "pug-load": "^2.0.5",
1072 | "pug-parser": "^2.0.2",
1073 | "pug-runtime": "^2.0.3",
1074 | "pug-strip-comments": "^1.0.2"
1075 | }
1076 | },
1077 | "pug-attrs": {
1078 | "version": "2.0.4",
1079 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.4.tgz",
1080 | "integrity": "sha512-TaZ4Z2TWUPDJcV3wjU3RtUXMrd3kM4Wzjbe3EWnSsZPsJ3LDI0F3yCnf2/W7PPFF+edUFQ0HgDL1IoxSz5K8EQ==",
1081 | "requires": {
1082 | "constantinople": "^3.0.1",
1083 | "js-stringify": "^1.0.1",
1084 | "pug-runtime": "^2.0.5"
1085 | }
1086 | },
1087 | "pug-code-gen": {
1088 | "version": "1.1.1",
1089 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-1.1.1.tgz",
1090 | "integrity": "sha1-HPcnRO8qA56uajNAyqoRBYcSWOg=",
1091 | "requires": {
1092 | "constantinople": "^3.0.1",
1093 | "doctypes": "^1.1.0",
1094 | "js-stringify": "^1.0.1",
1095 | "pug-attrs": "^2.0.2",
1096 | "pug-error": "^1.3.2",
1097 | "pug-runtime": "^2.0.3",
1098 | "void-elements": "^2.0.1",
1099 | "with": "^5.0.0"
1100 | }
1101 | },
1102 | "pug-error": {
1103 | "version": "1.3.3",
1104 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.3.tgz",
1105 | "integrity": "sha512-qE3YhESP2mRAWMFJgKdtT5D7ckThRScXRwkfo+Erqga7dyJdY3ZquspprMCj/9sJ2ijm5hXFWQE/A3l4poMWiQ=="
1106 | },
1107 | "pug-filters": {
1108 | "version": "2.1.5",
1109 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-2.1.5.tgz",
1110 | "integrity": "sha512-xkw71KtrC4sxleKiq+cUlQzsiLn8pM5+vCgkChW2E6oNOzaqTSIBKIQ5cl4oheuDzvJYCTSYzRaVinMUrV4YLQ==",
1111 | "requires": {
1112 | "clean-css": "^3.3.0",
1113 | "constantinople": "^3.0.1",
1114 | "jstransformer": "1.0.0",
1115 | "pug-error": "^1.3.2",
1116 | "pug-walk": "^1.1.5",
1117 | "resolve": "^1.1.6",
1118 | "uglify-js": "^2.6.1"
1119 | }
1120 | },
1121 | "pug-lexer": {
1122 | "version": "3.1.0",
1123 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-3.1.0.tgz",
1124 | "integrity": "sha1-/QhzdtSmdbT1n4/vQiiDQ06VgaI=",
1125 | "requires": {
1126 | "character-parser": "^2.1.1",
1127 | "is-expression": "^3.0.0",
1128 | "pug-error": "^1.3.2"
1129 | }
1130 | },
1131 | "pug-linker": {
1132 | "version": "2.0.3",
1133 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-2.0.3.tgz",
1134 | "integrity": "sha1-szH/olc33eacEntWwQ/xf652bco=",
1135 | "requires": {
1136 | "pug-error": "^1.3.2",
1137 | "pug-walk": "^1.1.2"
1138 | }
1139 | },
1140 | "pug-load": {
1141 | "version": "2.0.12",
1142 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.12.tgz",
1143 | "integrity": "sha512-UqpgGpyyXRYgJs/X60sE6SIf8UBsmcHYKNaOccyVLEuT6OPBIMo6xMPhoJnqtB3Q3BbO4Z3Bjz5qDsUWh4rXsg==",
1144 | "requires": {
1145 | "object-assign": "^4.1.0",
1146 | "pug-walk": "^1.1.8"
1147 | }
1148 | },
1149 | "pug-parser": {
1150 | "version": "2.0.2",
1151 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-2.0.2.tgz",
1152 | "integrity": "sha1-U6aAz9BQOdywwn0CkJS8SnkmibA=",
1153 | "requires": {
1154 | "pug-error": "^1.3.2",
1155 | "token-stream": "0.0.1"
1156 | }
1157 | },
1158 | "pug-runtime": {
1159 | "version": "2.0.5",
1160 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.5.tgz",
1161 | "integrity": "sha512-P+rXKn9un4fQY77wtpcuFyvFaBww7/91f3jHa154qU26qFAnOe6SW1CbIDcxiG5lLK9HazYrMCCuDvNgDQNptw=="
1162 | },
1163 | "pug-strip-comments": {
1164 | "version": "1.0.4",
1165 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.4.tgz",
1166 | "integrity": "sha512-i5j/9CS4yFhSxHp5iKPHwigaig/VV9g+FgReLJWWHEHbvKsbqL0oP/K5ubuLco6Wu3Kan5p7u7qk8A4oLLh6vw==",
1167 | "requires": {
1168 | "pug-error": "^1.3.3"
1169 | }
1170 | },
1171 | "pug-walk": {
1172 | "version": "1.1.8",
1173 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.8.tgz",
1174 | "integrity": "sha512-GMu3M5nUL3fju4/egXwZO0XLi6fW/K3T3VTgFQ14GxNi8btlxgT5qZL//JwZFm/2Fa64J/PNS8AZeys3wiMkVA=="
1175 | },
1176 | "qs": {
1177 | "version": "6.5.2",
1178 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz",
1179 | "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA=="
1180 | },
1181 | "random-bytes": {
1182 | "version": "1.0.0",
1183 | "resolved": "https://registry.npmjs.org/random-bytes/-/random-bytes-1.0.0.tgz",
1184 | "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs="
1185 | },
1186 | "range-parser": {
1187 | "version": "1.2.1",
1188 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
1189 | "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg=="
1190 | },
1191 | "raw-body": {
1192 | "version": "2.3.3",
1193 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.3.tgz",
1194 | "integrity": "sha512-9esiElv1BrZoI3rCDuOuKCBRbuApGGaDPQfjSflGxdy4oyzqghxu6klEkkVIvBje+FF0BX9coEv8KqW6X/7njw==",
1195 | "requires": {
1196 | "bytes": "3.0.0",
1197 | "http-errors": "1.6.3",
1198 | "iconv-lite": "0.4.23",
1199 | "unpipe": "1.0.0"
1200 | }
1201 | },
1202 | "rc": {
1203 | "version": "1.2.8",
1204 | "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
1205 | "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
1206 | "requires": {
1207 | "deep-extend": "^0.6.0",
1208 | "ini": "~1.3.0",
1209 | "minimist": "^1.2.0",
1210 | "strip-json-comments": "~2.0.1"
1211 | },
1212 | "dependencies": {
1213 | "minimist": {
1214 | "version": "1.2.0",
1215 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
1216 | "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ="
1217 | }
1218 | }
1219 | },
1220 | "readable-stream": {
1221 | "version": "2.3.7",
1222 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
1223 | "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
1224 | "requires": {
1225 | "core-util-is": "~1.0.0",
1226 | "inherits": "~2.0.3",
1227 | "isarray": "~1.0.0",
1228 | "process-nextick-args": "~2.0.0",
1229 | "safe-buffer": "~5.1.1",
1230 | "string_decoder": "~1.1.1",
1231 | "util-deprecate": "~1.0.1"
1232 | }
1233 | },
1234 | "regenerator-runtime": {
1235 | "version": "0.11.1",
1236 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz",
1237 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg=="
1238 | },
1239 | "regexp-clone": {
1240 | "version": "1.0.0",
1241 | "resolved": "https://registry.npmjs.org/regexp-clone/-/regexp-clone-1.0.0.tgz",
1242 | "integrity": "sha512-TuAasHQNamyyJ2hb97IuBEif4qBHGjPHBS64sZwytpLEqtBQ1gPJTnOaQ6qmpET16cK14kkjbazl6+p0RRv0yw=="
1243 | },
1244 | "repeat-string": {
1245 | "version": "1.6.1",
1246 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
1247 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc="
1248 | },
1249 | "require_optional": {
1250 | "version": "1.0.1",
1251 | "resolved": "https://registry.npmjs.org/require_optional/-/require_optional-1.0.1.tgz",
1252 | "integrity": "sha512-qhM/y57enGWHAe3v/NcwML6a3/vfESLe/sGM2dII+gEO0BpKRUkWZow/tyloNqJyN6kXSl3RyyM8Ll5D/sJP8g==",
1253 | "requires": {
1254 | "resolve-from": "^2.0.0",
1255 | "semver": "^5.1.0"
1256 | }
1257 | },
1258 | "resolve": {
1259 | "version": "1.15.1",
1260 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz",
1261 | "integrity": "sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==",
1262 | "requires": {
1263 | "path-parse": "^1.0.6"
1264 | }
1265 | },
1266 | "resolve-from": {
1267 | "version": "2.0.0",
1268 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
1269 | "integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c="
1270 | },
1271 | "right-align": {
1272 | "version": "0.1.3",
1273 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz",
1274 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=",
1275 | "requires": {
1276 | "align-text": "^0.1.1"
1277 | }
1278 | },
1279 | "rimraf": {
1280 | "version": "2.7.1",
1281 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz",
1282 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==",
1283 | "requires": {
1284 | "glob": "^7.1.3"
1285 | }
1286 | },
1287 | "safe-buffer": {
1288 | "version": "5.1.2",
1289 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
1290 | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
1291 | },
1292 | "safer-buffer": {
1293 | "version": "2.1.2",
1294 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1295 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1296 | },
1297 | "saslprep": {
1298 | "version": "1.0.3",
1299 | "resolved": "https://registry.npmjs.org/saslprep/-/saslprep-1.0.3.tgz",
1300 | "integrity": "sha512-/MY/PEMbk2SuY5sScONwhUDsV2p77Znkb/q3nSVstq/yQzYJOH/Azh29p9oJLsl3LnQwSvZDKagDGBsBwSooag==",
1301 | "optional": true,
1302 | "requires": {
1303 | "sparse-bitfield": "^3.0.3"
1304 | }
1305 | },
1306 | "sax": {
1307 | "version": "1.2.4",
1308 | "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
1309 | "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
1310 | },
1311 | "semver": {
1312 | "version": "5.7.1",
1313 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
1314 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ=="
1315 | },
1316 | "send": {
1317 | "version": "0.16.2",
1318 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
1319 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
1320 | "requires": {
1321 | "debug": "2.6.9",
1322 | "depd": "~1.1.2",
1323 | "destroy": "~1.0.4",
1324 | "encodeurl": "~1.0.2",
1325 | "escape-html": "~1.0.3",
1326 | "etag": "~1.8.1",
1327 | "fresh": "0.5.2",
1328 | "http-errors": "~1.6.2",
1329 | "mime": "1.4.1",
1330 | "ms": "2.0.0",
1331 | "on-finished": "~2.3.0",
1332 | "range-parser": "~1.2.0",
1333 | "statuses": "~1.4.0"
1334 | }
1335 | },
1336 | "serve-static": {
1337 | "version": "1.13.2",
1338 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz",
1339 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==",
1340 | "requires": {
1341 | "encodeurl": "~1.0.2",
1342 | "escape-html": "~1.0.3",
1343 | "parseurl": "~1.3.2",
1344 | "send": "0.16.2"
1345 | }
1346 | },
1347 | "set-blocking": {
1348 | "version": "2.0.0",
1349 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
1350 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc="
1351 | },
1352 | "setprototypeof": {
1353 | "version": "1.1.0",
1354 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
1355 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ=="
1356 | },
1357 | "sift": {
1358 | "version": "7.0.1",
1359 | "resolved": "https://registry.npmjs.org/sift/-/sift-7.0.1.tgz",
1360 | "integrity": "sha512-oqD7PMJ+uO6jV9EQCl0LrRw1OwsiPsiFQR5AR30heR+4Dl7jBBbDLnNvWiak20tzZlSE1H7RB30SX/1j/YYT7g=="
1361 | },
1362 | "signal-exit": {
1363 | "version": "3.0.2",
1364 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
1365 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0="
1366 | },
1367 | "sliced": {
1368 | "version": "1.0.1",
1369 | "resolved": "https://registry.npmjs.org/sliced/-/sliced-1.0.1.tgz",
1370 | "integrity": "sha1-CzpmK10Ewxd7GSa+qCsD+Dei70E="
1371 | },
1372 | "source-map": {
1373 | "version": "0.4.4",
1374 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz",
1375 | "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=",
1376 | "requires": {
1377 | "amdefine": ">=0.0.4"
1378 | }
1379 | },
1380 | "sparse-bitfield": {
1381 | "version": "3.0.3",
1382 | "resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
1383 | "integrity": "sha1-/0rm5oZWBWuks+eSqzM004JzyhE=",
1384 | "optional": true,
1385 | "requires": {
1386 | "memory-pager": "^1.0.2"
1387 | }
1388 | },
1389 | "statuses": {
1390 | "version": "1.4.0",
1391 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
1392 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew=="
1393 | },
1394 | "string-width": {
1395 | "version": "1.0.2",
1396 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
1397 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
1398 | "requires": {
1399 | "code-point-at": "^1.0.0",
1400 | "is-fullwidth-code-point": "^1.0.0",
1401 | "strip-ansi": "^3.0.0"
1402 | }
1403 | },
1404 | "string_decoder": {
1405 | "version": "1.1.1",
1406 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
1407 | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
1408 | "requires": {
1409 | "safe-buffer": "~5.1.0"
1410 | }
1411 | },
1412 | "strip-ansi": {
1413 | "version": "3.0.1",
1414 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
1415 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
1416 | "requires": {
1417 | "ansi-regex": "^2.0.0"
1418 | }
1419 | },
1420 | "strip-json-comments": {
1421 | "version": "2.0.1",
1422 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
1423 | "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
1424 | },
1425 | "tar": {
1426 | "version": "4.4.13",
1427 | "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz",
1428 | "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==",
1429 | "requires": {
1430 | "chownr": "^1.1.1",
1431 | "fs-minipass": "^1.2.5",
1432 | "minipass": "^2.8.6",
1433 | "minizlib": "^1.2.1",
1434 | "mkdirp": "^0.5.0",
1435 | "safe-buffer": "^5.1.2",
1436 | "yallist": "^3.0.3"
1437 | }
1438 | },
1439 | "to-fast-properties": {
1440 | "version": "1.0.3",
1441 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz",
1442 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc="
1443 | },
1444 | "token-stream": {
1445 | "version": "0.0.1",
1446 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz",
1447 | "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo="
1448 | },
1449 | "type-is": {
1450 | "version": "1.6.18",
1451 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
1452 | "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==",
1453 | "requires": {
1454 | "media-typer": "0.3.0",
1455 | "mime-types": "~2.1.24"
1456 | }
1457 | },
1458 | "uglify-js": {
1459 | "version": "2.8.29",
1460 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz",
1461 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=",
1462 | "requires": {
1463 | "source-map": "~0.5.1",
1464 | "uglify-to-browserify": "~1.0.0",
1465 | "yargs": "~3.10.0"
1466 | },
1467 | "dependencies": {
1468 | "source-map": {
1469 | "version": "0.5.7",
1470 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
1471 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
1472 | }
1473 | }
1474 | },
1475 | "uglify-to-browserify": {
1476 | "version": "1.0.2",
1477 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz",
1478 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
1479 | "optional": true
1480 | },
1481 | "uid-safe": {
1482 | "version": "2.1.5",
1483 | "resolved": "https://registry.npmjs.org/uid-safe/-/uid-safe-2.1.5.tgz",
1484 | "integrity": "sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==",
1485 | "requires": {
1486 | "random-bytes": "~1.0.0"
1487 | }
1488 | },
1489 | "unpipe": {
1490 | "version": "1.0.0",
1491 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
1492 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw="
1493 | },
1494 | "util-deprecate": {
1495 | "version": "1.0.2",
1496 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1497 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1498 | },
1499 | "utils-merge": {
1500 | "version": "1.0.1",
1501 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
1502 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
1503 | },
1504 | "vary": {
1505 | "version": "1.1.2",
1506 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
1507 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw="
1508 | },
1509 | "void-elements": {
1510 | "version": "2.0.1",
1511 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz",
1512 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w="
1513 | },
1514 | "wide-align": {
1515 | "version": "1.1.3",
1516 | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
1517 | "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
1518 | "requires": {
1519 | "string-width": "^1.0.2 || 2"
1520 | }
1521 | },
1522 | "window-size": {
1523 | "version": "0.1.0",
1524 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz",
1525 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0="
1526 | },
1527 | "with": {
1528 | "version": "5.1.1",
1529 | "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz",
1530 | "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=",
1531 | "requires": {
1532 | "acorn": "^3.1.0",
1533 | "acorn-globals": "^3.0.0"
1534 | }
1535 | },
1536 | "wordwrap": {
1537 | "version": "0.0.2",
1538 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz",
1539 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8="
1540 | },
1541 | "wrappy": {
1542 | "version": "1.0.2",
1543 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
1544 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
1545 | },
1546 | "yallist": {
1547 | "version": "3.1.1",
1548 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
1549 | "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
1550 | },
1551 | "yargs": {
1552 | "version": "3.10.0",
1553 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz",
1554 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=",
1555 | "requires": {
1556 | "camelcase": "^1.0.2",
1557 | "cliui": "^2.1.0",
1558 | "decamelize": "^1.0.0",
1559 | "window-size": "0.1.0"
1560 | }
1561 | }
1562 | }
1563 | }
1564 |
--------------------------------------------------------------------------------