From 923bb277881c54373107f4566f23df7815e489f5 Mon Sep 17 00:00:00 2001 From: nikitas89 Date: Mon, 23 Oct 2017 22:03:11 +0800 Subject: [PATCH 01/20] set up mvc boilerplate with login/register and db WIP --- README.md | 24 +- config/ppConfig.js | 34 + index.js | 91 ++ models/user.js | 44 + package.json | 34 +- readmedocs/READMERef.text | 64 + readmedocs/flowchart.jpg | Bin 0 -> 51994 bytes routes/login_routes.js | 16 + routes/register_routes.js | 24 + views/home.handlebars | 7 + views/layouts/main.handlebars | 10 + views/users/login.handlebars | 14 + views/users/register.handlebars | 16 + views/users/show.handlebars | 4 + yarn.lock | 2250 +++++++++++++++++++++++++++++++ 15 files changed, 2613 insertions(+), 19 deletions(-) create mode 100644 config/ppConfig.js create mode 100644 index.js create mode 100644 models/user.js create mode 100644 readmedocs/READMERef.text create mode 100644 readmedocs/flowchart.jpg create mode 100644 routes/login_routes.js create mode 100644 routes/register_routes.js create mode 100644 views/home.handlebars create mode 100644 views/layouts/main.handlebars create mode 100644 views/users/login.handlebars create mode 100644 views/users/register.handlebars create mode 100644 views/users/show.handlebars create mode 100644 yarn.lock diff --git a/README.md b/README.md index da7531b0..e284558a 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,21 @@ -# Your Project Name +# Bus When -This is the starter code for WDI projects. Please update this README file with information specific to your project. Replace this paragraph for instance, with a short description of your project. Then update the sections below. Refer to your project specificaion for instructions on how to submit your projects. +This web app is used to lookup bus arrival times for the usual buses and stops that you need. -## Getting Started +##Flowchart + +![project-2]( P2-flowchart.jpg "Project 2") +![project-2]( P2-flowchart.jpg "Project 2") -Provide instructions here about how to get your project running on our local machine. Do we just need to clone and open a certain file or do we need to install anything first. + -What is needed to install and run the project, how do we install them + + + diff --git a/config/ppConfig.js b/config/ppConfig.js new file mode 100644 index 00000000..7338fefc --- /dev/null +++ b/config/ppConfig.js @@ -0,0 +1,34 @@ +const passport = require('passport'); +const LocalStrategy = require('passport-local').Strategy +const User = require('../models/user'); + +passport.serializeUser(function(user, done) { + done(null, user.id); +}); +passport.deserializeUser(function(id, done) { + User.findById(id, function(err, user) { + done(err, user); + }); +}); +passport.use(new LocalStrategy({ + usernameField: 'user[email]', + passwordField: 'user[password]' +}, function(email, password, done) { + User.findOne({ + email: email + }, function(err, user) { + if (err) return done(err); + + // If no user is found + if (!user) return done(null, false); + user.validPassword(password, (err, isMatch) => { + if (err) return done(null, false) + if (isMatch) return done(null, user) + return done(null, false, { + message: 'passwords dont match' + }) + }) + }); +})); + +module.exports = passport; diff --git a/index.js b/index.js new file mode 100644 index 00000000..080e121e --- /dev/null +++ b/index.js @@ -0,0 +1,91 @@ +const port = 3000 || process.env.PORT +const dbUrl = process.env.NODE_ENV === 'production' ? + process.env.MONGODB_URI : 'mongodb://localhost/project2' + +const express = require('express') +const mongoose = require('mongoose') // for DB +const User = require('./models/user') +const path = require('path') // for Public files +const exphbs = require('express-handlebars') // for Handlebars +const bodyParser = require('body-parser') // for accessing POST request +const methodOverride = require('method-override') // for accessing PUT / DELETE +const session = require('express-session') +const MongoStore = require('connect-mongo')(session) +const passport = require('./config/ppConfig'); + +require('dotenv').config({ + silent: true +}) + + +const register_routes = require('./routes/register_routes') +const login_routes = require('./routes/login_routes') + +const app = express() +// VIEW ENGINES aka handlebars setup +app.engine('handlebars', exphbs({ + defaultLayout: 'main' +})) +app.set('view engine', 'handlebars') + +app.use(express.static(path.join(__dirname, 'public'))) +app.use(function(req, res, next) { + console.log('Method: ' + req.method + ' Path: ' + req.url) + next() +}) +app.use(bodyParser.json()) +app.use(bodyParser.urlencoded({ + extended: true +})) +app.use(methodOverride('_method')) + +mongoose.Promise = global.Promise +mongoose.connect(dbUrl, { + useMongoClient: true + }) + .then( + () => { + console.log('db is connected') + }, + (err) => { + console.log(err) + } + ) + +//session + app.use(session({ + secret: process.env.SESSION_SECRET, + resave: false, + saveUninitialized: true, + store: new MongoStore({ + mongooseConnection: mongoose.connection + }) +})) +app.use(passport.initialize()); +app.use(passport.session()); + +app.get('/', (req, res) => { + res.render('home') +}) +// app.post('/geo', (req, res) => { +// var crd = navigator.geolocation.getCurrentPosition(success, error, options); +// res.render('home', crd) +// }) + +app.get('/profile/:slug', (req, res) => { + User.findOne({ + slug: req.params.slug + }) + .then((user) => { + res.render('users/show', { + user + }) + }) +}) + +app.use('/register', register_routes) +app.use('/login', login_routes) + +app.listen(port, () => { + console.log(`Server is running on ${port}`) +}) diff --git a/models/user.js b/models/user.js new file mode 100644 index 00000000..7e40010c --- /dev/null +++ b/models/user.js @@ -0,0 +1,44 @@ +const mongoose = require('mongoose') +const Schema = mongoose.Schema +const bcrypt = require('bcrypt') + + +var emailRegex = /^([\w-\.]+@([\w-]+\.)+[\w-]{2,4})?$/; + +var userSchema = new Schema({ + name: { + type: String, + minlength: [3, 'Name must be between 3 and 99 characters'], + maxlength: [99, 'Name must be between 3 and 99 characters'], + }, + email: { + type: String, + required: true, + unique: true, + lowercase: true, + match: emailRegex + }, + password: { + type: String, + required: true , + minlength: [8, 'Password must be between 8 and 99 characters'], + maxlength: [99, 'Password must be between 8 and 99 characters'], + }, slug: String +}); + +userSchema.pre('save', function(next) { + var user = this + user.slug = user.name.toLowerCase().split(' ').join('-') + bcrypt.hash(user.password, 10) + .then(hash => { + user.password = hash + console.log('pre save flow', user) + next() // next() is calling the save() + }) +}) + +userSchema.methods.validPassword = function (plainPassword, callback) { + bcrypt.compare(plainPassword, this.password, callback) +} +const User = mongoose.model('User', userSchema) +module.exports = User diff --git a/package.json b/package.json index e4fab379..bc15c8f4 100644 --- a/package.json +++ b/package.json @@ -1,8 +1,26 @@ -{ - "name": "project-2", - "version": "1.0.0", - "main": "index.js", - "repository": "https://github.com/wdi-sg/project-2.git", - "author": "Prima Aulia Gusta ", - "license": "MIT" -} + { + "name": "project2", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "repository": "https://github.com/wdi-sg/project-2.git", + "author": "Nikita Sinhal ", + "scripts": { + "start": "nodemon" + }, + "dependencies": { + "bcrypt": "^1.0.3", + "body-parser": "^1.18.2", + "connect-mongo": "^2.0.0", + "dotenv": "^4.0.0", + "express": "^4.16.2", + "express-handlebars": "^3.0.0", + "express-session": "^1.15.6", + "express-sessions": "^1.0.6", + "method-override": "^2.3.10", + "mongoose": "^4.12.3", + "nodemon": "^1.12.1", + "passport": "^0.4.0", + "passport-local": "^1.0.0" + } + } diff --git a/readmedocs/READMERef.text b/readmedocs/READMERef.text new file mode 100644 index 00000000..539ac252 --- /dev/null +++ b/readmedocs/READMERef.text @@ -0,0 +1,64 @@ +# Bus When + +This web app is used to lookup bus arrival times for the usual buses and stops that you need. + +## Getting Started + +Provide instructions here about how to get your project running on our local machine. Do we just need to clone and open a certain file or do we need to install anything first. + +### Prerequisites + +What is needed to install and run the project, how do we install them + +``` +Code example +``` + +### How to Use + +A step by step guide on how to install and use the project, for example if this is a game, how do we play it. + + +``` +Code example +``` + +More steps... + +``` +until finished +``` + + +## Tests + +Did you write automated tests? If so, how do we run them. + + +``` +Code example +``` + +## Live Version + +Where is this deployed online (github pages, heroku etc), give us the link and any access details we need. + +## Built With + +What did you use to build it, list the technologies, plugins, gems, packages etc. + +* [jQuery](http://jquery.com/) - jQuery for example is something you likely used + +## Workflow + +Did you write user stories, draw wireframes, use task tracking, produce ERDs? Did you use source control, with regular commits? Include links to them here. + +## Authors + +Did you collaborate with others on this project, list them here + +* **John McClain** - *Responsible for keeping vests white* - [GithubUserName](https://github.com/GithubUserName) + +## Acknowledgments + +* Hat tip to anyone who's code was used, for example [this was a useful starting point for creating this template](https://gist.github.com/PurpleBooth/109311bb0361f32d87a2). diff --git a/readmedocs/flowchart.jpg b/readmedocs/flowchart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28b634ad2f153a5fc6e786ae4ccc9214b784ff3a GIT binary patch literal 51994 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 literal 0 HcmV?d00001 diff --git a/routes/login_routes.js b/routes/login_routes.js new file mode 100644 index 00000000..7d12b91a --- /dev/null +++ b/routes/login_routes.js @@ -0,0 +1,16 @@ + +const User = require('../models/user') +const express = require('express') +const passport = require('../config/ppConfig'); +const router = express.Router() + +router.get('/', (req, res) => { +//when rendering, your POV is under `views` + res.render('users/login') +}) + +router.post('/login', passport.authenticate('local', { + successRedirect: '/', + failureRedirect: 'users/login' +})); +module.exports = router diff --git a/routes/register_routes.js b/routes/register_routes.js new file mode 100644 index 00000000..4567e014 --- /dev/null +++ b/routes/register_routes.js @@ -0,0 +1,24 @@ +const User = require('../models/user') +const express = require('express') +const router = express.Router() + +router.get('/', (req, res) => { + res.render('users/register') +}) + +router.post('/', (req, res) => { + var formData = req.body + var newUser = new User({ + name: formData.name, + email: formData.email, + password: formData.password + }) + + newUser.save() + .then( + user => res.redirect(`/profile/${user.slug}`), + err => res.send(err) + ) +}) + +module.exports = router diff --git a/views/home.handlebars b/views/home.handlebars new file mode 100644 index 00000000..54f8983e --- /dev/null +++ b/views/home.handlebars @@ -0,0 +1,7 @@ +

