├── Procfile ├── .gitignore ├── client ├── src │ ├── pages │ │ ├── Home │ │ │ ├── index.js │ │ │ └── Home.js │ │ ├── Main │ │ │ ├── index.js │ │ │ ├── Main.css │ │ │ └── Main.js │ │ ├── CheckIn │ │ │ ├── index.js │ │ │ └── CheckIn.js │ │ ├── Attendees │ │ │ ├── index.js │ │ │ └── Attendees.js │ │ ├── Workshops │ │ │ ├── index.js │ │ │ └── Workshops.js │ │ ├── Registration │ │ │ ├── index.js │ │ │ └── Registration.js │ │ ├── BadgeGeneration │ │ │ ├── index.js │ │ │ └── BadgeGeneration.js │ │ └── WorkshopDetails │ │ │ ├── index.js │ │ │ └── WorkshopDetails.js │ ├── components │ │ └── DropdownCustom │ │ │ ├── index.js │ │ │ └── DropdownCustom.js │ ├── App.js │ ├── index.js │ └── utils │ │ └── API.js ├── build │ ├── icon.png │ ├── favicon.ico │ ├── img │ │ ├── grid.png │ │ └── placeit.png │ ├── asset-manifest.json │ ├── manifest.json │ ├── index.html │ ├── static │ │ └── css │ │ │ ├── main.b5408d31.css │ │ │ └── main.b5408d31.css.map │ └── service-worker.js ├── public │ ├── icon.png │ ├── favicon.ico │ ├── img │ │ ├── grid.png │ │ └── placeit.png │ ├── manifest.json │ └── index.html └── package.json ├── nodemon.json ├── db └── schema.sql ├── routes ├── api │ ├── checkIn.js │ ├── registration.js │ ├── workshops.js │ ├── attendees.js │ └── index.js └── index.js ├── config └── config.json ├── models ├── room.js ├── instructor.js ├── pass-type.js ├── index.js ├── workshop-selection.js ├── workshop.js └── attendee.js ├── package.json ├── controllers ├── attendeesController.js ├── workshopsController.js ├── registrationController.js └── checkInController.js ├── README.md ├── server.js └── yarn.lock /Procfile: -------------------------------------------------------------------------------- 1 | web: npm run server 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ 2 | .DS_Store -------------------------------------------------------------------------------- /client/src/pages/Home/index.js: -------------------------------------------------------------------------------- 1 | export { default } from "./Home.js"; -------------------------------------------------------------------------------- /client/src/pages/Main/index.js: -------------------------------------------------------------------------------- 1 | export { default } from "./Main.js"; -------------------------------------------------------------------------------- /client/src/pages/CheckIn/index.js: -------------------------------------------------------------------------------- 1 | export { default } from "./CheckIn.js"; -------------------------------------------------------------------------------- /nodemon.json: -------------------------------------------------------------------------------- 1 | { 2 | "ignore": [ 3 | "client/*" 4 | ] 5 | } 6 | -------------------------------------------------------------------------------- /client/src/pages/Attendees/index.js: -------------------------------------------------------------------------------- 1 | export { default } from "./Attendees.js"; -------------------------------------------------------------------------------- /client/src/pages/Workshops/index.js: -------------------------------------------------------------------------------- 1 | export { default } from "./Workshops.js"; -------------------------------------------------------------------------------- /client/src/pages/Registration/index.js: -------------------------------------------------------------------------------- 1 | export { default } from "./Registration.js"; -------------------------------------------------------------------------------- /client/src/pages/BadgeGeneration/index.js: -------------------------------------------------------------------------------- 1 | export { default } from "./BadgeGeneration.js"; -------------------------------------------------------------------------------- /client/src/pages/WorkshopDetails/index.js: -------------------------------------------------------------------------------- 1 | export { default } from "./WorkshopDetails.js"; -------------------------------------------------------------------------------- /client/src/components/DropdownCustom/index.js: -------------------------------------------------------------------------------- 1 | export { default } from "./DropdownCustom"; 2 | -------------------------------------------------------------------------------- /client/build/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/evasimon/eventsnap/HEAD/client/build/icon.png -------------------------------------------------------------------------------- /client/public/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/evasimon/eventsnap/HEAD/client/public/icon.png -------------------------------------------------------------------------------- /client/build/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/evasimon/eventsnap/HEAD/client/build/favicon.ico -------------------------------------------------------------------------------- /client/build/img/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/evasimon/eventsnap/HEAD/client/build/img/grid.png -------------------------------------------------------------------------------- /client/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/evasimon/eventsnap/HEAD/client/public/favicon.ico -------------------------------------------------------------------------------- /client/public/img/grid.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/evasimon/eventsnap/HEAD/client/public/img/grid.png -------------------------------------------------------------------------------- /client/build/img/placeit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/evasimon/eventsnap/HEAD/client/build/img/placeit.png -------------------------------------------------------------------------------- /client/public/img/placeit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/evasimon/eventsnap/HEAD/client/public/img/placeit.png -------------------------------------------------------------------------------- /client/src/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import Main from "./pages/Main" 3 | 4 | const App = () =>
5 | 6 | export default App; 7 | -------------------------------------------------------------------------------- /db/schema.sql: -------------------------------------------------------------------------------- 1 | -- Drops the evin_db if it exists currently -- 2 | DROP DATABASE IF EXISTS evin_db; 3 | -- Creates the evin_db database -- 4 | CREATE DATABASE evin_db; -------------------------------------------------------------------------------- /client/src/index.js: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | import ReactDOM from "react-dom"; 3 | import App from "./App"; 4 | 5 | ReactDOM.render(, document.getElementById("root")); 6 | 7 | -------------------------------------------------------------------------------- /client/build/asset-manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "main.css": "static/css/main.b5408d31.css", 3 | "main.css.map": "static/css/main.b5408d31.css.map", 4 | "main.js": "static/js/main.37b459b1.js", 5 | "main.js.map": "static/js/main.37b459b1.js.map" 6 | } -------------------------------------------------------------------------------- /routes/api/checkIn.js: -------------------------------------------------------------------------------- 1 | const router = require("express").Router(); 2 | const checkInController = require("../../controllers/checkInController"); 3 | 4 | // matches with "/api/checkin/:uuid/:id" 5 | router.route("/:uuid/:id") 6 | .post(checkInController.update); 7 | 8 | module.exports = router; -------------------------------------------------------------------------------- /routes/api/registration.js: -------------------------------------------------------------------------------- 1 | const router = require("express").Router(); 2 | const registrationController = require("../../controllers/registrationController"); 3 | 4 | // matches with "/api/registration/:uuid" 5 | router.route("/:uuid") 6 | .post(registrationController.update); 7 | 8 | module.exports = router; -------------------------------------------------------------------------------- /routes/index.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | const router = require("express").Router(); 3 | const apiRoutes = require("./api"); 4 | 5 | // API Routes 6 | router.use("/api", apiRoutes); 7 | 8 | // If no API routes are hit, send index.html 9 | router.use(function (req, res) { 10 | res.sendFile(path.join(__dirname, "../client/build/index.html")); 11 | }); 12 | 13 | module.exports = router; 14 | -------------------------------------------------------------------------------- /routes/api/workshops.js: -------------------------------------------------------------------------------- 1 | const router = require("express").Router(); 2 | const workshopsController = require("../../controllers/workshopsController"); 3 | 4 | // matches with "/api/workshops" 5 | router.route("/") 6 | .get(workshopsController.findAll) 7 | 8 | // matches with "/api/workshops/:id" 9 | router.route("/:id") 10 | .get(workshopsController.findWorkshop) 11 | 12 | module.exports = router; -------------------------------------------------------------------------------- /routes/api/attendees.js: -------------------------------------------------------------------------------- 1 | const router = require("express").Router(); 2 | const attendeesController = require("../../controllers/attendeesController"); 3 | 4 | // matches with "/api/attendees" 5 | router.route("/") 6 | .get(attendeesController.findAll) 7 | .post(attendeesController.create); 8 | 9 | // matches with "/api/attendees/:id" 10 | router.route("/:id") 11 | .delete(attendeesController.remove); 12 | 13 | module.exports = router; -------------------------------------------------------------------------------- /client/build/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "EventSnap", 3 | "name": "EventSnap", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "icon.png", 12 | "sizes": "192x192", 13 | "type": "image/png", 14 | "density": 4.0 15 | } 16 | ], 17 | "start_url": "./", 18 | "display": "standalone", 19 | "theme_color": "#000000", 20 | "background_color": "#212b36" 21 | } -------------------------------------------------------------------------------- /client/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "EventSnap", 3 | "name": "EventSnap", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "192x192", 8 | "type": "image/png" 9 | }, 10 | { 11 | "src": "icon.png", 12 | "sizes": "192x192", 13 | "type": "image/png", 14 | "density": 4.0 15 | } 16 | ], 17 | "start_url": "./", 18 | "display": "standalone", 19 | "theme_color": "#000000", 20 | "background_color": "#212b36" 21 | } -------------------------------------------------------------------------------- /routes/api/index.js: -------------------------------------------------------------------------------- 1 | const router = require("express").Router(); 2 | const attendeesRoutes = require("./attendees"); 3 | const workshopsRoutes = require("./workshops"); 4 | const checkInRoutes = require("./checkIn"); 5 | const registrationRoutes = require("./registration"); 6 | 7 | // app routes 8 | router.use("/attendees", attendeesRoutes); 9 | router.use("/workshops", workshopsRoutes); 10 | router.use("/check-in", checkInRoutes) 11 | router.use("/registration", registrationRoutes) 12 | 13 | module.exports = router; -------------------------------------------------------------------------------- /config/config.json: -------------------------------------------------------------------------------- 1 | { 2 | "development": { 3 | "username": "root", 4 | "password": null, 5 | "database": "evin_db", 6 | "host": "127.0.0.1", 7 | "dialect": "mysql" 8 | }, 9 | "test": { 10 | "username": "root", 11 | "password": null, 12 | "database": "database_test", 13 | "host": "127.0.0.1", 14 | "dialect": "mysql" 15 | }, 16 | "production": { 17 | "use_env_variable": "JAWSDB_URL", 18 | "dialect": "mysql" 19 | } 20 | } -------------------------------------------------------------------------------- /client/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eventsnap", 3 | "version": "0.1.0", 4 | "private": true, 5 | "proxy": "http://localhost:3001/", 6 | "dependencies": { 7 | "react": "^16.0.0", 8 | "react-dom": "^16.0.0", 9 | "react-qr-reader": "^2.0.1", 10 | "react-router-dom": "^4.2.2", 11 | "react-scripts": "1.0.14", 12 | "semantic-ui-css": "^2.2.12", 13 | "semantic-ui-react": "^0.77.0", 14 | "socket.io-client": "^2.0.4" 15 | }, 16 | "scripts": { 17 | "start": "react-scripts start", 18 | "build": "react-scripts build", 19 | "test": "react-scripts test --env=jsdom", 20 | "eject": "react-scripts eject" 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /client/src/utils/API.js: -------------------------------------------------------------------------------- 1 | import axios from "axios"; 2 | 3 | export default { 4 | // gets all attendees 5 | getAttendees : function () { 6 | return axios.get("/api/attendees"); 7 | }, 8 | // gets all workshops 9 | getWorkshops : function () { 10 | return axios.get("/api/workshops"); 11 | }, 12 | // gets one workshop 13 | getOneWorkshop : function (id) { 14 | return axios.get(`/api/workshops/${id}`); 15 | }, 16 | // changes checked-in status 17 | checkIn : function (uuid, id) { 18 | return axios.post(`/api/check-in/${uuid}/${id}`); 19 | }, 20 | // changes registered status 21 | registration : function (uuid, id) { 22 | return axios.post(`/api/registration/${uuid}`); 23 | } 24 | }; -------------------------------------------------------------------------------- /models/room.js: -------------------------------------------------------------------------------- 1 | // creates a Room model and adds validation to the model 2 | module.exports = function (sequelize, DataTypes) { 3 | var Room = sequelize.define("Room", { 4 | // giving the Room model a name of type STRING 5 | name: { 6 | type: DataTypes.STRING, 7 | allowNull: false, 8 | // the Room's name cannot be null 9 | validate: { 10 | len: [1, 12] 11 | } 12 | }, 13 | createdAt: { 14 | type: DataTypes.DATE, 15 | allowNull: false, 16 | defaultValue: sequelize.fn('NOW') 17 | }, 18 | updatedAt: { 19 | type: DataTypes.DATE, 20 | allowNull: false, 21 | defaultValue: sequelize.fn('NOW') 22 | } 23 | }); 24 | 25 | return Room; 26 | }; -------------------------------------------------------------------------------- /client/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | EventSnap 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | -------------------------------------------------------------------------------- /client/build/index.html: -------------------------------------------------------------------------------- 1 | EventSnap
-------------------------------------------------------------------------------- /models/instructor.js: -------------------------------------------------------------------------------- 1 | // creates an Instructor model and adds validation to the model 2 | module.exports = function (sequelize, DataTypes) { 3 | var Instructor = sequelize.define("Instructor", { 4 | // giving the Instructor model names of type STRING 5 | coupleName: { 6 | type: DataTypes.STRING, 7 | allowNull: false, 8 | // the Instructor's names cannot be null 9 | validate: { 10 | len: [1, 100] 11 | } 12 | }, 13 | createdAt: { 14 | type: DataTypes.DATE, 15 | allowNull: false, 16 | defaultValue: sequelize.fn('NOW') 17 | }, 18 | updatedAt: { 19 | type: DataTypes.DATE, 20 | allowNull: false, 21 | defaultValue: sequelize.fn('NOW') 22 | } 23 | }); 24 | 25 | return Instructor; 26 | }; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "eventsnap", 3 | "version": "1.0.0", 4 | "description": "eventsnap app", 5 | "main": "server.js", 6 | "scripts": { 7 | "server": "node server.js", 8 | "client": "cd client && npm run start", 9 | "start": "./node_modules/.bin/concurrently \"./node_modules/.bin/nodemon\" \"npm run client\"", 10 | "build": "cd client && npm run build", 11 | "deploy": "yarn build && git add . && git commit -m \"Building for production\" && git push heroku master", 12 | "test": "echo \"Error: no test specified\" && exit 1" 13 | }, 14 | "author": "", 15 | "license": "ISC", 16 | "devDependencies": { 17 | "concurrently": "^3.5.0", 18 | "nodemon": "^1.11.0" 19 | }, 20 | "dependencies": { 21 | "axios": "^0.17.1", 22 | "express": "^4.15.4", 23 | "mysql2": "^1.5.1", 24 | "sequelize": "^4.22.15", 25 | "socket.io": "^2.0.4" 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /models/pass-type.js: -------------------------------------------------------------------------------- 1 | // creates a PassType model and adds validation to the model 2 | module.exports = function (sequelize, DataTypes) { 3 | var PassType = sequelize.define("PassType", { 4 | // giving the PassType model a code and a name of type STRING 5 | code: { 6 | type: DataTypes.STRING, 7 | allowNull: false, 8 | // the PassType's code cannot be null 9 | validate: { 10 | len: [1, 12] 11 | } 12 | }, 13 | name: { 14 | type: DataTypes.STRING, 15 | allowNull: false, 16 | // the PassType's name cannot be null 17 | validate: { 18 | len: [1, 12] 19 | } 20 | }, 21 | createdAt: { 22 | type: DataTypes.DATE, 23 | allowNull: false, 24 | defaultValue: sequelize.fn('NOW') 25 | }, 26 | updatedAt: { 27 | type: DataTypes.DATE, 28 | allowNull: false, 29 | defaultValue: sequelize.fn('NOW') 30 | } 31 | }); 32 | 33 | return PassType; 34 | }; -------------------------------------------------------------------------------- /controllers/attendeesController.js: -------------------------------------------------------------------------------- 1 | const db = require("../models"); 2 | 3 | // Defining methods for the attendeeController 4 | module.exports = { 5 | // writes the new attendee to the database 6 | // attendees are added through Postman 7 | create: function (req, res) { 8 | db.Attendee.create(req.body) 9 | .then(dbModel => res.json(dbModel)) 10 | .catch(err => res.status(422).json(err)); 11 | 12 | }, 13 | // finds all the attendees in the database 14 | findAll: function (req, res) { 15 | db.Attendee.findAll(req.body) 16 | .then(dbModel => res.json(dbModel)) 17 | .catch(err => res.status(422).json(err)); 18 | }, 19 | // removes attendee from the database 20 | // functionality not implemented into the app yet 21 | remove: function (req, res) { 22 | db.Attendee.find({ where: {id: req.params.id }}) 23 | .then(dbModel => dbModel.destroy()) 24 | .then(dbModel => res.json(dbModel)) 25 | .catch(err => res.status(422).json(err)); 26 | } 27 | } -------------------------------------------------------------------------------- /models/index.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var fs = require('fs'); 4 | var path = require('path'); 5 | var Sequelize = require('sequelize'); 6 | var basename = path.basename(__filename); 7 | var env = process.env.NODE_ENV || 'development'; 8 | var config = require(__dirname + '/../config/config.json')[env]; 9 | var db = {}; 10 | 11 | if (config.use_env_variable) { 12 | var sequelize = new Sequelize(process.env[config.use_env_variable], config); 13 | } else { 14 | var sequelize = new Sequelize(config.database, config.username, config.password, config); 15 | } 16 | 17 | fs 18 | .readdirSync(__dirname) 19 | .filter(file => { 20 | return (file.indexOf('.') !== 0) && (file !== basename) && (file.slice(-3) === '.js'); 21 | }) 22 | .forEach(file => { 23 | var model = sequelize['import'](path.join(__dirname, file)); 24 | db[model.name] = model; 25 | }); 26 | 27 | Object.keys(db).forEach(modelName => { 28 | if (db[modelName].associate) { 29 | db[modelName].associate(db); 30 | } 31 | }); 32 | 33 | db.sequelize = sequelize; 34 | db.Sequelize = Sequelize; 35 | 36 | module.exports = db; 37 | -------------------------------------------------------------------------------- /client/src/pages/Home/Home.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react' 2 | import {Container, Button, Header, Image} from 'semantic-ui-react' 3 | import {Link} from 'react-router-dom' 4 | 5 | class Home extends Component { 6 | 7 | render() { 8 | return ( 9 | 10 |
11 | 12 |
13 | 14 |

15 | Easier and faster to greet event participants. Simple guest registration. 16 | Customized QR-code check-in experience and data management in Real-Time. 17 |