Homepage

+ +{{{crd.latitude}}} + +{{!--
+ +
--}} diff --git a/views/layouts/main.handlebars b/views/layouts/main.handlebars new file mode 100644 index 00000000..9d44b0bd --- /dev/null +++ b/views/layouts/main.handlebars @@ -0,0 +1,10 @@ + + + + + Project 2 + + +{{{ body }}} + + diff --git a/views/users/login.handlebars b/views/users/login.handlebars new file mode 100644 index 00000000..5f995498 --- /dev/null +++ b/views/users/login.handlebars @@ -0,0 +1,14 @@ +

Login

+ +
+ + + {{!-- NOTICE on the attribute type below --}} + + + + {{!-- NOTICE on the attribute type below --}} + + + +
diff --git a/views/users/register.handlebars b/views/users/register.handlebars new file mode 100644 index 00000000..e7325871 --- /dev/null +++ b/views/users/register.handlebars @@ -0,0 +1,16 @@ +

Registration

+ +
+ + + + + {{!-- NOTICE on the attribute type below --}} + + + + {{!-- NOTICE on the attribute type below --}} + + + +
diff --git a/views/users/show.handlebars b/views/users/show.handlebars new file mode 100644 index 00000000..82f9b2d4 --- /dev/null +++ b/views/users/show.handlebars @@ -0,0 +1,4 @@ +

{{ user.name }}

+
    +
  • email: {{ user.email }}
  • +
diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..1713e24c --- /dev/null +++ b/yarn.lock @@ -0,0 +1,2250 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + +accepts@~1.3.4: + version "1.3.4" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" + dependencies: + mime-types "~2.1.16" + negotiator "0.6.1" + +ajv@^4.9.1: + version "4.11.8" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" + dependencies: + co "^4.6.0" + json-stable-stringify "^1.0.1" + +ajv@^5.1.0: + version "5.2.4" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-5.2.4.tgz#3daf9a8b67221299fdae8d82d117ed8e6c80244b" + dependencies: + co "^4.6.0" + fast-deep-equal "^1.0.0" + json-schema-traverse "^0.3.0" + json-stable-stringify "^1.0.1" + +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + dependencies: + string-width "^2.0.0" + +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + +ansi-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" + +ansi-styles@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" + dependencies: + color-convert "^1.9.0" + +anymatch@^1.3.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" + dependencies: + micromatch "^2.1.5" + normalize-path "^2.0.0" + +aproba@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" + +are-we-there-yet@~1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" + dependencies: + delegates "^1.0.0" + readable-stream "^2.0.6" + +arr-diff@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" + dependencies: + arr-flatten "^1.0.1" + +arr-flatten@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + +array-unique@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" + +asap@~2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + +asn1@~0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + +assert-plus@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" + +async-each@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" + +async@2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4" + dependencies: + lodash "^4.14.0" + +async@^1.4.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + +aws-sign2@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + +aws4@^1.2.1, aws4@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" + +balanced-match@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" + +bcrypt-pbkdf@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" + dependencies: + tweetnacl "^0.14.3" + +bcrypt@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-1.0.3.tgz#b02ddc6c0b52ea16b8d3cf375d5a32e780dab548" + dependencies: + nan "2.6.2" + node-pre-gyp "0.6.36" + +binary-extensions@^1.0.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.10.0.tgz#9aeb9a6c5e88638aad171e167f5900abe24835d0" + +block-stream@*: + version "0.0.9" + resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" + dependencies: + inherits "~2.0.0" + +bluebird@^3.5.0: + version "3.5.1" + resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" + +body-parser@1.18.2, body-parser@^1.18.2: + version "1.18.2" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" + dependencies: + bytes "3.0.0" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.1" + http-errors "~1.6.2" + iconv-lite "0.4.19" + on-finished "~2.3.0" + qs "6.5.1" + raw-body "2.3.2" + type-is "~1.6.15" + +boom@2.x.x: + version "2.10.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" + dependencies: + hoek "2.x.x" + +boom@4.x.x: + version "4.3.1" + resolved "https://registry.yarnpkg.com/boom/-/boom-4.3.1.tgz#4f8a3005cb4a7e3889f749030fd25b96e01d2e31" + dependencies: + hoek "4.x.x" + +boom@5.x.x: + version "5.2.0" + resolved "https://registry.yarnpkg.com/boom/-/boom-5.2.0.tgz#5dd9da6ee3a5f302077436290cb717d3f4a54e02" + dependencies: + hoek "4.x.x" + +boxen@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.2.2.tgz#3f1d4032c30ffea9d4b02c322eaf2ea741dcbce5" + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^1.0.0" + +brace-expansion@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +braces@^1.8.2: + version "1.8.5" + resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" + dependencies: + expand-range "^1.8.1" + preserve "^0.2.0" + repeat-element "^1.1.2" + +bson@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/bson/-/bson-1.0.4.tgz#93c10d39eaa5b58415cbc4052f3e53e562b0b72c" + +buffer-shims@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + +bytes@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + +camelcase@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + +capture-stack-trace@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + dependencies: + align-text "^0.1.3" + lazy-cache "^1.0.3" + +chalk@^2.0.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.2.0.tgz#477b3bf2f9b8fd5ca9e429747e37f724ee7af240" + dependencies: + ansi-styles "^3.1.0" + escape-string-regexp "^1.0.5" + supports-color "^4.0.0" + +chokidar@^1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" + dependencies: + anymatch "^1.3.0" + async-each "^1.0.0" + glob-parent "^2.0.0" + inherits "^2.0.1" + is-binary-path "^1.0.0" + is-glob "^2.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.0.0" + optionalDependencies: + fsevents "^1.0.0" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + +color-convert@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.0.tgz#1accf97dd739b983bf994d56fec8f95853641b7a" + dependencies: + color-name "^1.1.1" + +color-name@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + +combined-stream@^1.0.5, combined-stream@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" + dependencies: + delayed-stream "~1.0.0" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + +configstore@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" + dependencies: + dot-prop "^4.1.0" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +connect-mongo@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/connect-mongo/-/connect-mongo-2.0.0.tgz#3e4d036a6869385b0191a3737d3051a86abc2fb8" + dependencies: + mongodb "^2.0.36" + +connect@1.x: + version "1.9.2" + resolved "https://registry.yarnpkg.com/connect/-/connect-1.9.2.tgz#42880a22e9438ae59a8add74e437f58ae8e52807" + dependencies: + formidable "1.0.x" + mime ">= 0.0.1" + qs ">= 0.4.0" + +console-control-strings@^1.0.0, console-control-strings@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" + +content-disposition@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" + +content-type@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + +cookie@0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" + +core-util-is@1.0.2, core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + +crc@3.4.4: + version "3.4.4" + resolved "https://registry.yarnpkg.com/crc/-/crc-3.4.4.tgz#9da1e980e3bd44fc5c93bf5ab3da3378d85e466b" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cryptiles@2.x.x: + version "2.0.5" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" + dependencies: + boom "2.x.x" + +cryptiles@3.x.x: + version "3.1.2" + resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-3.1.2.tgz#a89fbb220f5ce25ec56e8c4aa8a4fd7b5b0d29fe" + dependencies: + boom "5.x.x" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + dependencies: + assert-plus "^1.0.0" + +debug@2.6.9, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + dependencies: + ms "2.0.0" + +decamelize@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + +deep-extend@~0.4.0: + version "0.4.2" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" + +define-properties@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" + dependencies: + foreach "^2.0.5" + object-keys "^1.0.8" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + +delegates@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" + +depd@1.1.1, depd@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + +dot-prop@^4.1.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" + dependencies: + is-obj "^1.0.0" + +dotenv@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-4.0.0.tgz#864ef1379aced55ce6f95debecdce179f7a0cd1d" + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + +duplexer@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" + +ecc-jsbn@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" + dependencies: + jsbn "~0.1.0" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + +encodeurl@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" + +es6-promise@3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4" + +es6-promise@^3.3.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + +event-stream@~3.3.0: + version "3.3.4" + resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" + dependencies: + duplexer "~0.1.1" + from "~0" + map-stream "~0.1.0" + pause-stream "0.0.11" + split "0.3" + stream-combiner "~0.0.4" + through "~2.3.1" + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" + dependencies: + is-posix-bracket "^0.1.0" + +expand-range@^1.8.1: + version "1.8.2" + resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" + dependencies: + fill-range "^2.1.0" + +express-handlebars@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/express-handlebars/-/express-handlebars-3.0.0.tgz#80a070bb819b09e4af2ca6d0780f75ce05e75c2f" + dependencies: + glob "^6.0.4" + graceful-fs "^4.1.2" + handlebars "^4.0.5" + object.assign "^4.0.3" + promise "^7.0.0" + +express-session@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.15.6.tgz#47b4160c88f42ab70fe8a508e31cbff76757ab0a" + dependencies: + cookie "0.3.1" + cookie-signature "1.0.6" + crc "3.4.4" + debug "2.6.9" + depd "~1.1.1" + on-headers "~1.0.1" + parseurl "~1.3.2" + uid-safe "~2.1.5" + utils-merge "1.0.1" + +express-sessions@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/express-sessions/-/express-sessions-1.0.6.tgz#158162757837a207b8f7c95d62edcad86d90f1a8" + dependencies: + express "2.x.x" + mongoose "4.x.x" + redis "0.x.x" + +express@2.x.x: + version "2.5.11" + resolved "https://registry.yarnpkg.com/express/-/express-2.5.11.tgz#4ce8ea1f3635e69e49f0ebb497b6a4b0a51ce6f0" + dependencies: + connect "1.x" + mime "1.2.4" + mkdirp "0.3.0" + qs "0.4.x" + +express@^4.16.2: + version "4.16.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" + dependencies: + accepts "~1.3.4" + array-flatten "1.1.1" + body-parser "1.18.2" + content-disposition "0.5.2" + content-type "~1.0.4" + cookie "0.3.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "~1.1.1" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.1.0" + fresh "0.5.2" + merge-descriptors "1.0.1" + methods "~1.1.2" + on-finished "~2.3.0" + parseurl "~1.3.2" + path-to-regexp "0.1.7" + proxy-addr "~2.0.2" + qs "6.5.1" + range-parser "~1.2.0" + safe-buffer "5.1.1" + send "0.16.1" + serve-static "1.13.1" + setprototypeof "1.1.0" + statuses "~1.3.1" + type-is "~1.6.15" + utils-merge "1.0.1" + vary "~1.1.2" + +extend@~3.0.0, extend@~3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" + +extglob@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" + dependencies: + is-extglob "^1.0.0" + +extsprintf@1.3.0, extsprintf@^1.2.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + +fast-deep-equal@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz#96256a3bc975595eb36d82e9929d060d893439ff" + +filename-regex@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" + +fill-range@^2.1.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" + dependencies: + is-number "^2.1.0" + isobject "^2.0.0" + randomatic "^1.1.3" + repeat-element "^1.1.2" + repeat-string "^1.5.2" + +finalhandler@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" + dependencies: + debug "2.6.9" + encodeurl "~1.0.1" + escape-html "~1.0.3" + on-finished "~2.3.0" + parseurl "~1.3.2" + statuses "~1.3.1" + unpipe "~1.0.0" + +for-in@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + +for-own@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" + dependencies: + for-in "^1.0.1" + +foreach@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + +form-data@~2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +form-data@~2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.1.tgz#6fb94fbd71885306d73d15cc497fe4cc4ecd44bf" + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.5" + mime-types "^2.1.12" + +formidable@1.0.x: + version "1.0.17" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559" + +forwarded@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + +from@~0: + version "0.1.7" + resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + +fsevents@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.2.tgz#3282b713fb3ad80ede0e9fcf4611b5aa6fc033f4" + dependencies: + nan "^2.3.0" + node-pre-gyp "^0.6.36" + +fstream-ignore@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" + dependencies: + fstream "^1.0.0" + inherits "2" + minimatch "^3.0.0" + +fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: + version "1.0.11" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" + dependencies: + graceful-fs "^4.1.2" + inherits "~2.0.0" + mkdirp ">=0.5 0" + rimraf "2" + +function-bind@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" + +gauge@~2.7.3: + version "2.7.4" + resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" + dependencies: + aproba "^1.0.3" + console-control-strings "^1.0.0" + has-unicode "^2.0.0" + object-assign "^4.1.0" + signal-exit "^3.0.0" + string-width "^1.0.1" + strip-ansi "^3.0.1" + wide-align "^1.1.0" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + dependencies: + assert-plus "^1.0.0" + +glob-base@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" + dependencies: + glob-parent "^2.0.0" + is-glob "^2.0.0" + +glob-parent@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" + dependencies: + is-glob "^2.0.0" + +glob@^6.0.4: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.5: + version "7.1.2" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.0.tgz#10d34039e0df04272e262cf24224f7209434df4f" + dependencies: + ini "^1.3.4" + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.2: + version "4.1.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" + +handlebars@^4.0.5: + version "4.0.11" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.0.11.tgz#630a35dfe0294bc281edae6ffc5d329fc7982dcc" + dependencies: + async "^1.4.0" + optimist "^0.6.1" + source-map "^0.4.4" + optionalDependencies: + uglify-js "^2.6" + +har-schema@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + +har-validator@~4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" + dependencies: + ajv "^4.9.1" + har-schema "^1.0.5" + +har-validator@~5.0.3: + version "5.0.3" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.0.3.tgz#ba402c266194f15956ef15e0fcf242993f6a7dfd" + dependencies: + ajv "^5.1.0" + har-schema "^2.0.0" + +has-flag@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" + +has-unicode@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" + +hawk@3.1.3, hawk@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" + dependencies: + boom "2.x.x" + cryptiles "2.x.x" + hoek "2.x.x" + sntp "1.x.x" + +hawk@~6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/hawk/-/hawk-6.0.2.tgz#af4d914eb065f9b5ce4d9d11c1cb2126eecc3038" + dependencies: + boom "4.x.x" + cryptiles "3.x.x" + hoek "4.x.x" + sntp "2.x.x" + +hoek@2.x.x: + version "2.16.3" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" + +hoek@4.x.x: + version "4.2.0" + resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.0.tgz#72d9d0754f7fe25ca2d01ad8f8f9a9449a89526d" + +hooks-fixed@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/hooks-fixed/-/hooks-fixed-2.0.0.tgz#a01d894d52ac7f6599bbb1f63dfc9c411df70cba" + +http-errors@1.6.2, http-errors@~1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" + dependencies: + depd "1.1.1" + inherits "2.0.3" + setprototypeof "1.0.3" + statuses ">= 1.3.1 < 2" + +http-signature@~1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" + dependencies: + assert-plus "^0.2.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +iconv-lite@0.4.19: + version "0.4.19" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + +ini@^1.3.4, ini@~1.3.0: + version "1.3.4" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" + +ipaddr.js@1.5.2: + version "1.5.2" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + dependencies: + binary-extensions "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" + +is-dotfile@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" + +is-equal-shallow@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" + dependencies: + is-primitive "^2.0.0" + +is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + +is-extglob@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" + +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + dependencies: + number-is-nan "^1.0.0" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + +is-glob@^2.0.0, is-glob@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" + dependencies: + is-extglob "^1.0.0" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + +is-number@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" + dependencies: + kind-of "^3.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + +is-path-inside@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" + dependencies: + path-is-inside "^1.0.1" + +is-posix-bracket@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" + +is-primitive@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + +is-retry-allowed@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" + +is-stream@^1.0.0, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + +isarray@1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + dependencies: + isarray "1.0.0" + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + +json-schema-traverse@^0.3.0: + version "0.3.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz#349a6d44c53a51de89b40805c5d5e59b417d3340" + +json-schema@0.2.3: + version "0.2.3" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" + +json-stable-stringify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" + dependencies: + jsonify "~0.0.0" + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + +jsonify@~0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" + +jsprim@^1.2.2: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.2.3" + verror "1.10.0" + +kareem@1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.5.0.tgz#e3e4101d9dcfde299769daf4b4db64d895d17448" + +kind-of@^3.0.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + dependencies: + is-buffer "^1.1.5" + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + dependencies: + package-json "^4.0.0" + +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._bindcallback@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" + +lodash._createassigner@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" + dependencies: + lodash._bindcallback "^3.0.0" + lodash._isiterateecall "^3.0.0" + lodash.restparam "^3.0.0" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + +lodash.assign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" + dependencies: + lodash._baseassign "^3.0.0" + lodash._createassigner "^3.0.0" + lodash.keys "^3.0.0" + +lodash.defaults@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" + dependencies: + lodash.assign "^3.0.0" + lodash.restparam "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + +lodash.restparam@^3.0.0: + version "3.6.1" + resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" + +lodash@^4.14.0: + version "4.17.4" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" + +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + +lowercase-keys@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" + +lru-cache@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +make-dir@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" + dependencies: + pify "^3.0.0" + +map-stream@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + +merge-descriptors@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" + +method-override@^2.3.10: + version "2.3.10" + resolved "https://registry.yarnpkg.com/method-override/-/method-override-2.3.10.tgz#e3daf8d5dee10dd2dce7d4ae88d62bbee77476b4" + dependencies: + debug "2.6.9" + methods "~1.1.2" + parseurl "~1.3.2" + vary "~1.1.2" + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + +micromatch@^2.1.5: + version "2.3.11" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" + dependencies: + arr-diff "^2.0.0" + array-unique "^0.2.1" + braces "^1.8.2" + expand-brackets "^0.1.4" + extglob "^0.3.1" + filename-regex "^2.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.1" + kind-of "^3.0.2" + normalize-path "^2.0.1" + object.omit "^2.0.0" + parse-glob "^3.0.4" + regex-cache "^0.4.2" + +mime-db@~1.30.0: + version "1.30.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" + +mime-types@^2.1.12, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.17, mime-types@~2.1.7: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" + dependencies: + mime-db "~1.30.0" + +mime@1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.2.4.tgz#11b5fdaf29c2509255176b80ad520294f5de92b7" + +mime@1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" + +"mime@>= 0.0.1": + version "2.0.3" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.0.3.tgz#4353337854747c48ea498330dc034f9f4bbbcc0b" + +"minimatch@2 || 3", minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + dependencies: + brace-expansion "^1.1.7" + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + +minimist@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" + +minimist@~0.0.1: + version "0.0.10" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf" + +mkdirp@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.3.0.tgz#1bbf5ab1ba827af23575143490426455f481fe1e" + +"mkdirp@>=0.5 0", mkdirp@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + dependencies: + minimist "0.0.8" + +mongodb-core@2.1.17: + version "2.1.17" + resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.17.tgz#a418b337a14a14990fb510b923dee6a813173df8" + dependencies: + bson "~1.0.4" + require_optional "~1.0.0" + +mongodb@2.2.33, mongodb@^2.0.36: + version "2.2.33" + resolved "https://registry.yarnpkg.com/mongodb/-/mongodb-2.2.33.tgz#b537c471d34a6651b48f36fdbf29750340e08b50" + dependencies: + es6-promise "3.2.1" + mongodb-core "2.1.17" + readable-stream "2.2.7" + +mongoose@4.x.x, mongoose@^4.12.3: + version "4.12.4" + resolved "https://registry.yarnpkg.com/mongoose/-/mongoose-4.12.4.tgz#502a2c037376a6c6356eee89128e75653612127c" + dependencies: + async "2.1.4" + bson "~1.0.4" + hooks-fixed "2.0.0" + kareem "1.5.0" + mongodb "2.2.33" + mpath "0.3.0" + mpromise "0.5.5" + mquery "2.3.2" + ms "2.0.0" + muri "1.3.0" + regexp-clone "0.0.1" + sliced "1.0.1" + +mpath@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/mpath/-/mpath-0.3.0.tgz#7a58f789e9b5fd3c94520634157960f26bd5ef44" + +mpromise@0.5.5: + version "0.5.5" + resolved "https://registry.yarnpkg.com/mpromise/-/mpromise-0.5.5.tgz#f5b24259d763acc2257b0a0c8c6d866fd51732e6" + +mquery@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/mquery/-/mquery-2.3.2.tgz#e2c60ad117cf080f2efb1ecdd144e7bbffbfca11" + dependencies: + bluebird "^3.5.0" + debug "^2.6.9" + regexp-clone "^0.0.1" + sliced "0.0.5" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + +muri@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/muri/-/muri-1.3.0.tgz#aeccf3db64c56aa7c5b34e00f95b7878527a4721" + +nan@2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" + +nan@^2.3.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.7.0.tgz#d95bf721ec877e08db276ed3fc6eb78f9083ad46" + +negotiator@0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" + +node-pre-gyp@0.6.36: + version "0.6.36" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.36.tgz#db604112cb74e0d477554e9b505b17abddfab786" + dependencies: + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "^2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +node-pre-gyp@^0.6.36: + version "0.6.38" + resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.38.tgz#e92a20f83416415bb4086f6d1fb78b3da73d113d" + dependencies: + hawk "3.1.3" + mkdirp "^0.5.1" + nopt "^4.0.1" + npmlog "^4.0.2" + rc "^1.1.7" + request "2.81.0" + rimraf "^2.6.1" + semver "^5.3.0" + tar "^2.2.1" + tar-pack "^3.4.0" + +nodemon@^1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.12.1.tgz#996a56dc49d9f16bbf1b78a4de08f13634b3878d" + dependencies: + chokidar "^1.7.0" + debug "^2.6.8" + es6-promise "^3.3.1" + ignore-by-default "^1.0.1" + lodash.defaults "^3.1.2" + minimatch "^3.0.4" + ps-tree "^1.1.0" + touch "^3.1.0" + undefsafe "0.0.3" + update-notifier "^2.2.0" + +nopt@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" + dependencies: + abbrev "1" + osenv "^0.1.4" + +nopt@~1.0.10: + version "1.0.10" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" + dependencies: + abbrev "1" + +normalize-path@^2.0.0, normalize-path@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + dependencies: + remove-trailing-separator "^1.0.1" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + dependencies: + path-key "^2.0.0" + +npmlog@^4.0.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" + dependencies: + are-we-there-yet "~1.1.2" + console-control-strings "~1.1.0" + gauge "~2.7.3" + set-blocking "~2.0.0" + +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + +oauth-sign@~0.8.1, oauth-sign@~0.8.2: + version "0.8.2" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + +object-keys@^1.0.10, object-keys@^1.0.8: + version "1.0.11" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" + +object.assign@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.0" + object-keys "^1.0.10" + +object.omit@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" + dependencies: + for-own "^0.1.4" + is-extendable "^0.1.1" + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7" + +once@^1.3.0, once@^1.3.3: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + dependencies: + wrappy "1" + +optimist@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" + dependencies: + minimist "~0.0.1" + wordwrap "~0.0.2" + +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + +os-tmpdir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + +osenv@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +parse-glob@^3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" + dependencies: + glob-base "^0.3.0" + is-dotfile "^1.0.0" + is-extglob "^1.0.0" + is-glob "^2.0.0" + +parseurl@~1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" + +passport-local@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-local/-/passport-local-1.0.0.tgz#1fe63268c92e75606626437e3b906662c15ba6ee" + dependencies: + passport-strategy "1.x.x" + +passport-strategy@1.x.x: + version "1.0.0" + resolved "https://registry.yarnpkg.com/passport-strategy/-/passport-strategy-1.0.0.tgz#b5539aa8fc225a3d1ad179476ddf236b440f52e4" + +passport@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/passport/-/passport-0.4.0.tgz#c5095691347bd5ad3b5e180238c3914d16f05811" + dependencies: + passport-strategy "1.x.x" + pause "0.0.1" + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + +path-to-regexp@0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" + +pause-stream@0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + dependencies: + through "~2.3" + +pause@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/pause/-/pause-0.0.1.tgz#1d408b3fdb76923b9543d96fb4c9dfd535d9cb5d" + +performance-now@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + +preserve@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" + +process-nextick-args@~1.0.6: + version "1.0.7" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" + +promise@^7.0.0: + version "7.3.1" + resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf" + dependencies: + asap "~2.0.3" + +proxy-addr@~2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" + dependencies: + forwarded "~0.1.2" + ipaddr.js "1.5.2" + +ps-tree@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" + dependencies: + event-stream "~3.3.0" + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + +punycode@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + +qs@0.4.x: + version "0.4.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-0.4.2.tgz#3cac4c861e371a8c9c4770ac23cda8de639b8e5f" + +qs@6.5.1, "qs@>= 0.4.0", qs@~6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" + +qs@~6.4.0: + version "6.4.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" + +random-bytes@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/random-bytes/-/random-bytes-1.0.0.tgz#4f68a1dc0ae58bd3fb95848c30324db75d64360b" + +randomatic@^1.1.3: + version "1.1.7" + resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +range-parser@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" + +raw-body@2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" + dependencies: + bytes "3.0.0" + http-errors "1.6.2" + iconv-lite "0.4.19" + unpipe "1.0.0" + +rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: + version "1.2.2" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" + dependencies: + deep-extend "~0.4.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +readable-stream@2.2.7: + version "2.2.7" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.7.tgz#07057acbe2467b22042d36f98c5ad507054e95b1" + dependencies: + buffer-shims "~1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~1.0.0" + util-deprecate "~1.0.1" + +readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4: + version "2.3.3" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + safe-buffer "~5.1.1" + string_decoder "~1.0.3" + util-deprecate "~1.0.1" + +readdirp@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" + dependencies: + graceful-fs "^4.1.2" + minimatch "^3.0.2" + readable-stream "^2.0.2" + set-immediate-shim "^1.0.1" + +redis@0.x.x: + version "0.12.1" + resolved "https://registry.yarnpkg.com/redis/-/redis-0.12.1.tgz#64df76ad0fc8acebaebd2a0645e8a48fac49185e" + +regex-cache@^0.4.2: + version "0.4.4" + resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" + dependencies: + is-equal-shallow "^0.1.3" + +regexp-clone@0.0.1, regexp-clone@^0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589" + +registry-auth-token@^3.0.1: + version "3.3.1" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + dependencies: + rc "^1.0.1" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + +repeat-element@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" + +repeat-string@^1.5.2: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + +request@2.81.0: + version "2.81.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" + dependencies: + aws-sign2 "~0.6.0" + aws4 "^1.2.1" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.0" + forever-agent "~0.6.1" + form-data "~2.1.1" + har-validator "~4.2.1" + hawk "~3.1.3" + http-signature "~1.1.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.7" + oauth-sign "~0.8.1" + performance-now "^0.2.0" + qs "~6.4.0" + safe-buffer "^5.0.1" + stringstream "~0.0.4" + tough-cookie "~2.3.0" + tunnel-agent "^0.6.0" + uuid "^3.0.0" + +request@^2.81.0: + version "2.83.0" + resolved "https://registry.yarnpkg.com/request/-/request-2.83.0.tgz#ca0b65da02ed62935887808e6f510381034e3356" + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.6.0" + caseless "~0.12.0" + combined-stream "~1.0.5" + extend "~3.0.1" + forever-agent "~0.6.1" + form-data "~2.3.1" + har-validator "~5.0.3" + hawk "~6.0.2" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.17" + oauth-sign "~0.8.2" + performance-now "^2.1.0" + qs "~6.5.1" + safe-buffer "^5.1.1" + stringstream "~0.0.5" + tough-cookie "~2.3.3" + tunnel-agent "^0.6.0" + uuid "^3.1.0" + +require_optional@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.1.tgz#4cf35a4247f64ca3df8c2ef208cc494b1ca8fc2e" + dependencies: + resolve-from "^2.0.0" + semver "^5.1.0" + +resolve-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57" + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + dependencies: + align-text "^0.1.1" + +rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: + version "2.6.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" + dependencies: + glob "^7.0.5" + +safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@^5.1.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + dependencies: + semver "^5.0.3" + +semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" + +send@0.16.1: + version "0.16.1" + resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" + dependencies: + debug "2.6.9" + depd "~1.1.1" + destroy "~1.0.4" + encodeurl "~1.0.1" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.6.2" + mime "1.4.1" + ms "2.0.0" + on-finished "~2.3.0" + range-parser "~1.2.0" + statuses "~1.3.1" + +serve-static@1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" + dependencies: + encodeurl "~1.0.1" + escape-html "~1.0.3" + parseurl "~1.3.2" + send "0.16.1" + +set-blocking@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + +set-immediate-shim@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" + +setprototypeof@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" + +setprototypeof@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" + +sliced@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f" + +sliced@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41" + +sntp@1.x.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" + dependencies: + hoek "2.x.x" + +sntp@2.x.x: + version "2.0.2" + resolved "https://registry.yarnpkg.com/sntp/-/sntp-2.0.2.tgz#5064110f0af85f7cfdb7d6b67a40028ce52b4b2b" + dependencies: + hoek "4.x.x" + +source-map@^0.4.4: + version "0.4.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" + dependencies: + amdefine ">=0.0.4" + +source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + +split@0.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" + dependencies: + through "2" + +sshpk@^1.7.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + dashdash "^1.12.0" + getpass "^0.1.1" + optionalDependencies: + bcrypt-pbkdf "^1.0.0" + ecc-jsbn "~0.1.1" + jsbn "~0.1.0" + tweetnacl "~0.14.0" + +"statuses@>= 1.3.1 < 2": + version "1.4.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" + +statuses@~1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" + +stream-combiner@~0.0.4: + version "0.0.4" + resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" + dependencies: + duplexer "~0.1.1" + +string-width@^1.0.1, string-width@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +string-width@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string_decoder@~1.0.0, string_decoder@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" + dependencies: + safe-buffer "~5.1.0" + +stringstream@~0.0.4, stringstream@~0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" + +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + dependencies: + ansi-regex "^2.0.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + dependencies: + ansi-regex "^3.0.0" + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + +strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + +supports-color@^4.0.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + dependencies: + has-flag "^2.0.0" + +tar-pack@^3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.0.tgz#23be2d7f671a8339376cbdb0b8fe3fdebf317984" + dependencies: + debug "^2.2.0" + fstream "^1.0.10" + fstream-ignore "^1.0.5" + once "^1.3.3" + readable-stream "^2.1.4" + rimraf "^2.5.1" + tar "^2.2.1" + uid-number "^0.0.6" + +tar@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" + dependencies: + block-stream "*" + fstream "^1.0.2" + inherits "2" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + dependencies: + execa "^0.7.0" + +through@2, through@~2.3, through@~2.3.1: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + +touch@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" + dependencies: + nopt "~1.0.10" + +tough-cookie@~2.3.0, tough-cookie@~2.3.3: + version "2.3.3" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" + dependencies: + punycode "^1.4.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + +type-is@~1.6.15: + version "1.6.15" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" + dependencies: + media-typer "0.3.0" + mime-types "~2.1.15" + +uglify-js@^2.6: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + +uid-number@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" + +uid-safe@~2.1.5: + version "2.1.5" + resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.5.tgz#2b3d5c7240e8fc2e58f8aa269e5ee49c0857bd3a" + dependencies: + random-bytes "~1.0.0" + +undefsafe@0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + dependencies: + crypto-random-string "^1.0.0" + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + +update-notifier@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + dependencies: + prepend-http "^1.0.1" + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + +uuid@^3.0.0, uuid@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" + +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +which@^1.2.9: + version "1.3.0" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" + dependencies: + isexe "^2.0.0" + +wide-align@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" + dependencies: + string-width "^1.0.2" + +widest-line@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-1.0.0.tgz#0c09c85c2a94683d0d7eaf8ee097d564bf0e105c" + dependencies: + string-width "^1.0.1" + +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + +wordwrap@~0.0.2: + version "0.0.3" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + +write-file-atomic@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" From d3bd93f996c870fcc74777af0e35c54c0c3581ba Mon Sep 17 00:00:00 2001 From: nikitas89 Date: Mon, 23 Oct 2017 22:06:03 +0800 Subject: [PATCH 02/20] fixed port const --- index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/index.js b/index.js index 080e121e..6fdc1ecc 100644 --- a/index.js +++ b/index.js @@ -1,4 +1,4 @@ -const port = 3000 || process.env.PORT +const port = process.env.PORT || 3000 const dbUrl = process.env.NODE_ENV === 'production' ? process.env.MONGODB_URI : 'mongodb://localhost/project2' From 82c0d7f90c27c77977a0cad57d6264f5a478291b Mon Sep 17 00:00:00 2001 From: nikitas89 Date: Tue, 24 Oct 2017 10:43:32 +0800 Subject: [PATCH 03/20] basic register login, login not working. getting api data --- README.md | 2 +- dump/project2/stops.bson | Bin 0 -> 157770 bytes dump/project2/stops.metadata.json | 1 + index.js | 62 +++++++++++++++++++++++++++--- models/stop.js | 16 ++++++++ models/user.js | 9 ++++- package.json | 51 ++++++++++++------------ yarn.lock | 22 ++++++++++- 8 files changed, 128 insertions(+), 35 deletions(-) create mode 100644 dump/project2/stops.bson create mode 100644 dump/project2/stops.metadata.json create mode 100644 models/stop.js diff --git a/README.md b/README.md index e284558a..bbe79d3d 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This web app is used to lookup bus arrival times for the usual buses and stops t ##Flowchart -![project-2]( P2-flowchart.jpg "Project 2") +![project-2]( ./readmedocs/P2-flowchart.jpg "Project 2") ![project-2]( P2-flowchart.jpg "Project 2") + + + + {{!-- --}} -{{{ body }}} + {{!-- UPDATE 22 Oct, layout base from BOOTSTRAP 4 --}} + {{!-- UPDATES BEFORE CLASS 20 OCT --}} + {{!-- + UPDATES 22 OCT: + NAVBAR http://getbootstrap.com/docs/4.0/components/navbar/ + + How to split navbar: + https://stackoverflow.com/questions/41513463/bootstrap-4-align-navbar-item-to-the-right + --}} +
+
+ {{{ body }}} +
+ + + {{!-- UPDATE 20 Oct, embedding `jQuery` and `frontend.js` --}} + {{!-- NOTICE THE LINK TO `frontend.js` --}} + + From 61bfd75026eeafc5a4184382f129c3262c62afd8 Mon Sep 17 00:00:00 2001 From: nikitas89 Date: Tue, 24 Oct 2017 16:04:11 +0800 Subject: [PATCH 05/20] expriment with distance --- routes/home_routes.js | 24 +++++++++++++----------- views/home.handlebars | 5 +++-- 2 files changed, 16 insertions(+), 13 deletions(-) diff --git a/routes/home_routes.js b/routes/home_routes.js index 654d9b25..0e086d49 100644 --- a/routes/home_routes.js +++ b/routes/home_routes.js @@ -10,31 +10,33 @@ router.post('/', (req, res) => { console.log('entered') console.log(req.body) // res.send(`you are at ${req.body} `) - var myLoc= req.body + // var myLoc= req.body // res.render('home', myLoc) Stop.find() .limit(499) .then(stops => (findNearest(stops, req.body))) - .then(closestStop=>res.send(`find the nearest bus stops at ${closestStop} `)) + .then(response => res.send(response)) + // .then(closestStop=>res.send(`find the nearest bus stops at ${closestStop} `)) - // put logic here... - //show neearby stops. //route elsehwere to find, and get data, then render home to display - // console.log('post resp found',req.body.latitude); - // res.send(`find the nearest bus stops at ${req.body.latitude} & ${req.body.longitude}`) + // put logic here... + //show neearby stops. //route elsehwere to find, and get data, then render home to display + // console.log('post resp found',req.body.latitude); + // res.send(`find the nearest bus stops at ${req.body.latitude} & ${req.body.longitude}`) }) module.exports = router -var findNearest = (stops, thisStop) => { +var findNearest = (stops, loc) => { var closest_distance = 100000 var closestStop = stops[0] console.log(`close stop before loop ${closestStop}`); + stops.forEach(stop => { - if (distance(thisStop,stop) < closest_distance) { - closest_distance = distance(thisStop,stop ); + if (distance(loc, stop) < distance(loc, closestStop)) { + closest_distance = distance(loc, stop); closestStop = stop; - // console.log(`closest stop inside loop ${closestStop}`); + console.log(`closest stop inside loop ${closestStop}`); } }) console.log(closestStop); return closestStop -}//end findNearest +} //end findNearest diff --git a/views/home.handlebars b/views/home.handlebars index f45c8e8f..0861b352 100644 --- a/views/home.handlebars +++ b/views/home.handlebars @@ -6,5 +6,6 @@ {{!-- --}} - -{{{myLoc.longitude}}} +
+{{{closestStop}}} +
From a443a879a74550c4e54c8bb26ad8b683461c9113 Mon Sep 17 00:00:00 2001 From: nikitas89 Date: Wed, 25 Oct 2017 14:14:58 +0800 Subject: [PATCH 06/20] show nearest stops with distance using FE, jquery --- dump/project2/stops.bson | Bin 157770 -> 0 bytes dump/project2/stops.metadata.json | 1 - geoClosest.js | 2 +- index.js | 59 ++++++++++++++++- models/busService.js | 13 ++++ public/assets/js/frontend.js | 88 +++++++++++++++++++------ routes/home_routes.js | 56 ++++++++++++---- views/home.handlebars | 35 ++++++++-- views/layouts/main.handlebars | 2 +- views/partials/stopspartial.handlebars | 10 +++ 10 files changed, 222 insertions(+), 44 deletions(-) delete mode 100644 dump/project2/stops.bson delete mode 100644 dump/project2/stops.metadata.json create mode 100644 models/busService.js create mode 100644 views/partials/stopspartial.handlebars diff --git a/dump/project2/stops.bson b/dump/project2/stops.bson deleted file mode 100644 index 9e0fda51bd5b000afb2109043c662b91f31e4dab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157770 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

x`<`|Bm$ghge8sx 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 { +app.get('/busArrival', (req, res) => { var options = { url: 'http://datamall2.mytransport.sg/ltaodataservice/BusArrivalv2?BusStopCode=83139', headers: { @@ -79,6 +82,7 @@ app.get('/bus', (req, res) => { res.send(data) }) }) +//load stops in the db, each as new Stop app.get('/loadStopstoDB', (req, res) => { var options = { url: 'http://datamall2.mytransport.sg/ltaodataservice/BusStops', @@ -87,6 +91,7 @@ app.get('/loadStopstoDB', (req, res) => { 'Content-Type': 'application/json' } } + //make a request, with the aobe url and jsn format request(options) .then(json => { var data = JSON.parse(json) @@ -111,6 +116,51 @@ app.get('/loadStopstoDB', (req, res) => { }) //end foreeach - how to populate data. }) }) +// +// app.get('/loadServiceFromRoutes', (req, res) => { +// var options = { +// url: 'http://datamall2.mytransport.sg/ltaodataservice/BusRoutes', +// headers: { +// 'AccountKey': 'BF/zvVwHSeWjAnJVwSw0nQ==', +// 'Content-Type': 'application/json' +// } +// } +// //make a request, with the aobe url and jsn format +// // request(options) +// // .then(json => { +// // var data = JSON.parse(json) +// // res.send(data) +// // }) +// request(options) +// .then(json => { +// var data = JSON.parse(json) +// // var count = 0 +// // copy relevant data from json - sevice # and stop. service will be repeated +// var refArray = [] +// data.value.forEach(route => +// refArray.push([route.ServiceNo, route.BusStopCode]) +// +// ) +// console.log(refArray); +// // data.value.forEach(function(routes) { +// // count++ +// // //gather bus and stops for each. +// // console.log(count); +// // var newService = new BusService({ +// // // busService: , +// // // stops: +// // }) +// // newService.save() +// // .then( +// // console.log('done'), +// // err => res.send(err) +// // ) +// // }) //end foreeach - how to populate data. +// }) +// }) + + + app.use((req, res, next) => { app.locals.user = req.user // we'll only `req.user` if we managed to log in @@ -128,6 +178,7 @@ app.use((req, res, next) => { // res.send(`find the nearest bus stops at ${req.body.latitude} & ${req.body.longitude}`) // }) + app.get('/profile', (req, res) => { // User.findOne({ // slug: req.params.slug @@ -150,3 +201,5 @@ app.get('/logout', hasLoggedOut, (req, res) => { app.listen(port, () => { console.log(`Server is running on ${port}`) }) + +module.exports = app diff --git a/models/busService.js b/models/busService.js new file mode 100644 index 00000000..e95d0e22 --- /dev/null +++ b/models/busService.js @@ -0,0 +1,13 @@ +const mongoose = require('mongoose') +const Schema = mongoose.Schema + +var busServiceSchema = new Schema({ + //stores the bus num, and the stops it goes to. + busService:String, + stops:{ + type: [String] + }//need direction of bus? +}); + +const BusService = mongoose.model('BusService', busServiceSchema) +module.exports = BusService diff --git a/public/assets/js/frontend.js b/public/assets/js/frontend.js index 72837888..49b89b91 100644 --- a/public/assets/js/frontend.js +++ b/public/assets/js/frontend.js @@ -1,40 +1,88 @@ -$(function () { +$(function() { var options = { enableHighAccuracy: true, timeout: 9000, maximumAge: 0 } - var crd = {latitude: 1.2965676, longitude: 103.8521184, altitude: null, accuracy: null, altitudeAccuracy: null} - - function success (pos) { - let { latitude, longitude } = pos.coords + //set a dafult co-ord. + var crd = { + latitude: 1.2965676, + longitude: 103.8521184, + altitude: null, + accuracy: null, + altitudeAccuracy: null + } + //upon successfully getting position form webapi, + function success(pos) { + //set lat/long to an object we defined. + let { + latitude, + longitude + } = pos.coords console.log(crd) console.log('fetch now') - - var sendingJson = JSON.stringify({ latitude, longitude }) - - fetch('/', { - method: 'POST', - body: sendingJson, - headers: { - 'Content-Type': 'application/json' - } + //create json with the above data, to prep for sending to backend + var sendingJson = JSON.stringify({ + latitude, + longitude }) - .then(response => response.json()) - // .then(json => console.log(json)) + //using fetch, send the lat/long to '/', via post method, as a json in the body + fetch('/', { + method: 'POST', + body: sendingJson, + headers: { + 'Content-Type': 'application/json' + } + }) + .then(response => { + response.json() //return promise + .then(data => showNearest(data.nearest)) + // .then(data=>console.log(data.nearest[0].stop.stopCode)) + }) }; - function error (err) { + function error(err) { console.log('Your current position is:') console.log(`Latitude : ${crd.latitude}`) console.log(`Longitude: ${crd.longitude}`) console.warn(`ERROR(${err.code}): ${err.message}`) }; - + //upon button click, run geolocaiton function in web api $('button').on('click', () => { navigator.geolocation.getCurrentPosition(success, error, options) - // fetch }) // set event handler, onclick. -}) + + function showNearest(stops) { + console.log(stops[0], 'first stop'); + // console.log(stops[1], 'first stop'); + // console.log(stops[2], 'first stop'); + var $nearDiv = $('.stopsNearby') + var $newULList = $('