18 | 19 | 22 | 23 | 26 | 27 |
28 | ) 29 | } 30 | } 31 | 32 | export default Home; -------------------------------------------------------------------------------- /client/src/components/DropdownCustom/DropdownCustom.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react' 2 | import { Dropdown, Grid, Segment } from 'semantic-ui-react' 3 | 4 | const options = [ 5 | { key: 1, text: 'One', value: 1 }, 6 | { key: 2, text: 'Two', value: 2 }, 7 | { key: 3, text: 'Three', value: 3 }, 8 | ] 9 | 10 | // react component rendered on the check-in page 11 | export default class DropdownCustom extends Component { 12 | state = {} 13 | 14 | handleChange = (e, { value }) => this.setState({ value }) 15 | 16 | render() { 17 | const { value } = this.state 18 | 19 | return ( 20 | 21 | 22 | 29 | 30 | 31 | 32 |
Current value: {value}
33 |
34 |
35 |
36 | ) 37 | } 38 | } -------------------------------------------------------------------------------- /controllers/workshopsController.js: -------------------------------------------------------------------------------- 1 | const db = require("../models"); 2 | 3 | // Defining methods for the workshopsController 4 | module.exports = { 5 | // finds all the workshops in the database 6 | findAll: function (req, res) { 7 | db.Workshop 8 | .findAll({ include: [{ model: db.Instructor }]}) 9 | .then(dbModel => res.json(dbModel)) 10 | .catch(err => res.status(422).json(err)); 11 | }, 12 | // finds One workshop in the database & includes Instructor 13 | findWorkshop: function (req, res) { 14 | // console.log('entered here') 15 | db.Workshop 16 | .findOne({ 17 | include: [{model: db.Instructor}], 18 | where: 19 | { 20 | id: req.params.id 21 | } 22 | }) 23 | .then(workshop => { 24 | // finds all class selections for that workshop & includes Attendees 25 | db.WorkshopSelection 26 | .findAll({ 27 | where: { 28 | WorkshopId: req.params.id 29 | }, 30 | include: [db.Attendee] 31 | }) 32 | .then(result => { 33 | res.json({ workshop, result }) 34 | }) 35 | }) 36 | .catch(err => res.status(422).json(err)); 37 | } 38 | } -------------------------------------------------------------------------------- /models/workshop-selection.js: -------------------------------------------------------------------------------- 1 | // creates a WorkshopSelection model and adds validation to the model 2 | module.exports = function (sequelize, DataTypes) { 3 | var WorkshopSelection = sequelize.define("WorkshopSelection", { 4 | // giving the WorkshopSelection model a code and a name of type STRING 5 | checkedIn: { 6 | type: DataTypes.BOOLEAN, 7 | defaultValue: false 8 | }, 9 | createdAt: { 10 | type: DataTypes.DATE, 11 | allowNull: false, 12 | defaultValue: sequelize.fn('NOW') 13 | }, 14 | updatedAt: { 15 | type: DataTypes.DATE, 16 | allowNull: false, 17 | defaultValue: sequelize.fn('NOW') 18 | } 19 | }); 20 | 21 | WorkshopSelection.associate = function (models) { 22 | // each WorkshopSelection belongs to a Workshop/ sets Workshop as foreign key constraint 23 | WorkshopSelection.belongsTo(models.Workshop, { 24 | foreignKey: { 25 | allowNull: false 26 | }, 27 | onDelete: "cascade" 28 | 29 | }); 30 | // each WorkshopSelection belongs to a Attendee/ sets Attendee as foreign key constraint 31 | WorkshopSelection.belongsTo(models.Attendee, { 32 | foreignKey: { 33 | allowNull: false 34 | }, 35 | onDelete: "cascade" 36 | }); 37 | 38 | }; 39 | 40 | return WorkshopSelection; 41 | }; -------------------------------------------------------------------------------- /controllers/registrationController.js: -------------------------------------------------------------------------------- 1 | const db = require("../models"); 2 | 3 | // Defining methods for the registrationController 4 | module.exports = { 5 | // updates one attendee when registering 6 | update: function (req, res) { 7 | db.Attendee 8 | // find one attendee 9 | .find({ 10 | where: { 11 | uuid: req.params.uuid 12 | } 13 | }) 14 | .then((attendee) => { 15 | if (!attendee) { 16 | console.log('workshop not found') 17 | res.json({success: false, error: 'Attendee not found'}) 18 | } else if (attendee.dataValues.registered === false) { 19 | console.log(attendee.dataValues.id) 20 | db.Attendee 21 | .update({ 22 | registered: 1 // true 23 | }, { 24 | where: { 25 | id: attendee.dataValues.id 26 | } 27 | }) 28 | .then(result => res.json({success: true, result: result})) 29 | } else if (attendee.registered === true) { 30 | console.log("You are already registered") 31 | res.json({success: false, error: 'Already Registered!'}) 32 | } 33 | }) 34 | .catch(err => res.status(422).json(err)) 35 | } 36 | } -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # EventSnap 2 | 3 | ### Overview 4 | 5 | [EventSnap](https://eventsnap.herokuapp.com/) is a QR code generator and reader full-stack WebApp that allows event organizers register guests and monitor custom check-ins in real-time. 6 | 7 | 8 | ![Hero Image](https://evasimon.github.io/img/github/eventsnap/eventsnap-hero.png) 9 | 10 | 11 | ### Goal 12 | 13 | * contribute to the community while getting more hands-on experience on building fun apps 14 | * create an app that helps organizers plan their event/workshops ahead 15 | * easy event registration, workshop check-in and monitoring 16 | 17 | ### Technologies: 18 | 19 | * Front-End Technologies Used: 20 | * `react.js` to render HTML, 21 | * `QR code generator web API` to create QR Code images, 22 | * `QR code reader react component` for reading QR code using the webcam, 23 | * `react-semantic-ui` development framework for responsive layout 24 | * `custom css` and `branding` 25 | 26 | * Back-end Technologies Used: 27 | * `node.js/express` for server connection, 28 | * `mySQL/sequelize` to query and route data, 29 | * following `MVC` design patterns, 30 | * `socket.io` for real-time communication. 31 | 32 | * Heroku Deployment: [EventSnap](https://eventsnap.herokuapp.com/) 33 | 34 | 35 | ### User Story 36 | 37 | ![User Story Image](https://evasimon.github.io/img/github/eventsnap/eventsnap-story.jpg) 38 | 39 | 40 | ### Schema 41 | 42 | ![Schema Image](https://evasimon.github.io/img/github/eventsnap/eventsnap-schema.jpg) 43 | 44 | ### Landing Screen with Slide-in Menu Bar 45 | 46 | ![Landing Image](https://evasimon.github.io/img/github/eventsnap/eventsnap-landing.jpg) 47 | 48 | 49 | ### Real-Time Data Monitoring Screen 50 | 51 | ![Real-Time Data Image](https://evasimon.github.io/img/github/eventsnap/eventsnap-real-time.jpg) 52 | 53 | 54 | 55 | ### :sparkles: Like it?!? 56 | -------------------------------------------------------------------------------- /server.js: -------------------------------------------------------------------------------- 1 | // npm packages required / dependencies 2 | const express = require("express"); 3 | const bodyParser = require("body-parser"); 4 | const routes = require("./routes") 5 | 6 | // sets up the Express App 7 | const app = require("express")(); 8 | // sets the environment variable PORT to tell the web server what port to listen on 9 | const PORT = process.env.PORT || 3001; 10 | 11 | // serves up static assets (usually on heroku) 12 | if (process.env.NODE_ENV === "production") { 13 | app.use(express.static("client/build")); 14 | } 15 | 16 | // configures body parser for AJAX requests and 17 | // sets up the Express app to handle data parsing 18 | app.use(bodyParser.urlencoded({ extended: true })); 19 | app.use(bodyParser.json()); 20 | app.use(bodyParser.text()); 21 | app.use(bodyParser.json({ type: "application/vnd.api+json" })); 22 | 23 | // adds routes, both API and view 24 | app.use(routes); 25 | 26 | // requires models for syncing 27 | var db = require("./models") 28 | 29 | // integrates socket.io 30 | const http = require('http').Server(app); 31 | // initializes a new instance of socket.io 32 | // by passing the http (the HTTP server) object 33 | const io = require('socket.io')(http); 34 | // listens on the connection event for incoming sockets, 35 | // and logs it to the console. 36 | io.on('connection', function (socket) { 37 | console.log('a user connected'); 38 | // listens on 'checkIn' event 39 | socket.on('checkIn', function (id) { 40 | console.log('checked in into workshop: ' + id); 41 | // sends id to everyone except for a certain socket 42 | // uses broadcast flag 43 | socket.broadcast.emit('checkedIn', id); 44 | }); 45 | // socket.on('disconnect', function () { 46 | // console.log('Got disconnect!'); 47 | // }); 48 | }); 49 | 50 | // syncs the sequelize models and then connects the Express app 51 | db.sequelize.sync().then(function () { 52 | http.listen(PORT, function () { 53 | console.log(`🌎 ==> Server now on port ${PORT}!`); 54 | }); 55 | }); 56 | 57 | -------------------------------------------------------------------------------- /controllers/checkInController.js: -------------------------------------------------------------------------------- 1 | const db = require("../models"); 2 | 3 | // Defining methods for the checkInController 4 | module.exports = { 5 | // updates one attendee when checking in 6 | update: (req, res) => { 7 | // console.log(req.params.uuid) 8 | db.Attendee 9 | .find({ 10 | where: { 11 | uuid: req.params.uuid 12 | } 13 | }) 14 | .then((attendee) => { 15 | if (!attendee) { 16 | res.status(404).json('Attendee not found') 17 | } 18 | db.WorkshopSelection 19 | // finds one attendee with one workshop selection 20 | .find({ 21 | where: { 22 | AttendeeId: attendee.id, 23 | WorkshopId: req.params.id 24 | } 25 | }) 26 | .then((workshop) => { 27 | if (workshop && workshop.checkedIn === false) { 28 | db.WorkshopSelection 29 | .update({ 30 | checkedIn: 1 // true 31 | }, { 32 | where: { 33 | AttendeeId: attendee.id, 34 | WorkshopId: req.params.id 35 | } 36 | }) 37 | .then(result => res.json({success: true, result: result})) 38 | } else if (!workshop) { 39 | res.json({success: false, error: 'Workshop Selection Not Found!'}) 40 | } else { 41 | res.json({success: false, error: 'Already Checked-in!'}) 42 | } 43 | }) 44 | }) 45 | .catch(err => res.status(422).json(err)); 46 | } 47 | } -------------------------------------------------------------------------------- /models/workshop.js: -------------------------------------------------------------------------------- 1 | // creates a Workshop model and adds validation to the model 2 | module.exports = function (sequelize, DataTypes) { 3 | var Workshop = sequelize.define("Workshop", { 4 | // giving the Workshop model a code and title of type STRING 5 | code: { 6 | type: DataTypes.STRING, 7 | allowNull: false, 8 | // the Workshop's code cannot be null 9 | validate: { 10 | len: [1, 12] 11 | } 12 | }, 13 | title: { 14 | type: DataTypes.STRING, 15 | allowNull: false, 16 | // the Workshop's title cannot be null 17 | validate: { 18 | len: [1, 255] 19 | } 20 | }, 21 | day: { 22 | type: DataTypes.STRING, 23 | allowNull: false 24 | }, 25 | timeFrame: { 26 | type: DataTypes.STRING, 27 | allowNull: false 28 | }, 29 | maxSeat: { 30 | type: DataTypes.INTEGER, 31 | allowNull: false 32 | }, 33 | skillLevel: { 34 | type: DataTypes.STRING, 35 | allowNull: false 36 | }, 37 | createdAt: { 38 | type: DataTypes.DATE, 39 | allowNull: false, 40 | defaultValue: sequelize.fn('NOW') 41 | }, 42 | updatedAt: { 43 | type: DataTypes.DATE, 44 | allowNull: false, 45 | defaultValue: sequelize.fn('NOW') 46 | } 47 | }); 48 | 49 | Workshop.associate = function (models) { 50 | // each Workshop belongs to a Instructor sets Instructor as foreign key 51 | // constraint 52 | Workshop.belongsTo(models.Instructor, { 53 | foreignKey: { 54 | allowNull: false 55 | } 56 | }); 57 | // each Workshop belongs to a Room sets Room as foreign key constraint 58 | Workshop.belongsTo(models.Room, { 59 | foreignKey: { 60 | allowNull: false 61 | } 62 | }); 63 | 64 | }; 65 | 66 | return Workshop; 67 | }; -------------------------------------------------------------------------------- /client/build/static/css/main.b5408d31.css: -------------------------------------------------------------------------------- 1 | *{-webkit-box-sizing:border-box;box-sizing:border-box}body{color:#fff;background:#284666 url("/img/grid.png")}.ui.header,.ui.list .item .header,.ui.menu,body,h1.header,h2.header,h3.header{font-family:Roboto,sans-serif}h1.ui.inverted.header{font-size:3em;margin:76px 0 30px}h2.ui.inverted.header{margin:50px 0 30px}.ui.item.menu{margin-bottom:0;border-radius:0}.ui.fluid.three.item.menu #logo{font-family:Kalam,cursive;font-size:24px}#logo span,span#logo{font-family:Kalam,cursive}#logo span{color:#f95f7b}.ui.fluid.three.item.menu .item{font-size:18px}.ui.segment.pushable{background:#212b36 url("/img/grid.png");min-height:50em;margin-top:0;border-radius:0}.ui.container{width:70%}.ui.container p{letter-spacing:1.3px;font-size:20px;line-height:40px}.ui.modal p{font-size:10px}.ui.buttons{margin-top:50px}.ui.positive.button{background-color:#38b5b5}.ui.inverted.list .item.card h2.header a{color:#38b5b5!important}.ui.positive.button:hover{background-color:#329fa3}.ui.inverted.list .item.card h2.header a:hover{color:#329fa3!important}.ui.inverted.list .item.card h3.header{margin-bottom:20px}.ui.divided.inverted.list .item.badge-card,.ui.divided.inverted.list .item.card{padding:30px;margin-bottom:20px;background-color:#2d3948;-webkit-box-shadow:0 4px 8px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19);box-shadow:0 4px 8px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.ui.divided.inverted.list .item.badge-card{padding:20px;display:inline-block;text-align:center;width:300px;height:400px;margin-right:30px}.ui.divided.inverted.list .item.badge-card img{margin:30px auto}.ui.divided.inverted.list .item.badge-card .list .item,.ui.divided.inverted.list .item.card .list .item{margin-bottom:5px}.ui.divided.inverted.list .item.badge-card .list .item:last-child,.ui.divided.inverted.list .item.card .list .item:last-child{text-transform:uppercase;margin-top:2px;font-weight:700;font-size:16px}ui.inverted.four.statistics.card{background-color:#2d3948}.container .centerBox{-webkit-box-shadow:0 4px 8px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19);box-shadow:0 4px 8px 0 rgba(0,0,0,.2),0 6px 20px 0 rgba(0,0,0,.19)}.ui.modal .center-text.content{text-align:center;margin-top:100px}.ui.modal .center-text.content p{font-size:28px}.ui.small.image.qrImage{margin-right:30px}.list.item{margin:5px 0}.ui.inverted.four.statistics{margin:20px 0 10px}@media print{*,.ui.divided.inverted.list .item.badge-card,.ui.inverted.list .item .header,.ui.segment.pushable,body,html{background-color:#fff;color:#000}.ui.item.menu{display:none}.ui.container{width:100%}} 2 | /*# sourceMappingURL=main.b5408d31.css.map*/ -------------------------------------------------------------------------------- /client/src/pages/Attendees/Attendees.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react' 2 | import {Container, List, Header} from 'semantic-ui-react' 3 | import API from "../../utils/API"; 4 | 5 | export default class Attendees extends Component { 6 | state = { 7 | attendees: [] 8 | } 9 | 10 | componentDidMount() { 11 | this.loadAttendees(); 12 | } 13 | 14 | loadAttendees = () => { 15 | API 16 | .getAttendees() 17 | .then(res => { 18 | console.log(res) 19 | this.setState({attendees: res.data}) 20 | }) 21 | .catch(err => console.log(err)) 22 | } 23 | 24 | attendeeRender() { 25 | return this 26 | .state 27 | .attendees 28 | .map(attendee => ( 29 | 30 | 37 | 38 | 39 | {attendee.firstName + " " + attendee.lastName} 40 | 41 | 42 | 43 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | )) 56 | } 57 | 58 | render() { 59 | 60 | return ( 61 | 62 |
63 | Event Attendees 64 |
65 | {this.state.attendees.length 66 | ? ( 67 | 68 | {this.attendeeRender()} 69 | 70 | ) 71 | : ( 72 |

No Results to Display

73 | )} 74 |
75 | ) 76 | } 77 | } -------------------------------------------------------------------------------- /client/src/pages/BadgeGeneration/BadgeGeneration.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from "react"; 2 | import {Container, List, Image, Header} from 'semantic-ui-react' 3 | import API from "../../utils/API"; 4 | 5 | class BadgeGeneration extends Component { 6 | state = { 7 | attendees: [] 8 | } 9 | 10 | componentDidMount() { 11 | this.loadAttendees(); 12 | } 13 | 14 | loadAttendees = () => { 15 | API 16 | .getAttendees() 17 | .then(res => { 18 | console.log(res) 19 | this.setState({attendees: res.data}) 20 | }) 21 | .catch(err => console.log(err)) 22 | } 23 | 24 | render() { 25 | return ( 26 | 27 |
28 | Print Event Badges (CTRL + P) 29 |
30 | {this.state.attendees.length 31 | ? ( 32 | 33 | {this 34 | .state 35 | .attendees 36 | .map(attendee => ( 37 | 38 | 39 | this is a unique QR code 45 | 46 | {attendee.firstName + " " + attendee.lastName} 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | ))} 57 | 58 | ) 59 | : ( 60 |

No Results to Display

61 | )} 62 |
63 | ) 64 | } 65 | } 66 | 67 | export default BadgeGeneration; -------------------------------------------------------------------------------- /client/build/service-worker.js: -------------------------------------------------------------------------------- 1 | "use strict";function setOfCachedUrls(e){return e.keys().then(function(e){return e.map(function(e){return e.url})}).then(function(e){return new Set(e)})}var precacheConfig=[["/index.html","dc49f8c671806ef69a00d8fe04152b1b"],["/static/css/main.b5408d31.css","f5eb4d749931928f6a982a6a02a285a2"],["/static/js/main.37b459b1.js","f676b9fc079c2a9f26536aa800048e28"]],cacheName="sw-precache-v3-sw-precache-webpack-plugin-"+(self.registration?self.registration.scope:""),ignoreUrlParametersMatching=[/^utm_/],addDirectoryIndex=function(e,t){var n=new URL(e);return"/"===n.pathname.slice(-1)&&(n.pathname+=t),n.toString()},cleanResponse=function(e){if(!e.redirected)return Promise.resolve(e);return("body"in e?Promise.resolve(e.body):e.blob()).then(function(t){return new Response(t,{headers:e.headers,status:e.status,statusText:e.statusText})})},createCacheKey=function(e,t,n,r){var a=new URL(e);return r&&a.pathname.match(r)||(a.search+=(a.search?"&":"")+encodeURIComponent(t)+"="+encodeURIComponent(n)),a.toString()},isPathWhitelisted=function(e,t){if(0===e.length)return!0;var n=new URL(t).pathname;return e.some(function(e){return n.match(e)})},stripIgnoredUrlParameters=function(e,t){var n=new URL(e);return n.hash="",n.search=n.search.slice(1).split("&").map(function(e){return e.split("=")}).filter(function(e){return t.every(function(t){return!t.test(e[0])})}).map(function(e){return e.join("=")}).join("&"),n.toString()},hashParamName="_sw-precache",urlsToCacheKeys=new Map(precacheConfig.map(function(e){var t=e[0],n=e[1],r=new URL(t,self.location),a=createCacheKey(r,hashParamName,n,/\.\w{8}\./);return[r.toString(),a]}));self.addEventListener("install",function(e){e.waitUntil(caches.open(cacheName).then(function(e){return setOfCachedUrls(e).then(function(t){return Promise.all(Array.from(urlsToCacheKeys.values()).map(function(n){if(!t.has(n)){var r=new Request(n,{credentials:"same-origin"});return fetch(r).then(function(t){if(!t.ok)throw new Error("Request for "+n+" returned a response with status "+t.status);return cleanResponse(t).then(function(t){return e.put(n,t)})})}}))})}).then(function(){return self.skipWaiting()}))}),self.addEventListener("activate",function(e){var t=new Set(urlsToCacheKeys.values());e.waitUntil(caches.open(cacheName).then(function(e){return e.keys().then(function(n){return Promise.all(n.map(function(n){if(!t.has(n.url))return e.delete(n)}))})}).then(function(){return self.clients.claim()}))}),self.addEventListener("fetch",function(e){if("GET"===e.request.method){var t,n=stripIgnoredUrlParameters(e.request.url,ignoreUrlParametersMatching),r="index.html";(t=urlsToCacheKeys.has(n))||(n=addDirectoryIndex(n,r),t=urlsToCacheKeys.has(n));var a="/index.html";!t&&"navigate"===e.request.mode&&isPathWhitelisted(["^(?!\\/__).*"],e.request.url)&&(n=new URL(a,self.location).toString(),t=urlsToCacheKeys.has(n)),t&&e.respondWith(caches.open(cacheName).then(function(e){return e.match(urlsToCacheKeys.get(n)).then(function(e){if(e)return e;throw Error("The cached response that was expected is missing.")})}).catch(function(t){return console.warn('Couldn\'t serve response for "%s" from cache: %O',e.request.url,t),fetch(e.request)}))}}); -------------------------------------------------------------------------------- /client/src/pages/Workshops/Workshops.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react' 2 | import {Container, List, Header} from 'semantic-ui-react' 3 | import API from "../../utils/API"; 4 | 5 | class Workshops extends Component { 6 | 7 | state = { 8 | workshops: [] 9 | } 10 | componentDidMount() { 11 | this.loadWorkshops() 12 | } 13 | 14 | loadWorkshops = () => { 15 | API 16 | .getWorkshops() 17 | .then(workshops => { 18 | console.log(workshops) 19 | this.setState({workshops: workshops.data}) 20 | }) 21 | .catch(err => console.log(err)); 22 | } 23 | 24 | render() { 25 | 26 | return ( 27 |
28 | 29 |
30 | Event Workshops 31 |
32 | {this.state.workshops.length 33 | ? ( 34 | 35 | {this.state.workshops 36 | .map(workshop => ( 37 | 38 | 39 | 40 | 41 | {workshop.code}: {workshop.title} 42 | 43 | 44 | 45 | 46 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | ))} 57 | 58 | 59 | ) 60 | : ( 61 |

No Results to Display

62 | ) 63 | } 64 |
65 |
66 | ) 67 | } 68 | } 69 | 70 | export default Workshops -------------------------------------------------------------------------------- /models/attendee.js: -------------------------------------------------------------------------------- 1 | // creates an Attendee model and adds validation to the model 2 | module.exports = function (sequelize, DataTypes) { 3 | var Attendee = sequelize.define("Attendee", { 4 | // giving the Attendee model a name of type STRING 5 | firstName: { 6 | type: DataTypes.STRING, 7 | allowNull: false, 8 | // the Attendee's first name cannot be null 9 | validate: { 10 | len: [1, 50] 11 | } 12 | }, 13 | lastName: { 14 | type: DataTypes.STRING, 15 | allowNull: false, 16 | // the Attendee's last name cannot be null 17 | validate: { 18 | len: [1, 50] 19 | } 20 | }, 21 | email: { 22 | type: DataTypes.STRING, 23 | allowNull: false, 24 | // the Attendee's email cannot be null 25 | validate: { 26 | len: [1, 50] 27 | } 28 | }, 29 | city: { 30 | type: DataTypes.STRING, 31 | allowNull: false, 32 | // the Attendee's city cannot be null 33 | validate: { 34 | len: [1, 50] 35 | } 36 | }, 37 | state: { 38 | type: DataTypes.STRING, 39 | allowNull: false, 40 | // the Attendee's state cannot be null 41 | validate: { 42 | len: [1, 50] 43 | } 44 | }, 45 | // the Attendee's unique identifier cannot be null 46 | uuid: { 47 | type: DataTypes.UUID, 48 | defaultValue: DataTypes.UUIDV1, 49 | allowNull: false 50 | }, 51 | dancerType: { 52 | // the Attendee's dancerType: Lead or Follower 53 | type: DataTypes.STRING, 54 | allowNull: false, 55 | validate: { 56 | len: [1, 12] 57 | } 58 | }, 59 | // nedded when class selection form is sent to the attenddee functionality not 60 | // implemented, yet 61 | emailSent: { 62 | type: DataTypes.BOOLEAN, 63 | defaultValue: false 64 | 65 | }, 66 | // functionality not implemented, yet 67 | formCompleted: { 68 | type: DataTypes.BOOLEAN, 69 | defaultValue: false 70 | 71 | }, 72 | // functionality not implemented, yet 73 | badgePrinted: { 74 | type: DataTypes.BOOLEAN, 75 | defaultValue: false 76 | }, 77 | // sets the registered datatype for the attendee 78 | registered: { 79 | type: DataTypes.BOOLEAN, 80 | defaultValue: false 81 | }, 82 | createdAt: { 83 | type: DataTypes.DATE, 84 | allowNull: false, 85 | defaultValue: sequelize.fn('NOW') 86 | }, 87 | updatedAt: { 88 | type: DataTypes.DATE, 89 | allowNull: false, 90 | defaultValue: sequelize.fn('NOW') 91 | } 92 | }); 93 | 94 | Attendee.associate = function (models) { 95 | // each Attendee belongs to a PassType sets PassType as foreign key constraint 96 | Attendee.belongsTo(models.PassType, { 97 | foreignKey: { 98 | allowNull: false 99 | } 100 | }); 101 | }; 102 | 103 | return Attendee; 104 | }; -------------------------------------------------------------------------------- /client/src/pages/Main/Main.css: -------------------------------------------------------------------------------- 1 | * { 2 | box-sizing: border-box; 3 | } 4 | 5 | body { 6 | color: #fff; 7 | background: rgb(40, 70, 102) url('/img/grid.png'); 8 | font-family: 'Roboto', sans-serif;} 9 | 10 | h1.header, h2.header, h3.header, 11 | .ui.header, 12 | .ui.list .item .header, 13 | .ui.menu { 14 | font-family: 'Roboto', sans-serif; 15 | } 16 | 17 | h1.ui.inverted.header { 18 | font-size: 3em; 19 | margin: 76px 0 30px; 20 | } 21 | 22 | h2.ui.inverted.header { 23 | margin: 50px 0 30px 0; 24 | } 25 | 26 | .ui.item.menu { 27 | margin-bottom: 0; 28 | border-radius: 0; 29 | } 30 | 31 | .ui.fluid.three.item.menu #logo { 32 | font-family: 'Kalam', cursive; 33 | font-size: 24px; 34 | } 35 | 36 | span#logo { 37 | font-family: 'Kalam', cursive; 38 | } 39 | 40 | #logo span{ 41 | font-family: 'Kalam', cursive; 42 | color: #f95f7b 43 | } 44 | 45 | .ui.fluid.three.item.menu .item{ 46 | font-size: 18px; 47 | } 48 | 49 | .ui.segment.pushable { 50 | background: #212b36 url('/img/grid.png'); 51 | min-height:50em; 52 | margin-top: 0; 53 | border-radius: 0; 54 | } 55 | 56 | .ui.container{ 57 | width: 70%; 58 | } 59 | 60 | .ui.container p { 61 | letter-spacing: 1.3px; 62 | font-size: 20px; 63 | line-height: 40px; 64 | } 65 | 66 | .ui.modal p{ 67 | font-size: 10px; 68 | } 69 | 70 | .ui.buttons { 71 | margin-top: 50px; 72 | } 73 | 74 | .ui.positive.button{ 75 | background-color: #38b5b5; 76 | } 77 | 78 | .ui.inverted.list .item.card h2.header a { 79 | color: #38b5b5 !important; 80 | } 81 | 82 | .ui.positive.button:hover{ 83 | background-color: #329FA3; 84 | } 85 | 86 | .ui.inverted.list .item.card h2.header a:hover { 87 | color: #329FA3 !important; 88 | } 89 | 90 | .ui.inverted.list .item.card h3.header { 91 | margin-bottom: 20px; 92 | } 93 | 94 | .ui.divided.inverted.list .item.card, 95 | .ui.divided.inverted.list .item.badge-card { 96 | padding: 30px; 97 | margin-bottom: 20px; 98 | background-color: #2d3948; 99 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); 100 | } 101 | 102 | .ui.divided.inverted.list .item.badge-card { 103 | padding: 20px; 104 | } 105 | 106 | .ui.divided.inverted.list .item.badge-card { 107 | display: inline-block; 108 | text-align: center; 109 | width: 300px; 110 | height: 400px; 111 | margin-right: 30px; 112 | } 113 | 114 | .ui.divided.inverted.list .item.badge-card img{ 115 | margin: 30px auto 30px 116 | } 117 | 118 | .ui.divided.inverted.list .item.badge-card .list .item, 119 | .ui.divided.inverted.list .item.card .list .item{ 120 | margin-bottom: 5px 121 | } 122 | 123 | .ui.divided.inverted.list .item.badge-card .list .item:last-child, 124 | .ui.divided.inverted.list .item.card .list .item:last-child{ 125 | text-transform: uppercase; 126 | margin-top: 2px; 127 | font-weight: bold; 128 | font-size: 16px; 129 | } 130 | 131 | ui.inverted.four.statistics.card { 132 | background-color: #2d3948; 133 | } 134 | 135 | .container .centerBox { 136 | box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19); 137 | } 138 | 139 | .ui.modal .center-text.content { 140 | text-align: center; 141 | margin-top: 100px 142 | } 143 | 144 | .ui.modal .center-text.content p{ 145 | font-size: 28px; 146 | } 147 | 148 | .ui.small.image.qrImage{ 149 | margin-right: 30px; 150 | } 151 | 152 | .list.item { 153 | margin: 5px 0; 154 | } 155 | 156 | .ui.inverted.four.statistics { 157 | margin: 20px 0 10px 158 | } 159 | 160 | /* sets media print query to print badges */ 161 | @media print { 162 | *, body, html, 163 | .ui.segment.pushable, 164 | .ui.divided.inverted.list .item.badge-card, 165 | .ui.inverted.list .item .header { 166 | background-color: #fff; 167 | color: #000; 168 | } 169 | .ui.item.menu { 170 | display: none; 171 | } 172 | .ui.container{ 173 | width: 100%; 174 | } 175 | } -------------------------------------------------------------------------------- /client/build/static/css/main.b5408d31.css.map: -------------------------------------------------------------------------------- 1 | {"version":3,"sources":["pages/Main/Main.css"],"names":[],"mappings":"AAAA,EACI,8BACQ,qBAAuB,CAGnC,KACI,WACA,uCAAkD,CAGtD,8EAFI,6BAAkC,CAStC,sBACI,cACA,kBAAoB,CAGxB,sBACI,kBAAsB,CAG1B,cACI,gBACA,eAAiB,CAGrB,gCACI,0BACA,cAAgB,CAOpB,qBAHI,yBAA8B,CAMjC,WADG,aAAc,CAGlB,gCACQ,cAAgB,CAGxB,qBACI,wCACA,gBACA,aACA,eAAiB,CAGrB,cACI,SAAW,CAGf,gBACI,qBACA,eACA,gBAAkB,CAGtB,YACI,cAAgB,CAGpB,YACI,eAAiB,CAGrB,oBACI,wBAA0B,CAG9B,yCACI,uBAA0B,CAG9B,0BACI,wBAA0B,CAG9B,+CACI,uBAA0B,CAG9B,uCACI,kBAAoB,CAGxB,gFAEI,aACA,mBACA,yBACA,2EACQ,kEAA6E,CAGzF,2CACI,aAIA,qBACA,kBACA,YACA,aACA,iBAAmB,CAGvB,+CACI,gBAAsB,CAG1B,wGAEI,iBAAkB,CAGtB,8HAEI,yBACA,eACA,gBACA,cAAgB,CAGpB,iCACI,wBAA0B,CAG9B,sBACK,2EACQ,kEAA6E,CAG1F,+BACI,kBACA,gBAAiB,CAGrB,iCACI,cAAgB,CAGpB,wBACI,iBAAmB,CAGvB,WACI,YAAc,CAGlB,6BACI,kBAAmB,CAGvB,aACI,4GAII,sBACA,UAAY,CAEhB,cACI,YAAc,CAElB,cACI,UAAY,CACf","file":"static/css/main.b5408d31.css","sourcesContent":["* {\n -webkit-box-sizing: border-box;\n box-sizing: border-box;\n}\n\nbody {\n color: #fff;\n background: rgb(40, 70, 102) url('/img/grid.png');\n font-family: 'Roboto', sans-serif;}\n\nh1.header, h2.header, h3.header,\n.ui.header,\n.ui.list .item .header,\n.ui.menu {\n font-family: 'Roboto', sans-serif;\n}\n\nh1.ui.inverted.header {\n font-size: 3em;\n margin: 76px 0 30px;\n}\n\nh2.ui.inverted.header {\n margin: 50px 0 30px 0;\n}\n\n.ui.item.menu {\n margin-bottom: 0;\n border-radius: 0;\n}\n\n.ui.fluid.three.item.menu #logo {\n font-family: 'Kalam', cursive;\n font-size: 24px;\n}\n\nspan#logo {\n font-family: 'Kalam', cursive;\n}\n\n#logo span{\n font-family: 'Kalam', cursive;\n color: #f95f7b\n}\n\n.ui.fluid.three.item.menu .item{\n font-size: 18px;\n}\n\n.ui.segment.pushable {\n background: #212b36 url('/img/grid.png');\n min-height:50em;\n margin-top: 0;\n border-radius: 0;\n}\n\n.ui.container{\n width: 70%;\n}\n\n.ui.container p {\n letter-spacing: 1.3px;\n font-size: 20px;\n line-height: 40px;\n}\n\n.ui.modal p{\n font-size: 10px;\n}\n\n.ui.buttons {\n margin-top: 50px;\n}\n\n.ui.positive.button{\n background-color: #38b5b5;\n}\n\n.ui.inverted.list .item.card h2.header a {\n color: #38b5b5 !important;\n}\n\n.ui.positive.button:hover{\n background-color: #329FA3;\n}\n\n.ui.inverted.list .item.card h2.header a:hover {\n color: #329FA3 !important;\n}\n\n.ui.inverted.list .item.card h3.header {\n margin-bottom: 20px;\n}\n\n.ui.divided.inverted.list .item.card,\n.ui.divided.inverted.list .item.badge-card {\n padding: 30px;\n margin-bottom: 20px;\n background-color: #2d3948;\n -webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n\n.ui.divided.inverted.list .item.badge-card {\n padding: 20px;\n}\n\n.ui.divided.inverted.list .item.badge-card {\n display: inline-block;\n text-align: center;\n width: 300px;\n height: 400px;\n margin-right: 30px;\n}\n\n.ui.divided.inverted.list .item.badge-card img{\n margin: 30px auto 30px\n}\n\n.ui.divided.inverted.list .item.badge-card .list .item,\n.ui.divided.inverted.list .item.card .list .item{\n margin-bottom: 5px\n}\n\n.ui.divided.inverted.list .item.badge-card .list .item:last-child,\n.ui.divided.inverted.list .item.card .list .item:last-child{\n text-transform: uppercase;\n margin-top: 2px;\n font-weight: bold;\n font-size: 16px;\n}\n\nui.inverted.four.statistics.card {\n background-color: #2d3948;\n}\n\n.container .centerBox {\n -webkit-box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);\n}\n\n.ui.modal .center-text.content {\n text-align: center;\n margin-top: 100px\n}\n\n.ui.modal .center-text.content p{\n font-size: 28px;\n}\n\n.ui.small.image.qrImage{\n margin-right: 30px;\n}\n\n.list.item {\n margin: 5px 0;\n}\n\n.ui.inverted.four.statistics {\n margin: 20px 0 10px\n}\n\n@media print {\n *, body, html,\n .ui.segment.pushable,\n .ui.divided.inverted.list .item.badge-card,\n .ui.inverted.list .item .header {\n background-color: #fff;\n color: #000;\n }\n .ui.item.menu {\n display: none;\n }\n .ui.container{\n width: 100%;\n }\n}\n\n\n// WEBPACK FOOTER //\n// ./src/pages/Main/Main.css"],"sourceRoot":""} -------------------------------------------------------------------------------- /client/src/pages/Main/Main.js: -------------------------------------------------------------------------------- 1 | // * **Main** - contains the main-container div that holds the main layout and 2 | // navigation. 3 | 4 | import React, {Component} from "react" 5 | import {Sidebar, Segment, Menu, Icon} from 'semantic-ui-react' 6 | import {BrowserRouter as Router, Route, Switch, Link, NavLink} from 'react-router-dom' 7 | import Home from "../../pages/Home" 8 | import Attendees from "../../pages/Attendees" 9 | import BadgeGeneration from "../../pages/BadgeGeneration" 10 | import Workshops from "../../pages/Workshops" 11 | import WorkshopDetails from "../../pages/WorkshopDetails" 12 | import Registration from "../../pages/Registration" 13 | import CheckIn from "../../pages/CheckIn" 14 | import "./Main.css"; 15 | 16 | class Main extends Component { 17 | state = { 18 | visible: false 19 | } 20 | 21 | toggleVisibility = () => this.setState({ 22 | visible: !this.state.visible 23 | }) 24 | 25 | render() { 26 | const {visible} = this.state 27 | return ( 28 | 29 |
30 | 31 | 32 | 33 | Menu 34 | 35 | 38 | 39 | 40 | Check-In 41 | 42 | 43 | 44 | 52 | 53 | 54 | Home 55 | 56 | 57 | 58 | Attendees 59 | 60 | 61 | 62 | Badges 63 | 64 | 65 | 66 | Workshops 67 | 68 | 69 | 70 | Registration 71 | 72 | 73 | 74 | Check-In 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 |
93 |
94 | ) 95 | } 96 | } 97 | 98 | export default Main; -------------------------------------------------------------------------------- /client/src/pages/CheckIn/CheckIn.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from "react"; 2 | import QrReader from "react-qr-reader"; 3 | import API from "../../utils/API"; 4 | import {setTimeout} from "timers"; 5 | import { 6 | Container, 7 | Dropdown, 8 | Grid, 9 | Segment, 10 | Icon, 11 | Modal, 12 | Header 13 | } from 'semantic-ui-react' 14 | import '../Main/Main.css' 15 | import openSocket from 'socket.io-client'; 16 | 17 | const socket = openSocket(); 18 | 19 | class CheckIn extends Component { 20 | 21 | constructor(props) { 22 | super(props) 23 | this.state = { 24 | delay: 500, 25 | modalOpen: false, 26 | workshops: [], 27 | options: [], 28 | selectedWS: {}, 29 | msg: '', 30 | iconName: '', 31 | iconColor: 'grey' 32 | } 33 | this.handleScan = this 34 | .handleScan 35 | .bind(this) 36 | } 37 | 38 | handleScan(data) { 39 | if (data) { 40 | // restarts scan after 3s 41 | setTimeout(function () { 42 | this.setState({delay: 500, modalOpen: false}) 43 | }.bind(this), 3000) 44 | 45 | // handles check-in if Modal not open 46 | if (!this.modalOpen) { 47 | this.handleCheckIn(data, this.state.selectedWS.id) 48 | } 49 | } 50 | } 51 | 52 | handleError(err) { 53 | console.error(err) 54 | } 55 | 56 | handleCheckIn = (uuid, id) => { 57 | API 58 | .checkIn(uuid, id) 59 | .then(res => { 60 | if (res.data.success) { 61 | console.log(`${uuid} is checked in now to workshop ${id}`) 62 | console.log("checked in successfully", res.data) 63 | this.setState({checkedIn: true, msg: 'Success', iconName: 'checkmark', iconColor: 'green'}) 64 | // sends workshopId to the server 65 | socket.emit('checkIn', id); 66 | } else { 67 | console.log(res.data.error); 68 | this.setState({msg: res.data.error, iconName: 'x', iconColor: 'red'}) 69 | } 70 | // stops scanning and opens modal 71 | this.setState({delay: false, modalOpen: true}) 72 | 73 | }) 74 | .catch(err => console.log(err.respose)); 75 | } 76 | 77 | componentDidMount() { 78 | this.loadWorkshops(); 79 | } 80 | 81 | // componentWillUnmount() { 82 | // socket.disconnect(); 83 | // } 84 | 85 | // loads workshop list under the dropdown when the check-in page is rendered 86 | loadWorkshops = () => { 87 | API 88 | .getWorkshops() 89 | .then(workshops => { 90 | this.setState({ 91 | workshops: workshops.data, 92 | options: workshops.data.map(workshop => ( 93 | { 94 | key: workshop.id, 95 | text: workshop.code + ": " + workshop.title, 96 | value: workshop.id 97 | })) 98 | }) 99 | }) 100 | .catch(err => console.log(err.respose)) 101 | } 102 | 103 | // gets the selected workshop's id/value 104 | handleChange = (e, {value}) => { 105 | for (var i = 0; i < this.state.workshops.length; i++) { 106 | if (this.state.workshops[i].id === value) { 107 | this.setState({selectedWS: this.state.workshops[i]}) 108 | } 109 | } 110 | } 111 | 112 | render() { 113 | 114 | return ( 115 |
116 | 117 |
Check-In Now
118 | 119 | 120 | 126 | 127 | 128 | 129 | 130 | 138 | 139 | 140 | 141 | 142 | 143 |
{this.state.selectedWS.title}
144 |
145 |
146 |
147 | 148 | 149 | 150 | 151 |

{this.state.msg}

152 |
153 |
154 |
155 |
156 | ) 157 | } 158 | } 159 | 160 | export default CheckIn; -------------------------------------------------------------------------------- /client/src/pages/Registration/Registration.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from "react"; 2 | import QrReader from "react-qr-reader"; 3 | import API from "../../utils/API"; 4 | import {setTimeout} from "timers"; 5 | import {Container, Header, Grid, Modal, Button} from 'semantic-ui-react' 6 | import '../Main/Main.css' 7 | 8 | class Registration extends Component { 9 | 10 | constructor(props) { 11 | super(props) 12 | this.state = { 13 | delay: 500, 14 | modalOpen: false, 15 | msg: '', 16 | iconName: '', 17 | iconColor: 'grey' 18 | } 19 | this.handleScan = this 20 | .handleScan 21 | .bind(this) 22 | } 23 | 24 | handleScan(data) { 25 | if (data && !this.modalOpen) { 26 | this.handleRegistration(data) 27 | } 28 | } 29 | 30 | handleError(err) { 31 | console.error(err) 32 | } 33 | 34 | handleIAgreeBtn = () => { 35 | console.log("done") 36 | this.setState({modalOpen: false}) 37 | } 38 | 39 | handleRegistration = (uuid) => { 40 | API 41 | .registration(uuid) 42 | .then(res => { 43 | if (res.data.success) { 44 | console.log(`${uuid} is registered`) 45 | this.setState({registered: true, msg: 'Success', iconName: 'checkmark', iconColor: 'green'}) 46 | } else { 47 | console.log(res.data.error); 48 | this.setState({msg: res.data.error, iconName: 'x', iconColor: 'red'}) 49 | } 50 | this.setState({modalOpen: true}) 51 | 52 | }) 53 | .catch(err => console.log(err.respose)); 54 | } 55 | 56 | render() { 57 | 58 | return ( 59 |
60 | 61 |
Event Registration
62 | 63 | 64 | 72 | 73 | 74 | 75 | 76 | 77 |
78 | 80 |
81 |
82 | Waiver 83 |
84 |

85 | Waive Right to Video or Audio Recordings 86 | I understand that my participation in the 2016 Chicago MINI Tango Festival may 87 | be recorded on video tape, film and / or photographs, and I expressly agree to 88 | and grant unlimited right and authority to use any recordings of my 89 | participation in the aforementioned event in any media, in perpetuity, in 90 | whatever manner and by whatever means, without obligation to me.Such recordings 91 | are the sole property of the person(s)and / or organization(s)making them.

92 |

93 | Waive Right to Damages or Injuries 94 | I understand the physical risks of participating in social dancing and assume 95 | full responsibility for any injury or personal damages resulting from my 96 | participation in any part of the 2016 Chicago MINI Tango Festival.I hereby, for 97 | myself and my heirs, executors and administrators, waive and release any and all 98 | rights for damages I might have against Chicago Milonguero, Ltd., sponsor of the 99 | 2016 Chicago MINI Tango Festival, its agents, for any and all injuries and / or 100 | damages which may be suffered by me in participation at the 2016 Chicago MINI 101 | Tango Festival and including traveling to and from the Chicago MINI Tango

102 |

103 | Waive Right to Refund 104 | I understand that any unsportsmanlike conduct, inappropriate and / or violent 105 | behavior or harassment of any member of the 2016 Chicago MINI Tango Festival 106 | staff or volunteers, any of the other participants or attendees, or any staff of 107 | the HILTON Rosemont on River Road will be cause for immediate ejection from the 108 | premises, without refund of any fees.

109 | 110 | 111 | 114 | 115 | 118 | 119 | 120 |
121 |
122 |
123 |
124 | ) 125 | } 126 | } 127 | 128 | export default Registration; -------------------------------------------------------------------------------- /client/src/pages/WorkshopDetails/WorkshopDetails.js: -------------------------------------------------------------------------------- 1 | import React, {Component} from 'react' 2 | import { 3 | Container, 4 | Grid, 5 | Icon, 6 | Header, 7 | List, 8 | Progress, 9 | Statistic 10 | } from 'semantic-ui-react' 11 | import API from "../../utils/API"; 12 | import openSocket from 'socket.io-client'; 13 | 14 | class WorkshopDetails extends Component { 15 | 16 | state = { 17 | workshopId: 0, 18 | workshopCode: "", 19 | workshopTitle: "", 20 | instuctorName: "", 21 | workshopDay: "", 22 | workshopFrame: "", 23 | workshopSkillLevel: "", 24 | workshopMaxSeat: 0, 25 | totalLead: 0, 26 | totalFollower: 0, 27 | listCheckLead: [], 28 | listCheckFollower: [] 29 | } 30 | 31 | componentDidMount = () => { 32 | const socket = openSocket(); 33 | const id = this.props.match.params.id; 34 | this.getOneWorkshop(id) 35 | const self = this; 36 | socket.on('checkedIn', function (id) { 37 | // alert('Someone Checked In into workshop: ' + id); 38 | self.getOneWorkshop(id) 39 | }); 40 | } 41 | 42 | getOneWorkshop = (id) => { 43 | API 44 | .getOneWorkshop(id) 45 | .then(res => { 46 | console.log(res.data) 47 | 48 | const totalLead = res 49 | .data 50 | .result 51 | .filter(obj => obj.Attendee.dancerType === "L") 52 | .length 53 | const totalFollower = res 54 | .data 55 | .result 56 | .filter(obj => obj.Attendee.dancerType === "F") 57 | .length 58 | 59 | const listCheckLead = res 60 | .data 61 | .result 62 | .filter(obj => obj.Attendee.dancerType === "L" && obj.checkedIn) 63 | .map(obj => obj.Attendee) 64 | 65 | const listCheckFollower = res 66 | .data 67 | .result 68 | .filter(obj => obj.Attendee.dancerType === "F" && obj.checkedIn) 69 | .map(obj => obj.Attendee) 70 | 71 | this.setState({ 72 | workshopId: res.data.workshop.id, 73 | workshopCode: res.data.workshop.code, 74 | workshopTitle: res.data.workshop.title, 75 | workshopDay: res.data.workshop.day, 76 | workshopTimeFrame: res.data.workshop.timeFrame, 77 | workshopSkillLevel: res.data.workshop.skillLevel, 78 | workshopMaxSeat: res.data.workshop.maxSeat, 79 | instuctorName: res.data.workshop.Instructor.coupleName, 80 | totalLead, 81 | totalFollower, 82 | listCheckLead, 83 | listCheckFollower 84 | }) 85 | }) 86 | .catch(err => console.log(err.respose)); 87 | } 88 | 89 | render() { 90 | 91 | return ( 92 |
93 | 94 | 95 |
Workshop Real-Time Check-In Data
96 | 97 | < List.Item className='card'> 98 | 99 | 100 | {this.state.workshopCode}: {this.state.workshopTitle} 101 | 102 | 103 | 104 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | {this.state.listCheckLead.length} 118 | Total Leads 119 | 120 | 121 | {this.state.listCheckFollower.length} 122 | Total Followers 123 | 124 | 125 | 126 | 127 | {this.state.listCheckLead.length + this.state.listCheckFollower.length} 128 | 129 | Check Ins 130 | 131 | 132 | 133 | 134 | {this.state.workshopMaxSeat} 135 | 136 | Capacity 137 | 138 | 139 | 140 | 141 | 142 |
Leads List
143 | 149 | 150 | {this 151 | .state 152 | .listCheckLead 153 | .map(obj => 154 | {obj.firstName + " " + obj.lastName} 155 | )} 156 | 157 |
158 | 159 |
Followers List
160 | 166 | 167 | {this 168 | .state 169 | .listCheckFollower 170 | .map(obj => 171 | {obj.firstName + " " + obj.lastName} 172 | )} 173 | 174 |
175 |
176 |
177 |
178 |
179 | ) 180 | } 181 | } 182 | 183 | export default WorkshopDetails -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@types/geojson@^1.0.0": 6 | version "1.0.6" 7 | resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-1.0.6.tgz#3e02972728c69248c2af08d60a48cbb8680fffdf" 8 | 9 | "@types/node@*": 10 | version "8.0.53" 11 | resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.53.tgz#396b35af826fa66aad472c8cb7b8d5e277f4e6d8" 12 | 13 | abbrev@1: 14 | version "1.1.1" 15 | resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" 16 | 17 | accepts@1.3.3: 18 | version "1.3.3" 19 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.3.tgz#c3ca7434938648c3e0d9c1e328dd68b622c284ca" 20 | dependencies: 21 | mime-types "~2.1.11" 22 | negotiator "0.6.1" 23 | 24 | accepts@~1.3.4: 25 | version "1.3.4" 26 | resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.4.tgz#86246758c7dd6d21a6474ff084a4740ec05eb21f" 27 | dependencies: 28 | mime-types "~2.1.16" 29 | negotiator "0.6.1" 30 | 31 | after@0.8.2: 32 | version "0.8.2" 33 | resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" 34 | 35 | ajv@^4.9.1: 36 | version "4.11.8" 37 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536" 38 | dependencies: 39 | co "^4.6.0" 40 | json-stable-stringify "^1.0.1" 41 | 42 | ansi-align@^2.0.0: 43 | version "2.0.0" 44 | resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" 45 | dependencies: 46 | string-width "^2.0.0" 47 | 48 | ansi-regex@^0.2.0, ansi-regex@^0.2.1: 49 | version "0.2.1" 50 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-0.2.1.tgz#0d8e946967a3d8143f93e24e298525fc1b2235f9" 51 | 52 | ansi-regex@^2.0.0: 53 | version "2.1.1" 54 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" 55 | 56 | ansi-regex@^3.0.0: 57 | version "3.0.0" 58 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" 59 | 60 | ansi-styles@^1.1.0: 61 | version "1.1.0" 62 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.1.0.tgz#eaecbf66cd706882760b2f4691582b8f55d7a7de" 63 | 64 | ansi-styles@^3.1.0: 65 | version "3.2.0" 66 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.0.tgz#c159b8d5be0f9e5a6f346dab94f16ce022161b88" 67 | dependencies: 68 | color-convert "^1.9.0" 69 | 70 | ansicolors@~0.2.1: 71 | version "0.2.1" 72 | resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.2.1.tgz#be089599097b74a5c9c4a84a0cdbcdb62bd87aef" 73 | 74 | anymatch@^1.3.0: 75 | version "1.3.2" 76 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-1.3.2.tgz#553dcb8f91e3c889845dfdba34c77721b90b9d7a" 77 | dependencies: 78 | micromatch "^2.1.5" 79 | normalize-path "^2.0.0" 80 | 81 | aproba@^1.0.3: 82 | version "1.2.0" 83 | resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" 84 | 85 | are-we-there-yet@~1.1.2: 86 | version "1.1.4" 87 | resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz#bb5dca382bb94f05e15194373d16fd3ba1ca110d" 88 | dependencies: 89 | delegates "^1.0.0" 90 | readable-stream "^2.0.6" 91 | 92 | arr-diff@^2.0.0: 93 | version "2.0.0" 94 | resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-2.0.0.tgz#8f3b827f955a8bd669697e4a4256ac3ceae356cf" 95 | dependencies: 96 | arr-flatten "^1.0.1" 97 | 98 | arr-flatten@^1.0.1: 99 | version "1.1.0" 100 | resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" 101 | 102 | array-flatten@1.1.1: 103 | version "1.1.1" 104 | resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" 105 | 106 | array-unique@^0.2.1: 107 | version "0.2.1" 108 | resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" 109 | 110 | arraybuffer.slice@0.0.6: 111 | version "0.0.6" 112 | resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.6.tgz#f33b2159f0532a3f3107a272c0ccfbd1ad2979ca" 113 | 114 | asn1@~0.2.3: 115 | version "0.2.3" 116 | resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86" 117 | 118 | assert-plus@1.0.0, assert-plus@^1.0.0: 119 | version "1.0.0" 120 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" 121 | 122 | assert-plus@^0.2.0: 123 | version "0.2.0" 124 | resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.2.0.tgz#d74e1b87e7affc0db8aadb7021f3fe48101ab234" 125 | 126 | async-each@^1.0.0: 127 | version "1.0.1" 128 | resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d" 129 | 130 | async-limiter@~1.0.0: 131 | version "1.0.0" 132 | resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8" 133 | 134 | asynckit@^0.4.0: 135 | version "0.4.0" 136 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 137 | 138 | aws-sign2@~0.6.0: 139 | version "0.6.0" 140 | resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.6.0.tgz#14342dd38dbcc94d0e5b87d763cd63612c0e794f" 141 | 142 | aws4@^1.2.1: 143 | version "1.6.0" 144 | resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.6.0.tgz#83ef5ca860b2b32e4a0deedee8c771b9db57471e" 145 | 146 | axios@^0.17.1: 147 | version "0.17.1" 148 | resolved "https://registry.yarnpkg.com/axios/-/axios-0.17.1.tgz#2d8e3e5d0bdbd7327f91bc814f5c57660f81824d" 149 | dependencies: 150 | follow-redirects "^1.2.5" 151 | is-buffer "^1.1.5" 152 | 153 | backo2@1.0.2: 154 | version "1.0.2" 155 | resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" 156 | 157 | balanced-match@^1.0.0: 158 | version "1.0.0" 159 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" 160 | 161 | base64-arraybuffer@0.1.5: 162 | version "0.1.5" 163 | resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" 164 | 165 | base64id@1.0.0: 166 | version "1.0.0" 167 | resolved "https://registry.yarnpkg.com/base64id/-/base64id-1.0.0.tgz#47688cb99bb6804f0e06d3e763b1c32e57d8e6b6" 168 | 169 | bcrypt-pbkdf@^1.0.0: 170 | version "1.0.1" 171 | resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz#63bc5dcb61331b92bc05fd528953c33462a06f8d" 172 | dependencies: 173 | tweetnacl "^0.14.3" 174 | 175 | better-assert@~1.0.0: 176 | version "1.0.2" 177 | resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" 178 | dependencies: 179 | callsite "1.0.0" 180 | 181 | binary-extensions@^1.0.0: 182 | version "1.11.0" 183 | resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.11.0.tgz#46aa1751fb6a2f93ee5e689bb1087d4b14c6c205" 184 | 185 | blob@0.0.4: 186 | version "0.0.4" 187 | resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.4.tgz#bcf13052ca54463f30f9fc7e95b9a47630a94921" 188 | 189 | block-stream@*: 190 | version "0.0.9" 191 | resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" 192 | dependencies: 193 | inherits "~2.0.0" 194 | 195 | bluebird@^3.4.6: 196 | version "3.5.1" 197 | resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" 198 | 199 | body-parser@1.18.2: 200 | version "1.18.2" 201 | resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.18.2.tgz#87678a19d84b47d859b83199bd59bce222b10454" 202 | dependencies: 203 | bytes "3.0.0" 204 | content-type "~1.0.4" 205 | debug "2.6.9" 206 | depd "~1.1.1" 207 | http-errors "~1.6.2" 208 | iconv-lite "0.4.19" 209 | on-finished "~2.3.0" 210 | qs "6.5.1" 211 | raw-body "2.3.2" 212 | type-is "~1.6.15" 213 | 214 | boom@2.x.x: 215 | version "2.10.1" 216 | resolved "https://registry.yarnpkg.com/boom/-/boom-2.10.1.tgz#39c8918ceff5799f83f9492a848f625add0c766f" 217 | dependencies: 218 | hoek "2.x.x" 219 | 220 | boxen@^1.2.1: 221 | version "1.3.0" 222 | resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" 223 | dependencies: 224 | ansi-align "^2.0.0" 225 | camelcase "^4.0.0" 226 | chalk "^2.0.1" 227 | cli-boxes "^1.0.0" 228 | string-width "^2.0.0" 229 | term-size "^1.2.0" 230 | widest-line "^2.0.0" 231 | 232 | brace-expansion@^1.1.7: 233 | version "1.1.8" 234 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" 235 | dependencies: 236 | balanced-match "^1.0.0" 237 | concat-map "0.0.1" 238 | 239 | braces@^1.8.2: 240 | version "1.8.5" 241 | resolved "https://registry.yarnpkg.com/braces/-/braces-1.8.5.tgz#ba77962e12dff969d6b76711e914b737857bf6a7" 242 | dependencies: 243 | expand-range "^1.8.1" 244 | preserve "^0.2.0" 245 | repeat-element "^1.1.2" 246 | 247 | bytes@3.0.0: 248 | version "3.0.0" 249 | resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" 250 | 251 | callsite@1.0.0: 252 | version "1.0.0" 253 | resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" 254 | 255 | camelcase@^4.0.0: 256 | version "4.1.0" 257 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" 258 | 259 | capture-stack-trace@^1.0.0: 260 | version "1.0.0" 261 | resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz#4a6fa07399c26bba47f0b2496b4d0fb408c5550d" 262 | 263 | cardinal@1.0.0: 264 | version "1.0.0" 265 | resolved "https://registry.yarnpkg.com/cardinal/-/cardinal-1.0.0.tgz#50e21c1b0aa37729f9377def196b5a9cec932ee9" 266 | dependencies: 267 | ansicolors "~0.2.1" 268 | redeyed "~1.0.0" 269 | 270 | caseless@~0.12.0: 271 | version "0.12.0" 272 | resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" 273 | 274 | chalk@0.5.1: 275 | version "0.5.1" 276 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.5.1.tgz#663b3a648b68b55d04690d49167aa837858f2174" 277 | dependencies: 278 | ansi-styles "^1.1.0" 279 | escape-string-regexp "^1.0.0" 280 | has-ansi "^0.1.0" 281 | strip-ansi "^0.3.0" 282 | supports-color "^0.2.0" 283 | 284 | chalk@^2.0.1: 285 | version "2.3.0" 286 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.3.0.tgz#b5ea48efc9c1793dccc9b4767c93914d3f2d52ba" 287 | dependencies: 288 | ansi-styles "^3.1.0" 289 | escape-string-regexp "^1.0.5" 290 | supports-color "^4.0.0" 291 | 292 | chokidar@^1.7.0: 293 | version "1.7.0" 294 | resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-1.7.0.tgz#798e689778151c8076b4b360e5edd28cda2bb468" 295 | dependencies: 296 | anymatch "^1.3.0" 297 | async-each "^1.0.0" 298 | glob-parent "^2.0.0" 299 | inherits "^2.0.1" 300 | is-binary-path "^1.0.0" 301 | is-glob "^2.0.0" 302 | path-is-absolute "^1.0.0" 303 | readdirp "^2.0.0" 304 | optionalDependencies: 305 | fsevents "^1.0.0" 306 | 307 | cli-boxes@^1.0.0: 308 | version "1.0.0" 309 | resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" 310 | 311 | cls-bluebird@^2.0.1: 312 | version "2.0.1" 313 | resolved "https://registry.yarnpkg.com/cls-bluebird/-/cls-bluebird-2.0.1.tgz#c259a480ae02c0e506134307bb13db30446ee2e7" 314 | dependencies: 315 | is-bluebird "^1.0.2" 316 | shimmer "^1.1.0" 317 | 318 | co@^4.6.0: 319 | version "4.6.0" 320 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 321 | 322 | code-point-at@^1.0.0: 323 | version "1.1.0" 324 | resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" 325 | 326 | color-convert@^1.9.0: 327 | version "1.9.1" 328 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.1.tgz#c1261107aeb2f294ebffec9ed9ecad529a6097ed" 329 | dependencies: 330 | color-name "^1.1.1" 331 | 332 | color-name@^1.1.1: 333 | version "1.1.3" 334 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" 335 | 336 | combined-stream@^1.0.5, combined-stream@~1.0.5: 337 | version "1.0.5" 338 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.5.tgz#938370a57b4a51dea2c77c15d5c5fdf895164009" 339 | dependencies: 340 | delayed-stream "~1.0.0" 341 | 342 | commander@2.6.0: 343 | version "2.6.0" 344 | resolved "https://registry.yarnpkg.com/commander/-/commander-2.6.0.tgz#9df7e52fb2a0cb0fb89058ee80c3104225f37e1d" 345 | 346 | component-bind@1.0.0: 347 | version "1.0.0" 348 | resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" 349 | 350 | component-emitter@1.2.1: 351 | version "1.2.1" 352 | resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" 353 | 354 | component-inherit@0.0.3: 355 | version "0.0.3" 356 | resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" 357 | 358 | concat-map@0.0.1: 359 | version "0.0.1" 360 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 361 | 362 | concurrently@^3.5.0: 363 | version "3.5.1" 364 | resolved "https://registry.yarnpkg.com/concurrently/-/concurrently-3.5.1.tgz#ee8b60018bbe86b02df13e5249453c6ececd2521" 365 | dependencies: 366 | chalk "0.5.1" 367 | commander "2.6.0" 368 | date-fns "^1.23.0" 369 | lodash "^4.5.1" 370 | rx "2.3.24" 371 | spawn-command "^0.0.2-1" 372 | supports-color "^3.2.3" 373 | tree-kill "^1.1.0" 374 | 375 | configstore@^3.0.0: 376 | version "3.1.1" 377 | resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.1.tgz#094ee662ab83fad9917678de114faaea8fcdca90" 378 | dependencies: 379 | dot-prop "^4.1.0" 380 | graceful-fs "^4.1.2" 381 | make-dir "^1.0.0" 382 | unique-string "^1.0.0" 383 | write-file-atomic "^2.0.0" 384 | xdg-basedir "^3.0.0" 385 | 386 | console-control-strings@^1.0.0, console-control-strings@~1.1.0: 387 | version "1.1.0" 388 | resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" 389 | 390 | content-disposition@0.5.2: 391 | version "0.5.2" 392 | resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4" 393 | 394 | content-type@~1.0.4: 395 | version "1.0.4" 396 | resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" 397 | 398 | cookie-signature@1.0.6: 399 | version "1.0.6" 400 | resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" 401 | 402 | cookie@0.3.1: 403 | version "0.3.1" 404 | resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" 405 | 406 | core-util-is@1.0.2, core-util-is@~1.0.0: 407 | version "1.0.2" 408 | resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" 409 | 410 | create-error-class@^3.0.0: 411 | version "3.0.2" 412 | resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" 413 | dependencies: 414 | capture-stack-trace "^1.0.0" 415 | 416 | cross-spawn@^5.0.1: 417 | version "5.1.0" 418 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" 419 | dependencies: 420 | lru-cache "^4.0.1" 421 | shebang-command "^1.2.0" 422 | which "^1.2.9" 423 | 424 | cryptiles@2.x.x: 425 | version "2.0.5" 426 | resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8" 427 | dependencies: 428 | boom "2.x.x" 429 | 430 | crypto-random-string@^1.0.0: 431 | version "1.0.0" 432 | resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" 433 | 434 | dashdash@^1.12.0: 435 | version "1.14.1" 436 | resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" 437 | dependencies: 438 | assert-plus "^1.0.0" 439 | 440 | date-fns@^1.23.0: 441 | version "1.29.0" 442 | resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-1.29.0.tgz#12e609cdcb935127311d04d33334e2960a2a54e6" 443 | 444 | debug@2.6.9, debug@^2.2.0, debug@^2.6.8, debug@^2.6.9, debug@~2.6.4, debug@~2.6.6, debug@~2.6.9: 445 | version "2.6.9" 446 | resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" 447 | dependencies: 448 | ms "2.0.0" 449 | 450 | debug@^3.0.0, debug@^3.1.0: 451 | version "3.1.0" 452 | resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" 453 | dependencies: 454 | ms "2.0.0" 455 | 456 | deep-extend@~0.4.0: 457 | version "0.4.2" 458 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.4.2.tgz#48b699c27e334bf89f10892be432f6e4c7d34a7f" 459 | 460 | delayed-stream@~1.0.0: 461 | version "1.0.0" 462 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 463 | 464 | delegates@^1.0.0: 465 | version "1.0.0" 466 | resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" 467 | 468 | denque@^1.1.1: 469 | version "1.2.2" 470 | resolved "https://registry.yarnpkg.com/denque/-/denque-1.2.2.tgz#e06cf7cf0da8badc88cbdaabf8fc0a70d659f1d4" 471 | 472 | depd@1.1.1, depd@^1.1.0, depd@~1.1.1: 473 | version "1.1.1" 474 | resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.1.tgz#5783b4e1c459f06fa5ca27f991f3d06e7a310359" 475 | 476 | destroy@~1.0.4: 477 | version "1.0.4" 478 | resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" 479 | 480 | detect-libc@^1.0.2: 481 | version "1.0.3" 482 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" 483 | 484 | dot-prop@^4.1.0: 485 | version "4.2.0" 486 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.0.tgz#1f19e0c2e1aa0e32797c49799f2837ac6af69c57" 487 | dependencies: 488 | is-obj "^1.0.0" 489 | 490 | dottie@^2.0.0: 491 | version "2.0.0" 492 | resolved "https://registry.yarnpkg.com/dottie/-/dottie-2.0.0.tgz#da191981c8b8d713ca0115d5898cf397c2f0ddd0" 493 | 494 | duplexer3@^0.1.4: 495 | version "0.1.4" 496 | resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" 497 | 498 | duplexer@~0.1.1: 499 | version "0.1.1" 500 | resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.1.tgz#ace6ff808c1ce66b57d1ebf97977acb02334cfc1" 501 | 502 | ecc-jsbn@~0.1.1: 503 | version "0.1.1" 504 | resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505" 505 | dependencies: 506 | jsbn "~0.1.0" 507 | 508 | ee-first@1.1.1: 509 | version "1.1.1" 510 | resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" 511 | 512 | encodeurl@~1.0.1: 513 | version "1.0.1" 514 | resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.1.tgz#79e3d58655346909fe6f0f45a5de68103b294d20" 515 | 516 | engine.io-client@~3.1.0: 517 | version "3.1.4" 518 | resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.1.4.tgz#4fcf1370b47163bd2ce9be2733972430350d4ea1" 519 | dependencies: 520 | component-emitter "1.2.1" 521 | component-inherit "0.0.3" 522 | debug "~2.6.9" 523 | engine.io-parser "~2.1.1" 524 | has-cors "1.1.0" 525 | indexof "0.0.1" 526 | parseqs "0.0.5" 527 | parseuri "0.0.5" 528 | ws "~3.3.1" 529 | xmlhttprequest-ssl "~1.5.4" 530 | yeast "0.1.2" 531 | 532 | engine.io-parser@~2.1.0, engine.io-parser@~2.1.1: 533 | version "2.1.1" 534 | resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.1.1.tgz#e0fb3f0e0462f7f58bb77c1a52e9f5a7e26e4668" 535 | dependencies: 536 | after "0.8.2" 537 | arraybuffer.slice "0.0.6" 538 | base64-arraybuffer "0.1.5" 539 | blob "0.0.4" 540 | has-binary2 "~1.0.2" 541 | 542 | engine.io@~3.1.0: 543 | version "3.1.4" 544 | resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.1.4.tgz#3d0211b70a552ce841ffc7da8627b301a9a4162e" 545 | dependencies: 546 | accepts "1.3.3" 547 | base64id "1.0.0" 548 | cookie "0.3.1" 549 | debug "~2.6.9" 550 | engine.io-parser "~2.1.0" 551 | ws "~3.3.1" 552 | optionalDependencies: 553 | uws "~0.14.4" 554 | 555 | es6-promise@^3.3.1: 556 | version "3.3.1" 557 | resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.3.1.tgz#a08cdde84ccdbf34d027a1451bc91d4bcd28a613" 558 | 559 | escape-html@~1.0.3: 560 | version "1.0.3" 561 | resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" 562 | 563 | escape-string-regexp@^1.0.0, escape-string-regexp@^1.0.5: 564 | version "1.0.5" 565 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" 566 | 567 | esprima@~3.0.0: 568 | version "3.0.0" 569 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.0.0.tgz#53cf247acda77313e551c3aa2e73342d3fb4f7d9" 570 | 571 | etag@~1.8.1: 572 | version "1.8.1" 573 | resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" 574 | 575 | event-stream@~3.3.0: 576 | version "3.3.4" 577 | resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" 578 | dependencies: 579 | duplexer "~0.1.1" 580 | from "~0" 581 | map-stream "~0.1.0" 582 | pause-stream "0.0.11" 583 | split "0.3" 584 | stream-combiner "~0.0.4" 585 | through "~2.3.1" 586 | 587 | execa@^0.7.0: 588 | version "0.7.0" 589 | resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" 590 | dependencies: 591 | cross-spawn "^5.0.1" 592 | get-stream "^3.0.0" 593 | is-stream "^1.1.0" 594 | npm-run-path "^2.0.0" 595 | p-finally "^1.0.0" 596 | signal-exit "^3.0.0" 597 | strip-eof "^1.0.0" 598 | 599 | expand-brackets@^0.1.4: 600 | version "0.1.5" 601 | resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" 602 | dependencies: 603 | is-posix-bracket "^0.1.0" 604 | 605 | expand-range@^1.8.1: 606 | version "1.8.2" 607 | resolved "https://registry.yarnpkg.com/expand-range/-/expand-range-1.8.2.tgz#a299effd335fe2721ebae8e257ec79644fc85337" 608 | dependencies: 609 | fill-range "^2.1.0" 610 | 611 | express@^4.15.4: 612 | version "4.16.2" 613 | resolved "https://registry.yarnpkg.com/express/-/express-4.16.2.tgz#e35c6dfe2d64b7dca0a5cd4f21781be3299e076c" 614 | dependencies: 615 | accepts "~1.3.4" 616 | array-flatten "1.1.1" 617 | body-parser "1.18.2" 618 | content-disposition "0.5.2" 619 | content-type "~1.0.4" 620 | cookie "0.3.1" 621 | cookie-signature "1.0.6" 622 | debug "2.6.9" 623 | depd "~1.1.1" 624 | encodeurl "~1.0.1" 625 | escape-html "~1.0.3" 626 | etag "~1.8.1" 627 | finalhandler "1.1.0" 628 | fresh "0.5.2" 629 | merge-descriptors "1.0.1" 630 | methods "~1.1.2" 631 | on-finished "~2.3.0" 632 | parseurl "~1.3.2" 633 | path-to-regexp "0.1.7" 634 | proxy-addr "~2.0.2" 635 | qs "6.5.1" 636 | range-parser "~1.2.0" 637 | safe-buffer "5.1.1" 638 | send "0.16.1" 639 | serve-static "1.13.1" 640 | setprototypeof "1.1.0" 641 | statuses "~1.3.1" 642 | type-is "~1.6.15" 643 | utils-merge "1.0.1" 644 | vary "~1.1.2" 645 | 646 | extend@~3.0.0: 647 | version "3.0.1" 648 | resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444" 649 | 650 | extglob@^0.3.1: 651 | version "0.3.2" 652 | resolved "https://registry.yarnpkg.com/extglob/-/extglob-0.3.2.tgz#2e18ff3d2f49ab2765cec9023f011daa8d8349a1" 653 | dependencies: 654 | is-extglob "^1.0.0" 655 | 656 | extsprintf@1.3.0: 657 | version "1.3.0" 658 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" 659 | 660 | extsprintf@^1.2.0: 661 | version "1.4.0" 662 | resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" 663 | 664 | filename-regex@^2.0.0: 665 | version "2.0.1" 666 | resolved "https://registry.yarnpkg.com/filename-regex/-/filename-regex-2.0.1.tgz#c1c4b9bee3e09725ddb106b75c1e301fe2f18b26" 667 | 668 | fill-range@^2.1.0: 669 | version "2.2.3" 670 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-2.2.3.tgz#50b77dfd7e469bc7492470963699fe7a8485a723" 671 | dependencies: 672 | is-number "^2.1.0" 673 | isobject "^2.0.0" 674 | randomatic "^1.1.3" 675 | repeat-element "^1.1.2" 676 | repeat-string "^1.5.2" 677 | 678 | finalhandler@1.1.0: 679 | version "1.1.0" 680 | resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.0.tgz#ce0b6855b45853e791b2fcc680046d88253dd7f5" 681 | dependencies: 682 | debug "2.6.9" 683 | encodeurl "~1.0.1" 684 | escape-html "~1.0.3" 685 | on-finished "~2.3.0" 686 | parseurl "~1.3.2" 687 | statuses "~1.3.1" 688 | unpipe "~1.0.0" 689 | 690 | follow-redirects@^1.2.5: 691 | version "1.2.6" 692 | resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.2.6.tgz#4dcdc7e4ab3dd6765a97ff89c3b4c258117c79bf" 693 | dependencies: 694 | debug "^3.1.0" 695 | 696 | for-in@^1.0.1: 697 | version "1.0.2" 698 | resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" 699 | 700 | for-own@^0.1.4: 701 | version "0.1.5" 702 | resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" 703 | dependencies: 704 | for-in "^1.0.1" 705 | 706 | forever-agent@~0.6.1: 707 | version "0.6.1" 708 | resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" 709 | 710 | form-data@~2.1.1: 711 | version "2.1.4" 712 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.1.4.tgz#33c183acf193276ecaa98143a69e94bfee1750d1" 713 | dependencies: 714 | asynckit "^0.4.0" 715 | combined-stream "^1.0.5" 716 | mime-types "^2.1.12" 717 | 718 | forwarded@~0.1.2: 719 | version "0.1.2" 720 | resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" 721 | 722 | fresh@0.5.2: 723 | version "0.5.2" 724 | resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" 725 | 726 | from@~0: 727 | version "0.1.7" 728 | resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" 729 | 730 | fs.realpath@^1.0.0: 731 | version "1.0.0" 732 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 733 | 734 | fsevents@^1.0.0: 735 | version "1.1.3" 736 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.1.3.tgz#11f82318f5fe7bb2cd22965a108e9306208216d8" 737 | dependencies: 738 | nan "^2.3.0" 739 | node-pre-gyp "^0.6.39" 740 | 741 | fstream-ignore@^1.0.5: 742 | version "1.0.5" 743 | resolved "https://registry.yarnpkg.com/fstream-ignore/-/fstream-ignore-1.0.5.tgz#9c31dae34767018fe1d249b24dada67d092da105" 744 | dependencies: 745 | fstream "^1.0.0" 746 | inherits "2" 747 | minimatch "^3.0.0" 748 | 749 | fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2: 750 | version "1.0.11" 751 | resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" 752 | dependencies: 753 | graceful-fs "^4.1.2" 754 | inherits "~2.0.0" 755 | mkdirp ">=0.5 0" 756 | rimraf "2" 757 | 758 | gauge@~2.7.3: 759 | version "2.7.4" 760 | resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" 761 | dependencies: 762 | aproba "^1.0.3" 763 | console-control-strings "^1.0.0" 764 | has-unicode "^2.0.0" 765 | object-assign "^4.1.0" 766 | signal-exit "^3.0.0" 767 | string-width "^1.0.1" 768 | strip-ansi "^3.0.1" 769 | wide-align "^1.1.0" 770 | 771 | generate-function@^2.0.0: 772 | version "2.0.0" 773 | resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" 774 | 775 | generic-pool@^3.1.8: 776 | version "3.2.0" 777 | resolved "https://registry.yarnpkg.com/generic-pool/-/generic-pool-3.2.0.tgz#c1d485ecbd6f18c0513d4741d098a6715eaeeca8" 778 | 779 | get-stream@^3.0.0: 780 | version "3.0.0" 781 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" 782 | 783 | getpass@^0.1.1: 784 | version "0.1.7" 785 | resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" 786 | dependencies: 787 | assert-plus "^1.0.0" 788 | 789 | glob-base@^0.3.0: 790 | version "0.3.0" 791 | resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" 792 | dependencies: 793 | glob-parent "^2.0.0" 794 | is-glob "^2.0.0" 795 | 796 | glob-parent@^2.0.0: 797 | version "2.0.0" 798 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-2.0.0.tgz#81383d72db054fcccf5336daa902f182f6edbb28" 799 | dependencies: 800 | is-glob "^2.0.0" 801 | 802 | glob@^7.0.5: 803 | version "7.1.2" 804 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15" 805 | dependencies: 806 | fs.realpath "^1.0.0" 807 | inflight "^1.0.4" 808 | inherits "2" 809 | minimatch "^3.0.4" 810 | once "^1.3.0" 811 | path-is-absolute "^1.0.0" 812 | 813 | global-dirs@^0.1.0: 814 | version "0.1.1" 815 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" 816 | dependencies: 817 | ini "^1.3.4" 818 | 819 | got@^6.7.1: 820 | version "6.7.1" 821 | resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" 822 | dependencies: 823 | create-error-class "^3.0.0" 824 | duplexer3 "^0.1.4" 825 | get-stream "^3.0.0" 826 | is-redirect "^1.0.0" 827 | is-retry-allowed "^1.0.0" 828 | is-stream "^1.0.0" 829 | lowercase-keys "^1.0.0" 830 | safe-buffer "^5.0.1" 831 | timed-out "^4.0.0" 832 | unzip-response "^2.0.1" 833 | url-parse-lax "^1.0.0" 834 | 835 | graceful-fs@^4.1.11, graceful-fs@^4.1.2: 836 | version "4.1.11" 837 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" 838 | 839 | har-schema@^1.0.5: 840 | version "1.0.5" 841 | resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-1.0.5.tgz#d263135f43307c02c602afc8fe95970c0151369e" 842 | 843 | har-validator@~4.2.1: 844 | version "4.2.1" 845 | resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-4.2.1.tgz#33481d0f1bbff600dd203d75812a6a5fba002e2a" 846 | dependencies: 847 | ajv "^4.9.1" 848 | har-schema "^1.0.5" 849 | 850 | has-ansi@^0.1.0: 851 | version "0.1.0" 852 | resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-0.1.0.tgz#84f265aae8c0e6a88a12d7022894b7568894c62e" 853 | dependencies: 854 | ansi-regex "^0.2.0" 855 | 856 | has-binary2@~1.0.2: 857 | version "1.0.2" 858 | resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.2.tgz#e83dba49f0b9be4d026d27365350d9f03f54be98" 859 | dependencies: 860 | isarray "2.0.1" 861 | 862 | has-cors@1.1.0: 863 | version "1.1.0" 864 | resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" 865 | 866 | has-flag@^1.0.0: 867 | version "1.0.0" 868 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" 869 | 870 | has-flag@^2.0.0: 871 | version "2.0.0" 872 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-2.0.0.tgz#e8207af1cc7b30d446cc70b734b5e8be18f88d51" 873 | 874 | has-unicode@^2.0.0: 875 | version "2.0.1" 876 | resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" 877 | 878 | hawk@3.1.3, hawk@~3.1.3: 879 | version "3.1.3" 880 | resolved "https://registry.yarnpkg.com/hawk/-/hawk-3.1.3.tgz#078444bd7c1640b0fe540d2c9b73d59678e8e1c4" 881 | dependencies: 882 | boom "2.x.x" 883 | cryptiles "2.x.x" 884 | hoek "2.x.x" 885 | sntp "1.x.x" 886 | 887 | hoek@2.x.x: 888 | version "2.16.3" 889 | resolved "https://registry.yarnpkg.com/hoek/-/hoek-2.16.3.tgz#20bb7403d3cea398e91dc4710a8ff1b8274a25ed" 890 | 891 | http-errors@1.6.2, http-errors@~1.6.2: 892 | version "1.6.2" 893 | resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.6.2.tgz#0a002cc85707192a7e7946ceedc11155f60ec736" 894 | dependencies: 895 | depd "1.1.1" 896 | inherits "2.0.3" 897 | setprototypeof "1.0.3" 898 | statuses ">= 1.3.1 < 2" 899 | 900 | http-signature@~1.1.0: 901 | version "1.1.1" 902 | resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.1.1.tgz#df72e267066cd0ac67fb76adf8e134a8fbcf91bf" 903 | dependencies: 904 | assert-plus "^0.2.0" 905 | jsprim "^1.2.2" 906 | sshpk "^1.7.0" 907 | 908 | iconv-lite@0.4.19, iconv-lite@^0.4.18: 909 | version "0.4.19" 910 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.19.tgz#f7468f60135f5e5dad3399c0a81be9a1603a082b" 911 | 912 | ignore-by-default@^1.0.1: 913 | version "1.0.1" 914 | resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" 915 | 916 | import-lazy@^2.1.0: 917 | version "2.1.0" 918 | resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" 919 | 920 | imurmurhash@^0.1.4: 921 | version "0.1.4" 922 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 923 | 924 | indexof@0.0.1: 925 | version "0.0.1" 926 | resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" 927 | 928 | inflection@1.12.0: 929 | version "1.12.0" 930 | resolved "https://registry.yarnpkg.com/inflection/-/inflection-1.12.0.tgz#a200935656d6f5f6bc4dc7502e1aecb703228416" 931 | 932 | inflight@^1.0.4: 933 | version "1.0.6" 934 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 935 | dependencies: 936 | once "^1.3.0" 937 | wrappy "1" 938 | 939 | inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@~2.0.0, inherits@~2.0.3: 940 | version "2.0.3" 941 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" 942 | 943 | ini@^1.3.4, ini@~1.3.0: 944 | version "1.3.5" 945 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" 946 | 947 | ipaddr.js@1.5.2: 948 | version "1.5.2" 949 | resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.5.2.tgz#d4b505bde9946987ccf0fc58d9010ff9607e3fa0" 950 | 951 | is-binary-path@^1.0.0: 952 | version "1.0.1" 953 | resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" 954 | dependencies: 955 | binary-extensions "^1.0.0" 956 | 957 | is-bluebird@^1.0.2: 958 | version "1.0.2" 959 | resolved "https://registry.yarnpkg.com/is-bluebird/-/is-bluebird-1.0.2.tgz#096439060f4aa411abee19143a84d6a55346d6e2" 960 | 961 | is-buffer@^1.1.5: 962 | version "1.1.6" 963 | resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" 964 | 965 | is-dotfile@^1.0.0: 966 | version "1.0.3" 967 | resolved "https://registry.yarnpkg.com/is-dotfile/-/is-dotfile-1.0.3.tgz#a6a2f32ffd2dfb04f5ca25ecd0f6b83cf798a1e1" 968 | 969 | is-equal-shallow@^0.1.3: 970 | version "0.1.3" 971 | resolved "https://registry.yarnpkg.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz#2238098fc221de0bcfa5d9eac4c45d638aa1c534" 972 | dependencies: 973 | is-primitive "^2.0.0" 974 | 975 | is-extendable@^0.1.1: 976 | version "0.1.1" 977 | resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" 978 | 979 | is-extglob@^1.0.0: 980 | version "1.0.0" 981 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-1.0.0.tgz#ac468177c4943405a092fc8f29760c6ffc6206c0" 982 | 983 | is-fullwidth-code-point@^1.0.0: 984 | version "1.0.0" 985 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" 986 | dependencies: 987 | number-is-nan "^1.0.0" 988 | 989 | is-fullwidth-code-point@^2.0.0: 990 | version "2.0.0" 991 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" 992 | 993 | is-glob@^2.0.0, is-glob@^2.0.1: 994 | version "2.0.1" 995 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-2.0.1.tgz#d096f926a3ded5600f3fdfd91198cb0888c2d863" 996 | dependencies: 997 | is-extglob "^1.0.0" 998 | 999 | is-installed-globally@^0.1.0: 1000 | version "0.1.0" 1001 | resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" 1002 | dependencies: 1003 | global-dirs "^0.1.0" 1004 | is-path-inside "^1.0.0" 1005 | 1006 | is-npm@^1.0.0: 1007 | version "1.0.0" 1008 | resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" 1009 | 1010 | is-number@^2.1.0: 1011 | version "2.1.0" 1012 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" 1013 | dependencies: 1014 | kind-of "^3.0.2" 1015 | 1016 | is-number@^3.0.0: 1017 | version "3.0.0" 1018 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" 1019 | dependencies: 1020 | kind-of "^3.0.2" 1021 | 1022 | is-obj@^1.0.0: 1023 | version "1.0.1" 1024 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" 1025 | 1026 | is-path-inside@^1.0.0: 1027 | version "1.0.1" 1028 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" 1029 | dependencies: 1030 | path-is-inside "^1.0.1" 1031 | 1032 | is-posix-bracket@^0.1.0: 1033 | version "0.1.1" 1034 | resolved "https://registry.yarnpkg.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz#3334dc79774368e92f016e6fbc0a88f5cd6e6bc4" 1035 | 1036 | is-primitive@^2.0.0: 1037 | version "2.0.0" 1038 | resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" 1039 | 1040 | is-redirect@^1.0.0: 1041 | version "1.0.0" 1042 | resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" 1043 | 1044 | is-retry-allowed@^1.0.0: 1045 | version "1.1.0" 1046 | resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" 1047 | 1048 | is-stream@^1.0.0, is-stream@^1.1.0: 1049 | version "1.1.0" 1050 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" 1051 | 1052 | is-typedarray@~1.0.0: 1053 | version "1.0.0" 1054 | resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" 1055 | 1056 | isarray@1.0.0, isarray@~1.0.0: 1057 | version "1.0.0" 1058 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" 1059 | 1060 | isarray@2.0.1: 1061 | version "2.0.1" 1062 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" 1063 | 1064 | isexe@^2.0.0: 1065 | version "2.0.0" 1066 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1067 | 1068 | isobject@^2.0.0: 1069 | version "2.1.0" 1070 | resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" 1071 | dependencies: 1072 | isarray "1.0.0" 1073 | 1074 | isstream@~0.1.2: 1075 | version "0.1.2" 1076 | resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" 1077 | 1078 | jsbn@~0.1.0: 1079 | version "0.1.1" 1080 | resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" 1081 | 1082 | json-schema@0.2.3: 1083 | version "0.2.3" 1084 | resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" 1085 | 1086 | json-stable-stringify@^1.0.1: 1087 | version "1.0.1" 1088 | resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" 1089 | dependencies: 1090 | jsonify "~0.0.0" 1091 | 1092 | json-stringify-safe@~5.0.1: 1093 | version "5.0.1" 1094 | resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" 1095 | 1096 | jsonify@~0.0.0: 1097 | version "0.0.0" 1098 | resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" 1099 | 1100 | jsprim@^1.2.2: 1101 | version "1.4.1" 1102 | resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" 1103 | dependencies: 1104 | assert-plus "1.0.0" 1105 | extsprintf "1.3.0" 1106 | json-schema "0.2.3" 1107 | verror "1.10.0" 1108 | 1109 | kind-of@^3.0.2: 1110 | version "3.2.2" 1111 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" 1112 | dependencies: 1113 | is-buffer "^1.1.5" 1114 | 1115 | kind-of@^4.0.0: 1116 | version "4.0.0" 1117 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" 1118 | dependencies: 1119 | is-buffer "^1.1.5" 1120 | 1121 | latest-version@^3.0.0: 1122 | version "3.1.0" 1123 | resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" 1124 | dependencies: 1125 | package-json "^4.0.0" 1126 | 1127 | lodash._baseassign@^3.0.0: 1128 | version "3.2.0" 1129 | resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" 1130 | dependencies: 1131 | lodash._basecopy "^3.0.0" 1132 | lodash.keys "^3.0.0" 1133 | 1134 | lodash._basecopy@^3.0.0: 1135 | version "3.0.1" 1136 | resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" 1137 | 1138 | lodash._bindcallback@^3.0.0: 1139 | version "3.0.1" 1140 | resolved "https://registry.yarnpkg.com/lodash._bindcallback/-/lodash._bindcallback-3.0.1.tgz#e531c27644cf8b57a99e17ed95b35c748789392e" 1141 | 1142 | lodash._createassigner@^3.0.0: 1143 | version "3.1.1" 1144 | resolved "https://registry.yarnpkg.com/lodash._createassigner/-/lodash._createassigner-3.1.1.tgz#838a5bae2fdaca63ac22dee8e19fa4e6d6970b11" 1145 | dependencies: 1146 | lodash._bindcallback "^3.0.0" 1147 | lodash._isiterateecall "^3.0.0" 1148 | lodash.restparam "^3.0.0" 1149 | 1150 | lodash._getnative@^3.0.0: 1151 | version "3.9.1" 1152 | resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" 1153 | 1154 | lodash._isiterateecall@^3.0.0: 1155 | version "3.0.9" 1156 | resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" 1157 | 1158 | lodash.assign@^3.0.0: 1159 | version "3.2.0" 1160 | resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-3.2.0.tgz#3ce9f0234b4b2223e296b8fa0ac1fee8ebca64fa" 1161 | dependencies: 1162 | lodash._baseassign "^3.0.0" 1163 | lodash._createassigner "^3.0.0" 1164 | lodash.keys "^3.0.0" 1165 | 1166 | lodash.defaults@^3.1.2: 1167 | version "3.1.2" 1168 | resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-3.1.2.tgz#c7308b18dbf8bc9372d701a73493c61192bd2e2c" 1169 | dependencies: 1170 | lodash.assign "^3.0.0" 1171 | lodash.restparam "^3.0.0" 1172 | 1173 | lodash.isarguments@^3.0.0: 1174 | version "3.1.0" 1175 | resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" 1176 | 1177 | lodash.isarray@^3.0.0: 1178 | version "3.0.4" 1179 | resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" 1180 | 1181 | lodash.keys@^3.0.0: 1182 | version "3.1.2" 1183 | resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" 1184 | dependencies: 1185 | lodash._getnative "^3.0.0" 1186 | lodash.isarguments "^3.0.0" 1187 | lodash.isarray "^3.0.0" 1188 | 1189 | lodash.restparam@^3.0.0: 1190 | version "3.6.1" 1191 | resolved "https://registry.yarnpkg.com/lodash.restparam/-/lodash.restparam-3.6.1.tgz#936a4e309ef330a7645ed4145986c85ae5b20805" 1192 | 1193 | lodash@^4.17.1, lodash@^4.5.1: 1194 | version "4.17.4" 1195 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" 1196 | 1197 | long@^3.2.0: 1198 | version "3.2.0" 1199 | resolved "https://registry.yarnpkg.com/long/-/long-3.2.0.tgz#d821b7138ca1cb581c172990ef14db200b5c474b" 1200 | 1201 | lowercase-keys@^1.0.0: 1202 | version "1.0.0" 1203 | resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.0.tgz#4e3366b39e7f5457e35f1324bdf6f88d0bfc7306" 1204 | 1205 | lru-cache@2.5.0: 1206 | version "2.5.0" 1207 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-2.5.0.tgz#d82388ae9c960becbea0c73bb9eb79b6c6ce9aeb" 1208 | 1209 | lru-cache@^4.0.1, lru-cache@^4.1.1: 1210 | version "4.1.1" 1211 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.1.tgz#622e32e82488b49279114a4f9ecf45e7cd6bba55" 1212 | dependencies: 1213 | pseudomap "^1.0.2" 1214 | yallist "^2.1.2" 1215 | 1216 | make-dir@^1.0.0: 1217 | version "1.1.0" 1218 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.1.0.tgz#19b4369fe48c116f53c2af95ad102c0e39e85d51" 1219 | dependencies: 1220 | pify "^3.0.0" 1221 | 1222 | map-stream@~0.1.0: 1223 | version "0.1.0" 1224 | resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" 1225 | 1226 | media-typer@0.3.0: 1227 | version "0.3.0" 1228 | resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" 1229 | 1230 | merge-descriptors@1.0.1: 1231 | version "1.0.1" 1232 | resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" 1233 | 1234 | methods@~1.1.2: 1235 | version "1.1.2" 1236 | resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" 1237 | 1238 | micromatch@^2.1.5: 1239 | version "2.3.11" 1240 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-2.3.11.tgz#86677c97d1720b363431d04d0d15293bd38c1565" 1241 | dependencies: 1242 | arr-diff "^2.0.0" 1243 | array-unique "^0.2.1" 1244 | braces "^1.8.2" 1245 | expand-brackets "^0.1.4" 1246 | extglob "^0.3.1" 1247 | filename-regex "^2.0.0" 1248 | is-extglob "^1.0.0" 1249 | is-glob "^2.0.1" 1250 | kind-of "^3.0.2" 1251 | normalize-path "^2.0.1" 1252 | object.omit "^2.0.0" 1253 | parse-glob "^3.0.4" 1254 | regex-cache "^0.4.2" 1255 | 1256 | mime-db@~1.30.0: 1257 | version "1.30.0" 1258 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.30.0.tgz#74c643da2dd9d6a45399963465b26d5ca7d71f01" 1259 | 1260 | mime-types@^2.1.12, mime-types@~2.1.11, mime-types@~2.1.15, mime-types@~2.1.16, mime-types@~2.1.7: 1261 | version "2.1.17" 1262 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.17.tgz#09d7a393f03e995a79f8af857b70a9e0ab16557a" 1263 | dependencies: 1264 | mime-db "~1.30.0" 1265 | 1266 | mime@1.4.1: 1267 | version "1.4.1" 1268 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" 1269 | 1270 | minimatch@^3.0.0, minimatch@^3.0.2, minimatch@^3.0.4: 1271 | version "3.0.4" 1272 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" 1273 | dependencies: 1274 | brace-expansion "^1.1.7" 1275 | 1276 | minimist@0.0.8: 1277 | version "0.0.8" 1278 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" 1279 | 1280 | minimist@^1.2.0: 1281 | version "1.2.0" 1282 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" 1283 | 1284 | "mkdirp@>=0.5 0", mkdirp@^0.5.1: 1285 | version "0.5.1" 1286 | resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" 1287 | dependencies: 1288 | minimist "0.0.8" 1289 | 1290 | moment-timezone@^0.5.4: 1291 | version "0.5.14" 1292 | resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.14.tgz#4eb38ff9538b80108ba467a458f3ed4268ccfcb1" 1293 | dependencies: 1294 | moment ">= 2.9.0" 1295 | 1296 | "moment@>= 2.9.0", moment@^2.13.0: 1297 | version "2.19.3" 1298 | resolved "https://registry.yarnpkg.com/moment/-/moment-2.19.3.tgz#bdb99d270d6d7fda78cc0fbace855e27fe7da69f" 1299 | 1300 | ms@2.0.0: 1301 | version "2.0.0" 1302 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" 1303 | 1304 | mysql2@^1.5.1: 1305 | version "1.5.1" 1306 | resolved "https://registry.yarnpkg.com/mysql2/-/mysql2-1.5.1.tgz#2411d6fb958af86b2304b7a53bc54b26e77e682b" 1307 | dependencies: 1308 | cardinal "1.0.0" 1309 | denque "^1.1.1" 1310 | generate-function "^2.0.0" 1311 | iconv-lite "^0.4.18" 1312 | long "^3.2.0" 1313 | lru-cache "^4.1.1" 1314 | named-placeholders "1.1.1" 1315 | object-assign "^4.1.1" 1316 | readable-stream "2.3.2" 1317 | safe-buffer "^5.0.1" 1318 | seq-queue "0.0.5" 1319 | sqlstring "^2.2.0" 1320 | 1321 | named-placeholders@1.1.1: 1322 | version "1.1.1" 1323 | resolved "https://registry.yarnpkg.com/named-placeholders/-/named-placeholders-1.1.1.tgz#3b7a0d26203dd74b3a9df4c9cfb827b2fb907e64" 1324 | dependencies: 1325 | lru-cache "2.5.0" 1326 | 1327 | nan@^2.3.0: 1328 | version "2.8.0" 1329 | resolved "https://registry.yarnpkg.com/nan/-/nan-2.8.0.tgz#ed715f3fe9de02b57a5e6252d90a96675e1f085a" 1330 | 1331 | negotiator@0.6.1: 1332 | version "0.6.1" 1333 | resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9" 1334 | 1335 | node-pre-gyp@^0.6.39: 1336 | version "0.6.39" 1337 | resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz#c00e96860b23c0e1420ac7befc5044e1d78d8649" 1338 | dependencies: 1339 | detect-libc "^1.0.2" 1340 | hawk "3.1.3" 1341 | mkdirp "^0.5.1" 1342 | nopt "^4.0.1" 1343 | npmlog "^4.0.2" 1344 | rc "^1.1.7" 1345 | request "2.81.0" 1346 | rimraf "^2.6.1" 1347 | semver "^5.3.0" 1348 | tar "^2.2.1" 1349 | tar-pack "^3.4.0" 1350 | 1351 | nodemon@^1.11.0: 1352 | version "1.12.1" 1353 | resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.12.1.tgz#996a56dc49d9f16bbf1b78a4de08f13634b3878d" 1354 | dependencies: 1355 | chokidar "^1.7.0" 1356 | debug "^2.6.8" 1357 | es6-promise "^3.3.1" 1358 | ignore-by-default "^1.0.1" 1359 | lodash.defaults "^3.1.2" 1360 | minimatch "^3.0.4" 1361 | ps-tree "^1.1.0" 1362 | touch "^3.1.0" 1363 | undefsafe "0.0.3" 1364 | update-notifier "^2.2.0" 1365 | 1366 | nopt@^4.0.1: 1367 | version "4.0.1" 1368 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" 1369 | dependencies: 1370 | abbrev "1" 1371 | osenv "^0.1.4" 1372 | 1373 | nopt@~1.0.10: 1374 | version "1.0.10" 1375 | resolved "https://registry.yarnpkg.com/nopt/-/nopt-1.0.10.tgz#6ddd21bd2a31417b92727dd585f8a6f37608ebee" 1376 | dependencies: 1377 | abbrev "1" 1378 | 1379 | normalize-path@^2.0.0, normalize-path@^2.0.1: 1380 | version "2.1.1" 1381 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" 1382 | dependencies: 1383 | remove-trailing-separator "^1.0.1" 1384 | 1385 | npm-run-path@^2.0.0: 1386 | version "2.0.2" 1387 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" 1388 | dependencies: 1389 | path-key "^2.0.0" 1390 | 1391 | npmlog@^4.0.2: 1392 | version "4.1.2" 1393 | resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" 1394 | dependencies: 1395 | are-we-there-yet "~1.1.2" 1396 | console-control-strings "~1.1.0" 1397 | gauge "~2.7.3" 1398 | set-blocking "~2.0.0" 1399 | 1400 | number-is-nan@^1.0.0: 1401 | version "1.0.1" 1402 | resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" 1403 | 1404 | oauth-sign@~0.8.1: 1405 | version "0.8.2" 1406 | resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" 1407 | 1408 | object-assign@^4.1.0, object-assign@^4.1.1: 1409 | version "4.1.1" 1410 | resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" 1411 | 1412 | object-component@0.0.3: 1413 | version "0.0.3" 1414 | resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" 1415 | 1416 | object.omit@^2.0.0: 1417 | version "2.0.1" 1418 | resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" 1419 | dependencies: 1420 | for-own "^0.1.4" 1421 | is-extendable "^0.1.1" 1422 | 1423 | on-finished@~2.3.0: 1424 | version "2.3.0" 1425 | resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" 1426 | dependencies: 1427 | ee-first "1.1.1" 1428 | 1429 | once@^1.3.0, once@^1.3.3: 1430 | version "1.4.0" 1431 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 1432 | dependencies: 1433 | wrappy "1" 1434 | 1435 | os-homedir@^1.0.0: 1436 | version "1.0.2" 1437 | resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" 1438 | 1439 | os-tmpdir@^1.0.0: 1440 | version "1.0.2" 1441 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" 1442 | 1443 | osenv@^0.1.4: 1444 | version "0.1.4" 1445 | resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.4.tgz#42fe6d5953df06c8064be6f176c3d05aaaa34644" 1446 | dependencies: 1447 | os-homedir "^1.0.0" 1448 | os-tmpdir "^1.0.0" 1449 | 1450 | p-finally@^1.0.0: 1451 | version "1.0.0" 1452 | resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" 1453 | 1454 | package-json@^4.0.0: 1455 | version "4.0.1" 1456 | resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" 1457 | dependencies: 1458 | got "^6.7.1" 1459 | registry-auth-token "^3.0.1" 1460 | registry-url "^3.0.3" 1461 | semver "^5.1.0" 1462 | 1463 | parse-glob@^3.0.4: 1464 | version "3.0.4" 1465 | resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" 1466 | dependencies: 1467 | glob-base "^0.3.0" 1468 | is-dotfile "^1.0.0" 1469 | is-extglob "^1.0.0" 1470 | is-glob "^2.0.0" 1471 | 1472 | parseqs@0.0.5: 1473 | version "0.0.5" 1474 | resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" 1475 | dependencies: 1476 | better-assert "~1.0.0" 1477 | 1478 | parseuri@0.0.5: 1479 | version "0.0.5" 1480 | resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" 1481 | dependencies: 1482 | better-assert "~1.0.0" 1483 | 1484 | parseurl@~1.3.2: 1485 | version "1.3.2" 1486 | resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" 1487 | 1488 | path-is-absolute@^1.0.0: 1489 | version "1.0.1" 1490 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 1491 | 1492 | path-is-inside@^1.0.1: 1493 | version "1.0.2" 1494 | resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" 1495 | 1496 | path-key@^2.0.0: 1497 | version "2.0.1" 1498 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" 1499 | 1500 | path-to-regexp@0.1.7: 1501 | version "0.1.7" 1502 | resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" 1503 | 1504 | pause-stream@0.0.11: 1505 | version "0.0.11" 1506 | resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" 1507 | dependencies: 1508 | through "~2.3" 1509 | 1510 | performance-now@^0.2.0: 1511 | version "0.2.0" 1512 | resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-0.2.0.tgz#33ef30c5c77d4ea21c5a53869d91b56d8f2555e5" 1513 | 1514 | pify@^3.0.0: 1515 | version "3.0.0" 1516 | resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" 1517 | 1518 | prepend-http@^1.0.1: 1519 | version "1.0.4" 1520 | resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" 1521 | 1522 | preserve@^0.2.0: 1523 | version "0.2.0" 1524 | resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" 1525 | 1526 | process-nextick-args@~1.0.6: 1527 | version "1.0.7" 1528 | resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" 1529 | 1530 | proxy-addr@~2.0.2: 1531 | version "2.0.2" 1532 | resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.2.tgz#6571504f47bb988ec8180253f85dd7e14952bdec" 1533 | dependencies: 1534 | forwarded "~0.1.2" 1535 | ipaddr.js "1.5.2" 1536 | 1537 | ps-tree@^1.1.0: 1538 | version "1.1.0" 1539 | resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.1.0.tgz#b421b24140d6203f1ed3c76996b4427b08e8c014" 1540 | dependencies: 1541 | event-stream "~3.3.0" 1542 | 1543 | pseudomap@^1.0.2: 1544 | version "1.0.2" 1545 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" 1546 | 1547 | punycode@^1.4.1: 1548 | version "1.4.1" 1549 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" 1550 | 1551 | qs@6.5.1: 1552 | version "6.5.1" 1553 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.1.tgz#349cdf6eef89ec45c12d7d5eb3fc0c870343a6d8" 1554 | 1555 | qs@~6.4.0: 1556 | version "6.4.0" 1557 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233" 1558 | 1559 | randomatic@^1.1.3: 1560 | version "1.1.7" 1561 | resolved "https://registry.yarnpkg.com/randomatic/-/randomatic-1.1.7.tgz#c7abe9cc8b87c0baa876b19fde83fd464797e38c" 1562 | dependencies: 1563 | is-number "^3.0.0" 1564 | kind-of "^4.0.0" 1565 | 1566 | range-parser@~1.2.0: 1567 | version "1.2.0" 1568 | resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.0.tgz#f49be6b487894ddc40dcc94a322f611092e00d5e" 1569 | 1570 | raw-body@2.3.2: 1571 | version "2.3.2" 1572 | resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.3.2.tgz#bcd60c77d3eb93cde0050295c3f379389bc88f89" 1573 | dependencies: 1574 | bytes "3.0.0" 1575 | http-errors "1.6.2" 1576 | iconv-lite "0.4.19" 1577 | unpipe "1.0.0" 1578 | 1579 | rc@^1.0.1, rc@^1.1.6, rc@^1.1.7: 1580 | version "1.2.2" 1581 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.2.tgz#d8ce9cb57e8d64d9c7badd9876c7c34cbe3c7077" 1582 | dependencies: 1583 | deep-extend "~0.4.0" 1584 | ini "~1.3.0" 1585 | minimist "^1.2.0" 1586 | strip-json-comments "~2.0.1" 1587 | 1588 | readable-stream@2.3.2: 1589 | version "2.3.2" 1590 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.2.tgz#5a04df05e4f57fe3f0dc68fdd11dc5c97c7e6f4d" 1591 | dependencies: 1592 | core-util-is "~1.0.0" 1593 | inherits "~2.0.3" 1594 | isarray "~1.0.0" 1595 | process-nextick-args "~1.0.6" 1596 | safe-buffer "~5.1.0" 1597 | string_decoder "~1.0.0" 1598 | util-deprecate "~1.0.1" 1599 | 1600 | readable-stream@^2.0.2, readable-stream@^2.0.6, readable-stream@^2.1.4: 1601 | version "2.3.3" 1602 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.3.tgz#368f2512d79f9d46fdfc71349ae7878bbc1eb95c" 1603 | dependencies: 1604 | core-util-is "~1.0.0" 1605 | inherits "~2.0.3" 1606 | isarray "~1.0.0" 1607 | process-nextick-args "~1.0.6" 1608 | safe-buffer "~5.1.1" 1609 | string_decoder "~1.0.3" 1610 | util-deprecate "~1.0.1" 1611 | 1612 | readdirp@^2.0.0: 1613 | version "2.1.0" 1614 | resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" 1615 | dependencies: 1616 | graceful-fs "^4.1.2" 1617 | minimatch "^3.0.2" 1618 | readable-stream "^2.0.2" 1619 | set-immediate-shim "^1.0.1" 1620 | 1621 | redeyed@~1.0.0: 1622 | version "1.0.1" 1623 | resolved "https://registry.yarnpkg.com/redeyed/-/redeyed-1.0.1.tgz#e96c193b40c0816b00aec842698e61185e55498a" 1624 | dependencies: 1625 | esprima "~3.0.0" 1626 | 1627 | regex-cache@^0.4.2: 1628 | version "0.4.4" 1629 | resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.4.tgz#75bdc58a2a1496cec48a12835bc54c8d562336dd" 1630 | dependencies: 1631 | is-equal-shallow "^0.1.3" 1632 | 1633 | registry-auth-token@^3.0.1: 1634 | version "3.3.1" 1635 | resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.3.1.tgz#fb0d3289ee0d9ada2cbb52af5dfe66cb070d3006" 1636 | dependencies: 1637 | rc "^1.1.6" 1638 | safe-buffer "^5.0.1" 1639 | 1640 | registry-url@^3.0.3: 1641 | version "3.1.0" 1642 | resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" 1643 | dependencies: 1644 | rc "^1.0.1" 1645 | 1646 | remove-trailing-separator@^1.0.1: 1647 | version "1.1.0" 1648 | resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" 1649 | 1650 | repeat-element@^1.1.2: 1651 | version "1.1.2" 1652 | resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" 1653 | 1654 | repeat-string@^1.5.2: 1655 | version "1.6.1" 1656 | resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" 1657 | 1658 | request@2.81.0: 1659 | version "2.81.0" 1660 | resolved "https://registry.yarnpkg.com/request/-/request-2.81.0.tgz#c6928946a0e06c5f8d6f8a9333469ffda46298a0" 1661 | dependencies: 1662 | aws-sign2 "~0.6.0" 1663 | aws4 "^1.2.1" 1664 | caseless "~0.12.0" 1665 | combined-stream "~1.0.5" 1666 | extend "~3.0.0" 1667 | forever-agent "~0.6.1" 1668 | form-data "~2.1.1" 1669 | har-validator "~4.2.1" 1670 | hawk "~3.1.3" 1671 | http-signature "~1.1.0" 1672 | is-typedarray "~1.0.0" 1673 | isstream "~0.1.2" 1674 | json-stringify-safe "~5.0.1" 1675 | mime-types "~2.1.7" 1676 | oauth-sign "~0.8.1" 1677 | performance-now "^0.2.0" 1678 | qs "~6.4.0" 1679 | safe-buffer "^5.0.1" 1680 | stringstream "~0.0.4" 1681 | tough-cookie "~2.3.0" 1682 | tunnel-agent "^0.6.0" 1683 | uuid "^3.0.0" 1684 | 1685 | retry-as-promised@^2.3.1: 1686 | version "2.3.2" 1687 | resolved "https://registry.yarnpkg.com/retry-as-promised/-/retry-as-promised-2.3.2.tgz#cd974ee4fd9b5fe03cbf31871ee48221c07737b7" 1688 | dependencies: 1689 | bluebird "^3.4.6" 1690 | debug "^2.6.9" 1691 | 1692 | rimraf@2, rimraf@^2.5.1, rimraf@^2.6.1: 1693 | version "2.6.2" 1694 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" 1695 | dependencies: 1696 | glob "^7.0.5" 1697 | 1698 | rx@2.3.24: 1699 | version "2.3.24" 1700 | resolved "https://registry.yarnpkg.com/rx/-/rx-2.3.24.tgz#14f950a4217d7e35daa71bbcbe58eff68ea4b2b7" 1701 | 1702 | safe-buffer@5.1.1, safe-buffer@^5.0.1, safe-buffer@~5.1.0, safe-buffer@~5.1.1: 1703 | version "5.1.1" 1704 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" 1705 | 1706 | semver-diff@^2.0.0: 1707 | version "2.1.0" 1708 | resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" 1709 | dependencies: 1710 | semver "^5.0.3" 1711 | 1712 | semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.3.0: 1713 | version "5.4.1" 1714 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" 1715 | 1716 | send@0.16.1: 1717 | version "0.16.1" 1718 | resolved "https://registry.yarnpkg.com/send/-/send-0.16.1.tgz#a70e1ca21d1382c11d0d9f6231deb281080d7ab3" 1719 | dependencies: 1720 | debug "2.6.9" 1721 | depd "~1.1.1" 1722 | destroy "~1.0.4" 1723 | encodeurl "~1.0.1" 1724 | escape-html "~1.0.3" 1725 | etag "~1.8.1" 1726 | fresh "0.5.2" 1727 | http-errors "~1.6.2" 1728 | mime "1.4.1" 1729 | ms "2.0.0" 1730 | on-finished "~2.3.0" 1731 | range-parser "~1.2.0" 1732 | statuses "~1.3.1" 1733 | 1734 | seq-queue@0.0.5: 1735 | version "0.0.5" 1736 | resolved "https://registry.yarnpkg.com/seq-queue/-/seq-queue-0.0.5.tgz#d56812e1c017a6e4e7c3e3a37a1da6d78dd3c93e" 1737 | 1738 | sequelize@^4.22.15: 1739 | version "4.24.0" 1740 | resolved "https://registry.yarnpkg.com/sequelize/-/sequelize-4.24.0.tgz#c5e427a7389ce88c257c928d710a98b3770d1db8" 1741 | dependencies: 1742 | bluebird "^3.4.6" 1743 | cls-bluebird "^2.0.1" 1744 | debug "^3.0.0" 1745 | depd "^1.1.0" 1746 | dottie "^2.0.0" 1747 | generic-pool "^3.1.8" 1748 | inflection "1.12.0" 1749 | lodash "^4.17.1" 1750 | moment "^2.13.0" 1751 | moment-timezone "^0.5.4" 1752 | retry-as-promised "^2.3.1" 1753 | semver "^5.0.1" 1754 | terraformer-wkt-parser "^1.1.2" 1755 | toposort-class "^1.0.1" 1756 | uuid "^3.0.0" 1757 | validator "^9.1.0" 1758 | wkx "^0.4.1" 1759 | 1760 | serve-static@1.13.1: 1761 | version "1.13.1" 1762 | resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.13.1.tgz#4c57d53404a761d8f2e7c1e8a18a47dbf278a719" 1763 | dependencies: 1764 | encodeurl "~1.0.1" 1765 | escape-html "~1.0.3" 1766 | parseurl "~1.3.2" 1767 | send "0.16.1" 1768 | 1769 | set-blocking@~2.0.0: 1770 | version "2.0.0" 1771 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" 1772 | 1773 | set-immediate-shim@^1.0.1: 1774 | version "1.0.1" 1775 | resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" 1776 | 1777 | setprototypeof@1.0.3: 1778 | version "1.0.3" 1779 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04" 1780 | 1781 | setprototypeof@1.1.0: 1782 | version "1.1.0" 1783 | resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.0.tgz#d0bd85536887b6fe7c0d818cb962d9d91c54e656" 1784 | 1785 | shebang-command@^1.2.0: 1786 | version "1.2.0" 1787 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" 1788 | dependencies: 1789 | shebang-regex "^1.0.0" 1790 | 1791 | shebang-regex@^1.0.0: 1792 | version "1.0.0" 1793 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" 1794 | 1795 | shimmer@^1.1.0: 1796 | version "1.2.0" 1797 | resolved "https://registry.yarnpkg.com/shimmer/-/shimmer-1.2.0.tgz#f966f7555789763e74d8841193685a5e78736665" 1798 | 1799 | signal-exit@^3.0.0, signal-exit@^3.0.2: 1800 | version "3.0.2" 1801 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" 1802 | 1803 | sntp@1.x.x: 1804 | version "1.0.9" 1805 | resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" 1806 | dependencies: 1807 | hoek "2.x.x" 1808 | 1809 | socket.io-adapter@~1.1.0: 1810 | version "1.1.1" 1811 | resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.1.tgz#2a805e8a14d6372124dd9159ad4502f8cb07f06b" 1812 | 1813 | socket.io-client@2.0.4: 1814 | version "2.0.4" 1815 | resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.0.4.tgz#0918a552406dc5e540b380dcd97afc4a64332f8e" 1816 | dependencies: 1817 | backo2 "1.0.2" 1818 | base64-arraybuffer "0.1.5" 1819 | component-bind "1.0.0" 1820 | component-emitter "1.2.1" 1821 | debug "~2.6.4" 1822 | engine.io-client "~3.1.0" 1823 | has-cors "1.1.0" 1824 | indexof "0.0.1" 1825 | object-component "0.0.3" 1826 | parseqs "0.0.5" 1827 | parseuri "0.0.5" 1828 | socket.io-parser "~3.1.1" 1829 | to-array "0.1.4" 1830 | 1831 | socket.io-parser@~3.1.1: 1832 | version "3.1.2" 1833 | resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.1.2.tgz#dbc2282151fc4faebbe40aeedc0772eba619f7f2" 1834 | dependencies: 1835 | component-emitter "1.2.1" 1836 | debug "~2.6.4" 1837 | has-binary2 "~1.0.2" 1838 | isarray "2.0.1" 1839 | 1840 | socket.io@^2.0.4: 1841 | version "2.0.4" 1842 | resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.0.4.tgz#c1a4590ceff87ecf13c72652f046f716b29e6014" 1843 | dependencies: 1844 | debug "~2.6.6" 1845 | engine.io "~3.1.0" 1846 | socket.io-adapter "~1.1.0" 1847 | socket.io-client "2.0.4" 1848 | socket.io-parser "~3.1.1" 1849 | 1850 | spawn-command@^0.0.2-1: 1851 | version "0.0.2-1" 1852 | resolved "https://registry.yarnpkg.com/spawn-command/-/spawn-command-0.0.2-1.tgz#62f5e9466981c1b796dc5929937e11c9c6921bd0" 1853 | 1854 | split@0.3: 1855 | version "0.3.3" 1856 | resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" 1857 | dependencies: 1858 | through "2" 1859 | 1860 | sqlstring@^2.2.0: 1861 | version "2.3.0" 1862 | resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.3.0.tgz#525b8a4fd26d6f71aa61e822a6caf976d31ad2a8" 1863 | 1864 | sshpk@^1.7.0: 1865 | version "1.13.1" 1866 | resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.13.1.tgz#512df6da6287144316dc4c18fe1cf1d940739be3" 1867 | dependencies: 1868 | asn1 "~0.2.3" 1869 | assert-plus "^1.0.0" 1870 | dashdash "^1.12.0" 1871 | getpass "^0.1.1" 1872 | optionalDependencies: 1873 | bcrypt-pbkdf "^1.0.0" 1874 | ecc-jsbn "~0.1.1" 1875 | jsbn "~0.1.0" 1876 | tweetnacl "~0.14.0" 1877 | 1878 | "statuses@>= 1.3.1 < 2": 1879 | version "1.4.0" 1880 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" 1881 | 1882 | statuses@~1.3.1: 1883 | version "1.3.1" 1884 | resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e" 1885 | 1886 | stream-combiner@~0.0.4: 1887 | version "0.0.4" 1888 | resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" 1889 | dependencies: 1890 | duplexer "~0.1.1" 1891 | 1892 | string-width@^1.0.1, string-width@^1.0.2: 1893 | version "1.0.2" 1894 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" 1895 | dependencies: 1896 | code-point-at "^1.0.0" 1897 | is-fullwidth-code-point "^1.0.0" 1898 | strip-ansi "^3.0.0" 1899 | 1900 | string-width@^2.0.0, string-width@^2.1.1: 1901 | version "2.1.1" 1902 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" 1903 | dependencies: 1904 | is-fullwidth-code-point "^2.0.0" 1905 | strip-ansi "^4.0.0" 1906 | 1907 | string_decoder@~1.0.0, string_decoder@~1.0.3: 1908 | version "1.0.3" 1909 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" 1910 | dependencies: 1911 | safe-buffer "~5.1.0" 1912 | 1913 | stringstream@~0.0.4: 1914 | version "0.0.5" 1915 | resolved "https://registry.yarnpkg.com/stringstream/-/stringstream-0.0.5.tgz#4e484cd4de5a0bbbee18e46307710a8a81621878" 1916 | 1917 | strip-ansi@^0.3.0: 1918 | version "0.3.0" 1919 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.3.0.tgz#25f48ea22ca79187f3174a4db8759347bb126220" 1920 | dependencies: 1921 | ansi-regex "^0.2.1" 1922 | 1923 | strip-ansi@^3.0.0, strip-ansi@^3.0.1: 1924 | version "3.0.1" 1925 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" 1926 | dependencies: 1927 | ansi-regex "^2.0.0" 1928 | 1929 | strip-ansi@^4.0.0: 1930 | version "4.0.0" 1931 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" 1932 | dependencies: 1933 | ansi-regex "^3.0.0" 1934 | 1935 | strip-eof@^1.0.0: 1936 | version "1.0.0" 1937 | resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" 1938 | 1939 | strip-json-comments@~2.0.1: 1940 | version "2.0.1" 1941 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" 1942 | 1943 | supports-color@^0.2.0: 1944 | version "0.2.0" 1945 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-0.2.0.tgz#d92de2694eb3f67323973d7ae3d8b55b4c22190a" 1946 | 1947 | supports-color@^3.2.3: 1948 | version "3.2.3" 1949 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" 1950 | dependencies: 1951 | has-flag "^1.0.0" 1952 | 1953 | supports-color@^4.0.0: 1954 | version "4.5.0" 1955 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" 1956 | dependencies: 1957 | has-flag "^2.0.0" 1958 | 1959 | tar-pack@^3.4.0: 1960 | version "3.4.1" 1961 | resolved "https://registry.yarnpkg.com/tar-pack/-/tar-pack-3.4.1.tgz#e1dbc03a9b9d3ba07e896ad027317eb679a10a1f" 1962 | dependencies: 1963 | debug "^2.2.0" 1964 | fstream "^1.0.10" 1965 | fstream-ignore "^1.0.5" 1966 | once "^1.3.3" 1967 | readable-stream "^2.1.4" 1968 | rimraf "^2.5.1" 1969 | tar "^2.2.1" 1970 | uid-number "^0.0.6" 1971 | 1972 | tar@^2.2.1: 1973 | version "2.2.1" 1974 | resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1" 1975 | dependencies: 1976 | block-stream "*" 1977 | fstream "^1.0.2" 1978 | inherits "2" 1979 | 1980 | term-size@^1.2.0: 1981 | version "1.2.0" 1982 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" 1983 | dependencies: 1984 | execa "^0.7.0" 1985 | 1986 | terraformer-wkt-parser@^1.1.2: 1987 | version "1.1.2" 1988 | resolved "https://registry.yarnpkg.com/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz#336a0c8fc82094a5aff83288f69aedecd369bf0c" 1989 | dependencies: 1990 | terraformer "~1.0.5" 1991 | 1992 | terraformer@~1.0.5: 1993 | version "1.0.8" 1994 | resolved "https://registry.yarnpkg.com/terraformer/-/terraformer-1.0.8.tgz#51e0ad89746fcf2161dc6f65aa70e42377c8b593" 1995 | dependencies: 1996 | "@types/geojson" "^1.0.0" 1997 | 1998 | through@2, through@~2.3, through@~2.3.1: 1999 | version "2.3.8" 2000 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" 2001 | 2002 | timed-out@^4.0.0: 2003 | version "4.0.1" 2004 | resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" 2005 | 2006 | to-array@0.1.4: 2007 | version "0.1.4" 2008 | resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" 2009 | 2010 | toposort-class@^1.0.1: 2011 | version "1.0.1" 2012 | resolved "https://registry.yarnpkg.com/toposort-class/-/toposort-class-1.0.1.tgz#7ffd1f78c8be28c3ba45cd4e1a3f5ee193bd9988" 2013 | 2014 | touch@^3.1.0: 2015 | version "3.1.0" 2016 | resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.0.tgz#fe365f5f75ec9ed4e56825e0bb76d24ab74af83b" 2017 | dependencies: 2018 | nopt "~1.0.10" 2019 | 2020 | tough-cookie@~2.3.0: 2021 | version "2.3.3" 2022 | resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.3.3.tgz#0b618a5565b6dea90bf3425d04d55edc475a7561" 2023 | dependencies: 2024 | punycode "^1.4.1" 2025 | 2026 | tree-kill@^1.1.0: 2027 | version "1.2.0" 2028 | resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.0.tgz#5846786237b4239014f05db156b643212d4c6f36" 2029 | 2030 | tunnel-agent@^0.6.0: 2031 | version "0.6.0" 2032 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" 2033 | dependencies: 2034 | safe-buffer "^5.0.1" 2035 | 2036 | tweetnacl@^0.14.3, tweetnacl@~0.14.0: 2037 | version "0.14.5" 2038 | resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" 2039 | 2040 | type-is@~1.6.15: 2041 | version "1.6.15" 2042 | resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410" 2043 | dependencies: 2044 | media-typer "0.3.0" 2045 | mime-types "~2.1.15" 2046 | 2047 | uid-number@^0.0.6: 2048 | version "0.0.6" 2049 | resolved "https://registry.yarnpkg.com/uid-number/-/uid-number-0.0.6.tgz#0ea10e8035e8eb5b8e4449f06da1c730663baa81" 2050 | 2051 | ultron@~1.1.0: 2052 | version "1.1.1" 2053 | resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" 2054 | 2055 | undefsafe@0.0.3: 2056 | version "0.0.3" 2057 | resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-0.0.3.tgz#ecca3a03e56b9af17385baac812ac83b994a962f" 2058 | 2059 | unique-string@^1.0.0: 2060 | version "1.0.0" 2061 | resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" 2062 | dependencies: 2063 | crypto-random-string "^1.0.0" 2064 | 2065 | unpipe@1.0.0, unpipe@~1.0.0: 2066 | version "1.0.0" 2067 | resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" 2068 | 2069 | unzip-response@^2.0.1: 2070 | version "2.0.1" 2071 | resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" 2072 | 2073 | update-notifier@^2.2.0: 2074 | version "2.3.0" 2075 | resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.3.0.tgz#4e8827a6bb915140ab093559d7014e3ebb837451" 2076 | dependencies: 2077 | boxen "^1.2.1" 2078 | chalk "^2.0.1" 2079 | configstore "^3.0.0" 2080 | import-lazy "^2.1.0" 2081 | is-installed-globally "^0.1.0" 2082 | is-npm "^1.0.0" 2083 | latest-version "^3.0.0" 2084 | semver-diff "^2.0.0" 2085 | xdg-basedir "^3.0.0" 2086 | 2087 | url-parse-lax@^1.0.0: 2088 | version "1.0.0" 2089 | resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" 2090 | dependencies: 2091 | prepend-http "^1.0.1" 2092 | 2093 | util-deprecate@~1.0.1: 2094 | version "1.0.2" 2095 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" 2096 | 2097 | utils-merge@1.0.1: 2098 | version "1.0.1" 2099 | resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" 2100 | 2101 | uuid@^3.0.0: 2102 | version "3.1.0" 2103 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.1.0.tgz#3dd3d3e790abc24d7b0d3a034ffababe28ebbc04" 2104 | 2105 | uws@~0.14.4: 2106 | version "0.14.5" 2107 | resolved "https://registry.yarnpkg.com/uws/-/uws-0.14.5.tgz#67aaf33c46b2a587a5f6666d00f7691328f149dc" 2108 | 2109 | validator@^9.1.0: 2110 | version "9.1.2" 2111 | resolved "https://registry.yarnpkg.com/validator/-/validator-9.1.2.tgz#5711b6413f78bd9d56003130c81b47c39e86546c" 2112 | 2113 | vary@~1.1.2: 2114 | version "1.1.2" 2115 | resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" 2116 | 2117 | verror@1.10.0: 2118 | version "1.10.0" 2119 | resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" 2120 | dependencies: 2121 | assert-plus "^1.0.0" 2122 | core-util-is "1.0.2" 2123 | extsprintf "^1.2.0" 2124 | 2125 | which@^1.2.9: 2126 | version "1.3.0" 2127 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.0.tgz#ff04bdfc010ee547d780bec38e1ac1c2777d253a" 2128 | dependencies: 2129 | isexe "^2.0.0" 2130 | 2131 | wide-align@^1.1.0: 2132 | version "1.1.2" 2133 | resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.2.tgz#571e0f1b0604636ebc0dfc21b0339bbe31341710" 2134 | dependencies: 2135 | string-width "^1.0.2" 2136 | 2137 | widest-line@^2.0.0: 2138 | version "2.0.0" 2139 | resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.0.tgz#0142a4e8a243f8882c0233aa0e0281aa76152273" 2140 | dependencies: 2141 | string-width "^2.1.1" 2142 | 2143 | wkx@^0.4.1: 2144 | version "0.4.2" 2145 | resolved "https://registry.yarnpkg.com/wkx/-/wkx-0.4.2.tgz#776d35a634a5c22e656e4744bdeb54f83fd2ce8d" 2146 | dependencies: 2147 | "@types/node" "*" 2148 | 2149 | wrappy@1: 2150 | version "1.0.2" 2151 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2152 | 2153 | write-file-atomic@^2.0.0: 2154 | version "2.3.0" 2155 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.3.0.tgz#1ff61575c2e2a4e8e510d6fa4e243cce183999ab" 2156 | dependencies: 2157 | graceful-fs "^4.1.11" 2158 | imurmurhash "^0.1.4" 2159 | signal-exit "^3.0.2" 2160 | 2161 | ws@~3.3.1: 2162 | version "3.3.2" 2163 | resolved "https://registry.yarnpkg.com/ws/-/ws-3.3.2.tgz#96c1d08b3fefda1d5c1e33700d3bfaa9be2d5608" 2164 | dependencies: 2165 | async-limiter "~1.0.0" 2166 | safe-buffer "~5.1.0" 2167 | ultron "~1.1.0" 2168 | 2169 | xdg-basedir@^3.0.0: 2170 | version "3.0.0" 2171 | resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" 2172 | 2173 | xmlhttprequest-ssl@~1.5.4: 2174 | version "1.5.4" 2175 | resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.4.tgz#04f560915724b389088715cc0ed7813e9677bf57" 2176 | 2177 | yallist@^2.1.2: 2178 | version "2.1.2" 2179 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" 2180 | 2181 | yeast@0.1.2: 2182 | version "0.1.2" 2183 | resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" 2184 | --------------------------------------------------------------------------------