├── .gitattributes ├── frontend ├── src │ ├── index.css │ ├── components │ │ ├── App.js │ │ ├── Tasks.js │ │ ├── app.css │ │ └── main.js │ ├── reducers │ │ └── index.js │ ├── container │ │ ├── taskTable.js │ │ └── mainTable.js │ ├── index.js │ ├── actions │ │ └── index.js │ └── saga │ │ └── saga.js ├── public │ ├── favicon.ico │ ├── manifest.json │ └── index.html └── package.json ├── backend ├── db.development.sqlite ├── views │ ├── error.pug │ ├── layout.pug │ └── index.pug ├── .sequelizerc ├── public │ ├── js │ │ └── script.js │ └── stylesheets │ │ └── style.css ├── models │ ├── user.js │ ├── task.js │ └── index.js ├── app.json ├── test │ ├── unit │ │ ├── index.test.js │ │ └── task.test.js │ └── integration │ │ └── user-creation.test.js ├── config │ └── config.js ├── migrations │ ├── 20171125081128-create-user.js │ └── 20171125081136-create-task.js ├── package.json ├── routes │ ├── index.js │ └── users.js ├── app.js ├── bin │ └── www ├── README.md └── package-lock.json └── README.md /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /frontend/src/index.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 0; 3 | padding: 0; 4 | font-family: sans-serif; 5 | } 6 | -------------------------------------------------------------------------------- /backend/db.development.sqlite: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WonderEagle/Simple-User-Major/HEAD/backend/db.development.sqlite -------------------------------------------------------------------------------- /frontend/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/WonderEagle/Simple-User-Major/HEAD/frontend/public/favicon.ico -------------------------------------------------------------------------------- /backend/views/error.pug: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= message 5 | h2= error.status 6 | pre #{error.stack} 7 | -------------------------------------------------------------------------------- /backend/.sequelizerc: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | 'config': path.resolve('config', 'config.js') 5 | } -------------------------------------------------------------------------------- /frontend/src/components/App.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import FullDataTable from '../container/mainTable' 3 | import './app.css' 4 | 5 | const App = () => ( 6 | 7 | ) 8 | 9 | export default App; 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Simple User Major Project 2 | 3 | ## Structure 4 | 5 | - back-end 6 | - front-end -------------------------------------------------------------------------------- /backend/public/js/script.js: -------------------------------------------------------------------------------- 1 | jQuery(document).ready(function(){ 2 | jQuery('.btn_update').on('click', function(){ 3 | var user_id = jQuery(this).attr('id').substr(4); 4 | jQuery('#updateuserform' + user_id).show(); 5 | }); 6 | }); -------------------------------------------------------------------------------- /frontend/src/components/Tasks.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import FullTaskTable from '../container/taskTable' 3 | import './app.css' 4 | 5 | class Tasks extends React.Component { 6 | render() { 7 | return( 8 | 9 | ); 10 | } 11 | } 12 | 13 | export default Tasks; -------------------------------------------------------------------------------- /backend/models/user.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = (sequelize, DataTypes) => { 3 | var User = sequelize.define('User', { 4 | firstname: DataTypes.STRING, 5 | lastname: DataTypes.STRING, 6 | birthday: DataTypes.STRING 7 | }); 8 | 9 | User.associate = function(models) { 10 | models.User.hasMany(models.Task); 11 | }; 12 | 13 | return User; 14 | }; 15 | -------------------------------------------------------------------------------- /frontend/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | } 10 | ], 11 | "start_url": "./index.html", 12 | "display": "standalone", 13 | "theme_color": "#000000", 14 | "background_color": "#ffffff" 15 | } 16 | -------------------------------------------------------------------------------- /backend/views/layout.pug: -------------------------------------------------------------------------------- 1 | doctype html 2 | html 3 | head 4 | title= title 5 | link(rel='stylesheet', href='//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css') 6 | link(rel='stylesheet', href='/stylesheets/style.css') 7 | script(type = 'text/javascript' src="https://code.jquery.com/jquery-3.3.1.min.js") 8 | script(type = 'text/javascript' src="/js/script.js") 9 | body 10 | block content -------------------------------------------------------------------------------- /backend/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "addons": [ 3 | { 4 | "plan": "heroku-postgresql" 5 | } 6 | ], 7 | "buildpacks": [], 8 | "env": { 9 | "NODE_ENV": { 10 | "description": "Run as a production environment on Heroku", 11 | "value": "production" 12 | } 13 | }, 14 | "formation": {}, 15 | "name": "express-example", 16 | "scripts": {} 17 | } 18 | -------------------------------------------------------------------------------- /backend/test/unit/index.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var expect = require('expect.js'); 4 | 5 | describe('models/index', function () { 6 | it('returns the task model', function () { 7 | var models = require('../../models'); 8 | expect(models.Task).to.be.ok(); 9 | }); 10 | 11 | it('returns the user model', function () { 12 | var models = require('../../models'); 13 | expect(models.User).to.be.ok(); 14 | }); 15 | }); 16 | -------------------------------------------------------------------------------- /backend/config/config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | development: { 3 | dialect: "sqlite", 4 | storage: "./db.development.sqlite" 5 | }, 6 | test: { 7 | dialect: "sqlite", 8 | storage: ":memory:" 9 | }, 10 | production: { 11 | username: process.env.DB_USERNAME, 12 | password: process.env.DB_PASSWORD, 13 | database: process.env.DB_NAME, 14 | host: process.env.DB_HOSTNAME, 15 | dialect: 'mysql', 16 | } 17 | }; 18 | -------------------------------------------------------------------------------- /backend/models/task.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = (sequelize, DataTypes) => { 3 | var Task = sequelize.define('Task', { 4 | title: DataTypes.STRING, 5 | overview: DataTypes.STRING 6 | }); 7 | 8 | Task.associate = function (models) { 9 | models.Task.belongsTo(models.User, { 10 | onDelete: "CASCADE", 11 | foreignKey: { 12 | allowNull: false 13 | } 14 | }); 15 | }; 16 | 17 | return Task; 18 | }; 19 | -------------------------------------------------------------------------------- /frontend/src/components/app.css: -------------------------------------------------------------------------------- 1 | .title{ 2 | text-align: center; 3 | font-size: 20px; 4 | } 5 | 6 | .toolBar { 7 | padding-right:40px; 8 | height:25px; 9 | } 10 | 11 | .inputbutton{ 12 | font-size: 20px; 13 | padding: 10px 5px; 14 | float:right; 15 | margin-bottom: 10px; 16 | } 17 | 18 | .visible{ 19 | display:block; 20 | } 21 | 22 | .invisible{ 23 | display:none; 24 | } 25 | 26 | .clear{ 27 | clear:both; 28 | } -------------------------------------------------------------------------------- /backend/public/stylesheets/style.css: -------------------------------------------------------------------------------- 1 | body { 2 | padding: 50px; 3 | font: 14px "Helvetica Neue","Open Sans",sans-serif; 4 | } 5 | 6 | a { 7 | color: #00B7FF; 8 | } 9 | 10 | h1, h2 { 11 | font-weight: 100; 12 | } 13 | 14 | h1 { 15 | font-size: 35px; 16 | } 17 | 18 | ul li { 19 | padding: 5px; 20 | } 21 | 22 | .onefourth{ 23 | width: 25% !important; 24 | float:left; 25 | margin-right:2%; 26 | } 27 | .onefifth{ 28 | width:15% !important; 29 | float:left; 30 | } 31 | .userupdateform{ 32 | display:none; 33 | } -------------------------------------------------------------------------------- /frontend/src/reducers/index.js: -------------------------------------------------------------------------------- 1 | const mainReducer = (state = {data:[], loading: false}, action) => { 2 | switch (action.type){ 3 | case 'LOAD_USER_LIST': 4 | return {...state, loading: true}; 5 | case 'LOAD_TASK_LIST': 6 | return {...state, loading: true, user_id: action.user_id}; 7 | case 'DATA_LOADED': 8 | return {...state, data: action.data, loading: action.loading} 9 | default: 10 | return state 11 | } 12 | } 13 | 14 | export default mainReducer -------------------------------------------------------------------------------- /frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-test-frontend", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "react": "^16.2.0", 7 | "react-dom": "^16.2.0", 8 | "react-redux": "^5.0.7", 9 | "react-router": "^3.0.2", 10 | "react-router-redux": "^4.0.8", 11 | "react-scripts": "1.1.1", 12 | "react-table": "^6.8.0", 13 | "redux": "^3.7.2", 14 | "redux-saga": "^0.16.0", 15 | "redux-saga-router": "^2.2.0" 16 | }, 17 | "scripts": { 18 | "start": "react-scripts start", 19 | "build": "react-scripts build", 20 | "test": "react-scripts test --env=jsdom", 21 | "eject": "react-scripts eject" 22 | }, 23 | "proxy": "http://localhost:3000" 24 | } 25 | -------------------------------------------------------------------------------- /backend/test/unit/task.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var expect = require('expect.js'); 4 | 5 | describe('models/task', function () { 6 | before(function () { 7 | return require('../../models').sequelize.sync(); 8 | }); 9 | 10 | beforeEach(function () { 11 | this.User = require('../../models').User; 12 | this.Task = require('../../models').Task; 13 | }); 14 | 15 | describe('create', function () { 16 | it('creates a task', function () { 17 | return this.User.create({ username: 'johndoe' }).bind(this).then(function (user) { 18 | return this.Task.create({ title: 'a title', UserId: user.id }).then(function (task) { 19 | expect(task.title).to.equal('a title'); 20 | }); 21 | }); 22 | }); 23 | }); 24 | }); 25 | -------------------------------------------------------------------------------- /backend/migrations/20171125081128-create-user.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = { 3 | up: (queryInterface, Sequelize) => { 4 | return queryInterface.createTable('Users', { 5 | id: { 6 | allowNull: false, 7 | autoIncrement: true, 8 | primaryKey: true, 9 | type: Sequelize.INTEGER 10 | }, 11 | firstname: { 12 | type: Sequelize.STRING 13 | }, 14 | lastname: { 15 | type: Sequelize.STRING 16 | }, 17 | birthday: { 18 | type: Sequelize.STRING 19 | }, 20 | createdAt: { 21 | allowNull: false, 22 | type: Sequelize.DATE 23 | }, 24 | updatedAt: { 25 | allowNull: false, 26 | type: Sequelize.DATE 27 | } 28 | }); 29 | }, 30 | down: (queryInterface, Sequelize) => { 31 | return queryInterface.dropTable('Users'); 32 | } 33 | }; -------------------------------------------------------------------------------- /backend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express-Task", 3 | "version": "0.0.0", 4 | "private": true, 5 | "scripts": { 6 | "start": "DEBUG=express-sequelize node ./bin/www", 7 | "test": "npm run test-unit && npm run test-integration", 8 | "test-unit": "cross-env NODE_ENV=test ./node_modules/.bin/mocha test/unit/*.test.js", 9 | "test-integration": "cross-env NODE_ENV=test ./node_modules/.bin/mocha test/integration/*.test.js" 10 | }, 11 | "dependencies": { 12 | "bluebird": "^3.5.1", 13 | "body-parser": "^1.18.2", 14 | "cookie-parser": "^1.4.3", 15 | "debug": "^3.1.0", 16 | "express": "^4.16.2", 17 | "morgan": "^1.7.0", 18 | "pg": "^6.1.0", 19 | "pug": "^2.0.0-rc.4", 20 | "sequelize": "^3.23.6", 21 | "sequelize-cli": "^3.1.0", 22 | "serve-favicon": "~2.3.0", 23 | "sqlite3": "^3.0.8" 24 | }, 25 | "devDependencies": { 26 | "cross-env": "^3.1.3", 27 | "expect.js": "^0.3.1", 28 | "mocha": "^3.0.2", 29 | "supertest": "^2.0.0" 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /backend/migrations/20171125081136-create-task.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | module.exports = { 3 | up: (queryInterface, Sequelize) => { 4 | return queryInterface.createTable('Tasks', { 5 | id: { 6 | allowNull: false, 7 | autoIncrement: true, 8 | primaryKey: true, 9 | type: Sequelize.INTEGER 10 | }, 11 | title: { 12 | type: Sequelize.STRING 13 | }, 14 | overview: { 15 | type: Sequelize.STRING 16 | }, 17 | createdAt: { 18 | allowNull: false, 19 | type: Sequelize.DATE 20 | }, 21 | updatedAt: { 22 | allowNull: false, 23 | type: Sequelize.DATE 24 | }, 25 | UserId: { 26 | type: Sequelize.INTEGER, 27 | onDelete: "CASCADE", 28 | allowNull: false, 29 | references: { 30 | model: 'Users', 31 | key: 'id' 32 | } 33 | } 34 | }); 35 | }, 36 | down: (queryInterface, Sequelize) => { 37 | return queryInterface.dropTable('Tasks'); 38 | } 39 | }; -------------------------------------------------------------------------------- /frontend/src/container/taskTable.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import DataTable from '../components/main' 3 | import { CreateTask, GetTaskList, UpdateTask, DeleteTask } from '../actions' 4 | 5 | const mapStateToProps = (state) => { 6 | return { 7 | tableData: state.mainReducer, title: "Task list", createbut: "Add Task" 8 | } 9 | } 10 | 11 | const mapDispatchToProps = (dispatch) => { 12 | return { 13 | createUser: () => { 14 | dispatch(CreateTask()) 15 | }, 16 | updateTask: (task_id, title, overview) => { 17 | dispatch(UpdateTask(task_id, title, overview)) 18 | }, 19 | deleteTask: (task_id) => { 20 | dispatch(DeleteTask(task_id)) 21 | }, 22 | getTasks: (user_id) => { 23 | dispatch(GetTaskList(true, 'invisible', user_id)) 24 | }, 25 | } 26 | } 27 | 28 | const FullTaskTable = connect( 29 | mapStateToProps, 30 | mapDispatchToProps 31 | )(DataTable) 32 | 33 | export default FullTaskTable -------------------------------------------------------------------------------- /frontend/src/container/mainTable.js: -------------------------------------------------------------------------------- 1 | import { connect } from 'react-redux' 2 | import DataTable from '../components/main' 3 | import { CreateUser, UpdateUser, DeleteUser, GetUserList } from '../actions' 4 | 5 | const mapStateToProps = state => { 6 | return { 7 | tableData: state.mainReducer, title: 'User list', createbut: 'Add User' 8 | } 9 | } 10 | 11 | const mapDispatchToProps = dispatch => { 12 | return { 13 | createUser: () => { 14 | dispatch(CreateUser()) 15 | }, 16 | updateUser: (user_id, firstname, lastname, birthday) => { 17 | dispatch(UpdateUser(user_id, firstname, lastname, birthday)) 18 | }, 19 | deleteUser: (user_id) => { 20 | dispatch(DeleteUser(user_id)) 21 | }, 22 | getData: () => { 23 | dispatch(GetUserList(true, 'invisible')) 24 | }, 25 | } 26 | } 27 | 28 | const FullDataTable = connect( 29 | mapStateToProps, 30 | mapDispatchToProps 31 | )(DataTable) 32 | 33 | export default FullDataTable -------------------------------------------------------------------------------- /backend/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.js')[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 | -------------------------------------------------------------------------------- /frontend/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import { render } from 'react-dom' 3 | import { Provider } from 'react-redux' 4 | import { createStore, applyMiddleware, combineReducers} from 'redux' 5 | import createSagaMiddleware from 'redux-saga' 6 | import mainReducer from './reducers' 7 | import { Router, Route, browserHistory } from 'react-router' 8 | import { syncHistoryWithStore, routerReducer } from 'react-router-redux' 9 | import App from './components/App' 10 | import Tasks from './components/Tasks' 11 | import { mainSaga } from './saga/saga' 12 | import './index.css' 13 | 14 | const sagaMiddleware = createSagaMiddleware() 15 | const store = createStore( 16 | combineReducers({ 17 | mainReducer, 18 | routing: routerReducer }), 19 | applyMiddleware(sagaMiddleware)) 20 | sagaMiddleware.run(mainSaga) 21 | 22 | const history = syncHistoryWithStore(browserHistory, store) 23 | 24 | render( 25 | 26 | 27 | 28 | 29 | 30 | , 31 | document.getElementById('root') 32 | ) -------------------------------------------------------------------------------- /backend/test/integration/user-creation.test.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | 3 | var app = require('../../app'); 4 | var Bluebird = require('bluebird'); 5 | var expect = require('expect.js'); 6 | var request = require('supertest'); 7 | 8 | describe('user creation page', function () { 9 | before(function () { 10 | return require('../../models').sequelize.sync(); 11 | }); 12 | 13 | beforeEach(function () { 14 | this.models = require('../../models'); 15 | 16 | return Bluebird.all([ 17 | this.models.Task.destroy({ truncate: true }), 18 | this.models.User.destroy({ truncate: true }) 19 | ]); 20 | }); 21 | 22 | it('loads correctly', function (done) { 23 | request(app).get('/').expect(200, done); 24 | }); 25 | 26 | it('lists a user if there is one', function (done) { 27 | this.models.User.create({ username: 'johndoe' }).then(function () { 28 | request(app).get('/').expect(/johndoe/, done); 29 | }) 30 | }); 31 | 32 | it('lists the tickets for the user if available', function (done) { 33 | this.models.User.create({ username: 'johndoe' }).bind(this).then(function (user) { 34 | return this.models.Task.create({ title: 'johndoe task', UserId: user.id }); 35 | }).then(function () { 36 | request(app).get('/').expect(/johndoe task/, done); 37 | }); 38 | }); 39 | }); 40 | -------------------------------------------------------------------------------- /frontend/src/actions/index.js: -------------------------------------------------------------------------------- 1 | export const GetUserList = (loading, createFlag) => { 2 | return { 3 | type: "LOAD_USER_LIST", 4 | loading, 5 | createFlag 6 | } 7 | } 8 | 9 | export const GetTaskList = (loading, createFlag, user_id) => { 10 | return { 11 | type: "LOAD_TASK_LIST", 12 | loading, 13 | createFlag, 14 | user_id 15 | } 16 | } 17 | 18 | export const CreateUser = () => { 19 | return { 20 | type: "CREATE_USER" 21 | } 22 | } 23 | 24 | export const UpdateUser = (user_id, firstname, lastname, birthday) => { 25 | return { 26 | type: "UPDATE_USER", 27 | user_id, 28 | firstname, 29 | lastname, 30 | birthday 31 | } 32 | } 33 | 34 | export const DeleteUser = (user_id) => { 35 | return { 36 | type: "DELETE_USER", 37 | user_id 38 | } 39 | } 40 | 41 | export const CreateTask = () => { 42 | return { 43 | type: "CREATE_NEW_TASK" 44 | } 45 | } 46 | 47 | export const UpdateTask = (task_id, title, overview) => { 48 | return { 49 | type: "UPDATE_TASK", 50 | task_id, 51 | title, 52 | overview 53 | } 54 | } 55 | 56 | export const DeleteTask = (task_id) => { 57 | return { 58 | type: "DELETE_TASK", 59 | task_id 60 | } 61 | } 62 | 63 | export const dataLoaded = (data, loading) => { 64 | return { 65 | type: "DATA_LOADED", 66 | data, 67 | loading 68 | } 69 | } -------------------------------------------------------------------------------- /backend/routes/index.js: -------------------------------------------------------------------------------- 1 | var models = require('../models'); 2 | var express = require('express'); 3 | var router = express.Router(); 4 | var Sequelize = require('sequelize'); 5 | 6 | router.get('/', function(req,res,next) { 7 | models.User.findAll({ 8 | include: [ models.Task ], 9 | attributes: { include: [[Sequelize.fn('COUNT', Sequelize.fn('DISTINCT', Sequelize.col('Tasks.id'))), 'task_count']]}, 10 | group: ['User.id'] 11 | }).then(function(users) { 12 | res.json({ 13 | title: 'React-Express example', 14 | users: users 15 | }); 16 | }); 17 | }); 18 | 19 | router.get('/:userid', function(req,res,next){ 20 | models.Task.findAll({ 21 | where: { 22 | userid: req.params.userid 23 | } 24 | }).then(function(tasks) { 25 | res.json({ 26 | title: 'React-Express example', 27 | tasks: tasks 28 | }); 29 | }); 30 | }); 31 | 32 | router.post('/', function(req, res) { 33 | const user = models.User; 34 | const task = models.Task; 35 | user.findAll({ 36 | include: [{model: major}], 37 | where: { 38 | '$or': { 39 | '$User.firstname$' : { 40 | like: '%' + req.body.search + '%' 41 | }, 42 | '$User.lastname$' : { 43 | like: '%' + req.body.search + '%' 44 | }, 45 | '$Tasks.title$': { 46 | like: '%' + req.body.search + '%' 47 | } 48 | } 49 | } 50 | }).then(function(users) { 51 | res.render('index', { 52 | title: 'Sequelize: Express Example', 53 | users: users 54 | }); 55 | }); 56 | }); 57 | 58 | module.exports = router; 59 | -------------------------------------------------------------------------------- /backend/app.js: -------------------------------------------------------------------------------- 1 | var express = require('express'); 2 | var path = require('path'); 3 | var favicon = require('serve-favicon'); 4 | var logger = require('morgan'); 5 | var cookieParser = require('cookie-parser'); 6 | var bodyParser = require('body-parser'); 7 | 8 | var routes = require('./routes/index'); 9 | var users = require('./routes/users'); 10 | 11 | var app = express(); 12 | 13 | app.use(function(req,res,next){ 14 | res.header("Access-Control-Allow-Origin", "*"); 15 | res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 16 | next(); 17 | }) 18 | 19 | // view engine setup 20 | app.set('views', path.join(__dirname, 'views')); 21 | app.set('view engine', 'pug'); 22 | 23 | // uncomment after placing your favicon in /public 24 | //app.use(favicon(__dirname + '/public/favicon.ico')); 25 | app.use(logger('dev')); 26 | app.use(bodyParser.json()); 27 | app.use(bodyParser.urlencoded({ extended: false })); 28 | app.use(cookieParser()); 29 | app.use(express.static(path.join(__dirname, 'public'))); 30 | 31 | app.use('/', routes); 32 | app.use('/users', users); 33 | 34 | // catch 404 and forward to error handler 35 | app.use(function(req, res, next) { 36 | var err = new Error('Not Found'); 37 | err.status = 404; 38 | next(err); 39 | }); 40 | 41 | // error handler 42 | // no stacktraces leaked to user unless in development environment 43 | app.use(function(err, req, res, next) { 44 | res.status(err.status || 500); 45 | res.render('error', { 46 | message: err.message, 47 | error: (app.get('env') === 'development') ? err : {} 48 | }); 49 | }); 50 | 51 | 52 | module.exports = app; 53 | -------------------------------------------------------------------------------- /frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | 13 | 22 | React App 23 | 24 | 25 | 28 |
29 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /backend/routes/users.js: -------------------------------------------------------------------------------- 1 | var models = require('../models'); 2 | var express = require('express'); 3 | var router = express.Router(); 4 | 5 | router.post('/create', function(req, res) { 6 | models.User.create({ 7 | firstname: 'dummy', 8 | lastname: 'dummy', 9 | birthday: '1900-1-1' 10 | }).then(function() { 11 | res.json({ 12 | 'success':true 13 | }); 14 | }); 15 | }); 16 | 17 | router.post('/update', function(req, res) { 18 | models.User.update( 19 | { 20 | firstname: req.body.firstname, 21 | lastname: req.body.lastname, 22 | birthday: req.body.birthday 23 | }, 24 | { where: { id: req.body.userid } 25 | }).then((result) => { 26 | res.json({ 27 | 'success':true 28 | }); 29 | }); 30 | }); 31 | 32 | router.get('/:user_id/destroy', function(req, res) { 33 | models.User.destroy({ 34 | where: { 35 | id: req.params.user_id 36 | } 37 | }).then(function() { 38 | res.json({ 39 | 'success':true 40 | }); 41 | }); 42 | }); 43 | 44 | router.post('/:user_id/tasks/create', function (req, res) { 45 | models.Task.create({ 46 | title: 'dummy task', 47 | overview: 'This is a dummy task', 48 | UserId: req.params.user_id 49 | }).then(function() { 50 | res.json({ 51 | 'success':true 52 | }); 53 | }); 54 | }); 55 | 56 | router.post('/:user_id/tasks/update', function (req, res) { 57 | models.Task.update({ 58 | title: req.body.title, 59 | overview: req.body.overview 60 | },{ where: { id: req.body.taskid } 61 | }).then(function() { 62 | res.json({ 63 | 'success':true 64 | }); 65 | }); 66 | }); 67 | 68 | router.get('/:user_id/tasks/:task_id/destroy', function (req, res) { 69 | models.Task.destroy({ 70 | where: { 71 | id: req.params.task_id 72 | } 73 | }).then(function() { 74 | res.json({ 75 | 'success':true 76 | }); 77 | }); 78 | }); 79 | 80 | 81 | module.exports = router; 82 | -------------------------------------------------------------------------------- /backend/bin/www: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | /** 4 | * Module dependencies. 5 | */ 6 | 7 | var app = require('../app'); 8 | var debug = require('debug')('express-sequelize'); 9 | var http = require('http'); 10 | var models = require('../models'); 11 | 12 | /** 13 | * Get port from environment and store in Express. 14 | */ 15 | 16 | var port = normalizePort(process.env.PORT || '3001'); 17 | app.set('port', port); 18 | /** 19 | * Create HTTP server. 20 | */ 21 | var server = http.createServer(app); 22 | 23 | models.sequelize.sync().then(function() { 24 | /** 25 | * Listen on provided port, on all network interfaces. 26 | */ 27 | server.listen(port, function() { 28 | debug('Express server listening on port ' + server.address().port); 29 | }); 30 | server.on('error', onError); 31 | server.on('listening', onListening); 32 | }); 33 | 34 | /** 35 | * Normalize a port into a number, string, or false. 36 | */ 37 | 38 | function normalizePort(val) { 39 | var port = parseInt(val, 10); 40 | 41 | if (isNaN(port)) { 42 | // named pipe 43 | return val; 44 | } 45 | 46 | if (port >= 0) { 47 | // port number 48 | return port; 49 | } 50 | 51 | return false; 52 | } 53 | 54 | /** 55 | * Event listener for HTTP server "error" event. 56 | */ 57 | 58 | function onError(error) { 59 | if (error.syscall !== 'listen') { 60 | throw error; 61 | } 62 | 63 | var bind = typeof port === 'string' 64 | ? 'Pipe ' + port 65 | : 'Port ' + port; 66 | 67 | // handle specific listen errors with friendly messages 68 | switch (error.code) { 69 | case 'EACCES': 70 | console.error(bind + ' requires elevated privileges'); 71 | process.exit(1); 72 | break; 73 | case 'EADDRINUSE': 74 | console.error(bind + ' is already in use'); 75 | process.exit(1); 76 | break; 77 | default: 78 | throw error; 79 | } 80 | } 81 | 82 | /** 83 | * Event listener for HTTP server "listening" event. 84 | */ 85 | 86 | function onListening() { 87 | var addr = server.address(); 88 | var bind = typeof addr === 'string' 89 | ? 'pipe ' + addr 90 | : 'port ' + addr.port; 91 | debug('Listening on ' + bind); 92 | } 93 | -------------------------------------------------------------------------------- /backend/views/index.pug: -------------------------------------------------------------------------------- 1 | extends layout 2 | 3 | block content 4 | h1= title 5 | 6 | div(class="col-md-4") 7 | h2 Create user 8 | 9 | form(action="/users/create", method="post", class="well") 10 | div(class="form-group") 11 | label(for="firstname") 12 | | First Name 13 | input(type="text", name="firstname", class="form-control") 14 | 15 | label(for="lastname") 16 | | Last Name 17 | input(type="text", name="lastname", class="form-control") 18 | 19 | label(for="birthday") 20 | | Birthday 21 | input(type="text", name="birthday", class="form-control") 22 | input(type="submit" class="btn btn-default") 23 | 24 | div(class="col-md-6") 25 | h2 Users 26 | form(action="/", method="post") 27 | div(class="form-group") 28 | input(type="text", name="search", class="form-control", placeholder="Search") 29 | 30 | ul 31 | each user in users 32 | li 33 | strong 34 | = user.firstname + ' || ' + user.lastname + ' || ' + user.birthday 35 | |   36 | a(href="/users/" + user.id + "/destroy", class="btn btn-xs btn-warning") delete 37 | |     38 | input(type='button' class="btn btn-xs btn-info btn_update" id='user'+user.id value='update') 39 | 40 | form(action="/users/update", method="post") 41 | div(class="form-group userupdateform" id='updateuserform'+user.id) 42 | input(type="text", name="firstname", class="onefourth form-control", placeholder="firstname" value=user.firstname) 43 | input(type="text", name="lastname", class="onefourth form-control", placeholder="lastname" value=user.lastname) 44 | input(type="text", name="birthday", class="onefourth form-control", placeholder="birthday" value=user.birthday) 45 | input(type="hidden", name="userid", value=user.id) 46 | input(type="submit" class="btn btn-default onefifth") 47 | div(style='clear:both') 48 | ul 49 | li 50 | | Create task 51 | form(action="/users/" + user.id + "/tasks/create", method="post", class="form-inline") 52 | div(class="form-group") 53 | input(type="text", name="title", class="input-sm form-control") 54 | input(type="text", name="overview", class="input-sm form-control") 55 | input(type="submit", class="btn btn-sm btn-default") 56 | each task in user.Tasks 57 | li 58 | strong 59 | = task.title + ' ' + task.overview 60 | |   61 | a(href="/users/" + user.id + "/tasks/" + task.id + "/destroy", class="btn btn-xs btn-warning") delete 62 | -------------------------------------------------------------------------------- /frontend/src/components/main.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactTable from 'react-table' 3 | import { Link } from 'react-router'; 4 | import 'react-table/react-table.css' 5 | 6 | export default class DataTable extends React.Component { 7 | constructor() { 8 | super(); 9 | this.renderEditable = this.renderEditable.bind(this); 10 | } 11 | 12 | componentWillMount() { 13 | if(this.props.id){ 14 | this.props.getTasks(this.props.id) 15 | }else 16 | this.props.getData(); 17 | } 18 | 19 | renderEditable(cellInfo) { 20 | const { tableData } = this.props 21 | return ( 22 |
{ 27 | const data = [...tableData.data]; 28 | data[cellInfo.index][cellInfo.column.id] = e.target.innerHTML; 29 | }} 30 | dangerouslySetInnerHTML={{ 31 | __html: tableData.data[cellInfo.index][cellInfo.column.id] 32 | }} 33 | /> 34 | ); 35 | } 36 | 37 | render(){ 38 | const { tableData } = this.props 39 | 40 | const column_user = [{ 41 | Header: 'First Name', 42 | accessor: 'firstname', 43 | Cell: this.renderEditable 44 | },{ 45 | Header: 'Last Name', 46 | accessor: 'lastname', // String-based value accessors! 47 | Cell: this.renderEditable 48 | }, { 49 | Header: 'Birthday', 50 | accessor: 'birthday', 51 | Cell: this.renderEditable 52 | }, { 53 | Header: 'Tasks', 54 | id: 'task_link', 55 | accessor: 'task_count', 56 | Cell: row => {row.value} 57 | }, { 58 | Header: '', 59 | id: 'task_buttons', 60 | Cell: row =>
this.props.updateUser(row.original.id, row.original.firstname, row.original.lastname, row.original.birthday)} /> this.props.deleteUser(row.original.id)} />
61 | }]; 62 | 63 | const column_task = [{ 64 | Header: 'Title', 65 | accessor: 'title', // String-based value accessors! 66 | Cell: this.renderEditable 67 | },{ 68 | Header: 'Overview', 69 | accessor: 'overview', // String-based value accessors! 70 | Cell: this.renderEditable 71 | },{ 72 | Header: '', 73 | id: 'task_buttons', 74 | Cell: row =>
this.props.updateTask(row.original.id, row.original.title, row.original.overview)} /> this.props.deleteTask(row.original.id)} />
75 | }]; 76 | 77 | let columns; 78 | 79 | if(this.props.id) 80 | columns = column_task 81 | else 82 | columns = column_user 83 | 84 | if(tableData.loading) 85 | return (
Loading...
) 86 | return ( 87 | tableData.data && ( 88 |
89 |

{this.props.title}

90 | 91 |
92 | 93 |
94 | 95 |
96 | 97 | 102 | 103 |
104 | ) 105 | ) 106 | } 107 | } -------------------------------------------------------------------------------- /backend/README.md: -------------------------------------------------------------------------------- 1 | # Express Example 2 | 3 | This repository demonstrates the usage of Sequelize within an [Express](https://expressjs.com) application. 4 | The implemented logic is a simple task tracking tool. 5 | 6 | [![Deploy](https://www.herokucdn.com/deploy/button.svg)](https://heroku.com/deploy) 7 | 8 | ## Starting App 9 | 10 | **Without Migrations** 11 | 12 | ``` 13 | npm install 14 | npm start 15 | ``` 16 | 17 | **With Migrations** 18 | 19 | ``` 20 | npm install 21 | node_modules/.bin/sequelize db:migrate 22 | npm start 23 | ``` 24 | 25 | This will start the application and create an sqlite database in your app dir. 26 | Just open [http://localhost:3000](http://localhost:3000). 27 | 28 | ## Running Tests 29 | 30 | We have added some [Mocha](https://mochajs.org) based test. You can run them by `npm test` 31 | 32 | 33 | ## Setup in Details 34 | 35 | In order to understand how this application has been built, you can find the 36 | executed steps in the following snippet. You should be able to adjust those 37 | steps according to your needs. Please note that the view and the routes aren't 38 | described. You can find those files in the repo. 39 | 40 | #### Express Setup 41 | 42 | First we will create a bare Express App using `express-generator` [Express Generator](https://expressjs.com/en/starter/generator.html) 43 | ```bash 44 | # install express generator globally 45 | npm install -g express-generator 46 | 47 | # create the sample app 48 | mkdir express-example 49 | cd express-example 50 | express -f 51 | 52 | # install all node modules 53 | npm install 54 | ``` 55 | 56 | #### Sequelize Setup 57 | 58 | Now we will install all sequelize related modules. 59 | 60 | ```bash 61 | # install ORM , CLI and SQLite dialect 62 | npm install --save sequelize sequelize-cli sqlite3 63 | 64 | # generate models 65 | node_modules/.bin/sequelize init 66 | node_modules/.bin/sequelize model:create --name User --attributes username:string 67 | node_modules/.bin/sequelize model:create --name Task --attributes title:string 68 | ``` 69 | 70 | We are using `.sequelizerc` setup change config path for migrations. You can read more about this in [migration docs](http://docs.sequelizejs.com/manual/tutorial/migrations.html#the-sequelizerc-file) 71 | 72 | ```js 73 | // .sequelizerc 74 | const path = require('path'); 75 | 76 | module.exports = { 77 | 'config': path.resolve('config', 'config.js') 78 | } 79 | ``` 80 | 81 | You will now have a basic express application with some additional directories 82 | (config, models, migrations). Also you will find two migrations and models. 83 | One for the `User` and one for the `Task`. 84 | 85 | In order to associate the models with each other, you need to change the models 86 | like this: 87 | 88 | ```js 89 | // task.js 90 | // ... 91 | Task.associate = function(models) { 92 | // Using additional options like CASCADE etc for demonstration 93 | // Can also simply do Task.belongsTo(models.User); 94 | Task.belongsTo(models.User, { 95 | onDelete: "CASCADE", 96 | foreignKey: { 97 | allowNull: false 98 | } 99 | }); 100 | } 101 | // ... 102 | ``` 103 | 104 | ```js 105 | // user.js 106 | // ... 107 | User.associate = function(models) { 108 | User.hasMany(models.Task); 109 | } 110 | // ... 111 | ``` 112 | 113 | This association will create an attribute `UserId` in `Task` model. We have to amend our `create-task` migration and add this column. 114 | 115 | ```js 116 | // xxxxxxx-create-task.js 117 | // ... 118 | UserId: { 119 | type: Sequelize.INTEGER, 120 | onDelete: "CASCADE", 121 | allowNull: false, 122 | references: { 123 | model: 'Users', 124 | key: 'id' 125 | } 126 | } 127 | // ... 128 | ``` 129 | 130 | If you want to use the automatic table creation that sequelize provides, 131 | you have to adjust the `bin/www` file to this: 132 | 133 | ```js 134 | #!/usr/bin/env node 135 | 136 | var app = require('../app'); 137 | var debug = require('debug')('init:server'); 138 | var http = require('http'); 139 | var models = require("../models"); 140 | 141 | var port = normalizePort(process.env.PORT || '3000'); 142 | app.set('port', port); 143 | 144 | var server = http.createServer(app); 145 | 146 | // sync() will create all table if they doesn't exist in database 147 | models.sequelize.sync().then(function () { 148 | server.listen(port); 149 | server.on('error', onError); 150 | server.on('listening', onListening); 151 | }); 152 | 153 | function normalizePort(val) { /* ... */ } 154 | function onError(error) { /* ... */ } 155 | function onListening() { /* ... */ } 156 | ``` 157 | 158 | And finally you have to adjust the `config/config.js` to fit your environment. 159 | Once thats done, your database configuration is ready! 160 | -------------------------------------------------------------------------------- /frontend/src/saga/saga.js: -------------------------------------------------------------------------------- 1 | import { router } from 'redux-saga-router'; 2 | import {browserHistory as history } from 'react-router' 3 | import {put, call, take, select, fork, all, takeEvery} from 'redux-saga/effects' 4 | 5 | const routes = { 6 | '/': function* loadingUser(){ 7 | yield take('LOAD_USER_LIST'); 8 | yield call(getTableDatafromDB); 9 | }, 10 | 11 | '/:id': function* loadingTask(){ 12 | yield take('LOAD_TASK_LIST'); 13 | yield call(getTableTasksfromDB); 14 | } 15 | } 16 | 17 | function* createUser(){ 18 | yield takeEvery('CREATE_USER', CreateNewUserFinish); 19 | } 20 | 21 | function* updateUser(){ 22 | yield takeEvery('UPDATE_USER', UpdateUserFinish); 23 | } 24 | 25 | function* deleteUser(){ 26 | yield takeEvery('DELETE_USER', DeleteUserFinish); 27 | } 28 | 29 | function* createTask(){ 30 | yield takeEvery('CREATE_NEW_TASK', CreateNewTaskFinish); 31 | } 32 | 33 | function* updateTask(){ 34 | yield takeEvery('UPDATE_TASK', UpdateTaskFinish); 35 | } 36 | 37 | function* deleteTask(){ 38 | yield takeEvery('DELETE_TASK', DeleteTaskFinish); 39 | } 40 | 41 | const fetchUsers = () => { 42 | return fetch('http://localhost:3001').then(function(response) { 43 | return response.json().then(function(json) { 44 | return json.users; 45 | }) 46 | }) 47 | }; 48 | 49 | const createnewUser = () => { 50 | return fetch('http://localhost:3001/users/create', { 51 | method: 'post' 52 | }).then(function(response) { 53 | if(response.ok){ 54 | return fetchUsers(); 55 | } 56 | }) 57 | }; 58 | 59 | const updateUserInfo = (userid, firstname, lastname, birthday) => { 60 | let bodydata = JSON.stringify({ 61 | userid:userid, firstname:firstname, lastname:lastname, birthday:birthday 62 | }); 63 | return fetch('http://localhost:3001/users/update', { 64 | method: 'post', 65 | headers: { 66 | 'Accept': 'application/json', 67 | 'Content-Type': 'application/json' 68 | }, 69 | body: bodydata 70 | }).then(function(response) { 71 | if(response.ok){ 72 | return fetchUsers(); 73 | } 74 | }) 75 | }; 76 | 77 | const deleteUserInfo = (userid) => { 78 | return fetch('http://localhost:3001/users/'+userid+'/destroy').then(function(response) { 79 | if(response.ok){ 80 | return fetchUsers(); 81 | } 82 | }) 83 | }; 84 | 85 | const createnewTask = (user_id) => { 86 | return fetch('http://localhost:3001/users/'+user_id+'/tasks/create', { 87 | method: 'post' 88 | }).then(function(response) { 89 | if(response.ok){ 90 | return fetchTasks(user_id); 91 | } 92 | }) 93 | }; 94 | 95 | const UpdatingTask = (userid, task_id, title, overview) => { 96 | let bodydata = JSON.stringify({ 97 | taskid: task_id, title:title, overview:overview 98 | }); 99 | 100 | return fetch('http://localhost:3001/users/'+userid+'/tasks/update', { 101 | method: 'post', 102 | headers: { 103 | 'Accept': 'application/json', 104 | 'Content-Type': 'application/json' 105 | }, 106 | body: bodydata 107 | }).then(function(response) { 108 | if(response.ok){ 109 | return fetchTasks(userid); 110 | } 111 | }) 112 | }; 113 | 114 | const DeletingTask = (userid, task_id) => { 115 | return fetch('http://localhost:3001/users/'+userid+'/tasks/'+task_id+'/destroy').then(function(response) { 116 | if(response.ok){ 117 | return fetchTasks(userid); 118 | } 119 | }) 120 | }; 121 | 122 | 123 | const fetchTasks = (user_id) => { 124 | return fetch('http://localhost:3001/'+user_id).then(function(response) { 125 | return response.json().then(function(json) { 126 | return json.tasks; 127 | }) 128 | }) 129 | }; 130 | 131 | export function* getTableDatafromDB(){ 132 | try{ 133 | const users = yield fetchUsers(); 134 | yield put({type: 'DATA_LOADED', data: users, loading: false}) 135 | }catch(error){ 136 | yield put({type: 'DATA_LOAD_FAILURE', error}) 137 | } 138 | } 139 | 140 | export function* CreateNewUserFinish(){ 141 | try{ 142 | const users = yield createnewUser(); 143 | yield put({type: 'DATA_LOADED', data: users, loading: false}) 144 | }catch(error){ 145 | yield put({type: 'DATA_LOAD_FAILURE', error}) 146 | } 147 | } 148 | 149 | export function* UpdateUserFinish(action){ 150 | try{ 151 | const users = yield updateUserInfo(action.user_id, action.firstname, action.lastname, action.birthday); 152 | yield put({type: 'DATA_LOADED', data: users, loading: false}) 153 | }catch(error){ 154 | yield put({type: 'DATA_LOAD_FAILURE', error}) 155 | } 156 | } 157 | 158 | export function* DeleteUserFinish(action){ 159 | try{ 160 | const users = yield deleteUserInfo(action.user_id); 161 | yield put({type: 'DATA_LOADED', data: users, loading: false}) 162 | }catch(error){ 163 | yield put({type: 'DATA_LOAD_FAILURE', error}) 164 | } 165 | } 166 | 167 | export function* CreateNewTaskFinish(){ 168 | try{ 169 | const state = yield select(); 170 | const tasks = yield createnewTask(state.mainReducer.user_id); 171 | yield put({type: 'DATA_LOADED', data: tasks, loading: false}) 172 | }catch(error){ 173 | yield put({type: 'DATA_LOAD_FAILURE', error}) 174 | } 175 | } 176 | 177 | export function* UpdateTaskFinish(action){ 178 | try{ 179 | const state = yield select(); 180 | const tasks = yield UpdatingTask(state.mainReducer.user_id, action.task_id, action.title, action.overview); 181 | yield put({type: 'DATA_LOADED', data: tasks, loading: false}) 182 | }catch(error){ 183 | yield put({type: 'DATA_LOAD_FAILURE', error}) 184 | } 185 | } 186 | 187 | export function* DeleteTaskFinish(action){ 188 | try{ 189 | const state = yield select(); 190 | const tasks = yield DeletingTask(state.mainReducer.user_id, action.task_id); 191 | yield put({type: 'DATA_LOADED', data: tasks, loading: false}) 192 | }catch(error){ 193 | yield put({type: 'DATA_LOAD_FAILURE', error}) 194 | } 195 | } 196 | 197 | export function* getTableTasksfromDB(){ 198 | try{ 199 | const state = yield select(); 200 | const tasks = yield fetchTasks(state.mainReducer.user_id); 201 | yield put({type: 'DATA_LOADED', data: tasks, loading: false}) 202 | }catch(error){ 203 | yield put({type: 'DATA_LOAD_FAILURE', error}) 204 | } 205 | } 206 | 207 | export function* mainSaga(){ 208 | yield all([ 209 | fork(router, history, routes), 210 | fork(createUser), 211 | fork(updateUser), 212 | fork(deleteUser), 213 | fork(createTask), 214 | fork(updateTask), 215 | fork(deleteTask) 216 | ]) 217 | } -------------------------------------------------------------------------------- /backend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "express-Task", 3 | "version": "0.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@types/babel-types": { 8 | "version": "7.0.1", 9 | "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.1.tgz", 10 | "integrity": "sha512-EkcOk09rjhivbovP8WreGRbXW20YRfe/qdgXOGq3it3u3aAOWDRNsQhL/XPAWFF7zhZZ+uR+nT+3b+TCkIap1w==" 11 | }, 12 | "@types/babylon": { 13 | "version": "6.16.2", 14 | "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.2.tgz", 15 | "integrity": "sha512-+Jty46mPaWe1VAyZbfvgJM4BAdklLWxrT5tc/RjvCgLrtk6gzRY6AOnoWFv4p6hVxhJshDdr2hGVn56alBp97Q==", 16 | "requires": { 17 | "@types/babel-types": "7.0.1" 18 | } 19 | }, 20 | "@types/geojson": { 21 | "version": "1.0.6", 22 | "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-1.0.6.tgz", 23 | "integrity": "sha512-Xqg/lIZMrUd0VRmSRbCAewtwGZiAk3mEUDvV4op1tGl+LvyPcb/MIOSxTl9z+9+J+R4/vpjiCAT4xeKzH9ji1w==" 24 | }, 25 | "abbrev": { 26 | "version": "1.1.1", 27 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 28 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" 29 | }, 30 | "accepts": { 31 | "version": "1.3.5", 32 | "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", 33 | "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", 34 | "requires": { 35 | "mime-types": "2.1.18", 36 | "negotiator": "0.6.1" 37 | } 38 | }, 39 | "acorn": { 40 | "version": "3.3.0", 41 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-3.3.0.tgz", 42 | "integrity": "sha1-ReN/s56No/JbruP/U2niu18iAXo=" 43 | }, 44 | "acorn-globals": { 45 | "version": "3.1.0", 46 | "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-3.1.0.tgz", 47 | "integrity": "sha1-/YJw9x+7SZawBPqIDuXUZXOnMb8=", 48 | "requires": { 49 | "acorn": "4.0.13" 50 | }, 51 | "dependencies": { 52 | "acorn": { 53 | "version": "4.0.13", 54 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 55 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" 56 | } 57 | } 58 | }, 59 | "align-text": { 60 | "version": "0.1.4", 61 | "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz", 62 | "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=", 63 | "requires": { 64 | "kind-of": "3.2.2", 65 | "longest": "1.0.1", 66 | "repeat-string": "1.6.1" 67 | } 68 | }, 69 | "ansi-regex": { 70 | "version": "2.1.1", 71 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", 72 | "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=" 73 | }, 74 | "array-flatten": { 75 | "version": "1.1.1", 76 | "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", 77 | "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" 78 | }, 79 | "asap": { 80 | "version": "2.0.6", 81 | "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", 82 | "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=" 83 | }, 84 | "async": { 85 | "version": "1.5.2", 86 | "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", 87 | "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", 88 | "dev": true 89 | }, 90 | "babel-runtime": { 91 | "version": "6.26.0", 92 | "resolved": "https://registry.npmjs.org/babel-runtime/-/babel-runtime-6.26.0.tgz", 93 | "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", 94 | "requires": { 95 | "core-js": "2.5.4", 96 | "regenerator-runtime": "0.11.1" 97 | } 98 | }, 99 | "babel-types": { 100 | "version": "6.26.0", 101 | "resolved": "https://registry.npmjs.org/babel-types/-/babel-types-6.26.0.tgz", 102 | "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", 103 | "requires": { 104 | "babel-runtime": "6.26.0", 105 | "esutils": "2.0.2", 106 | "lodash": "4.17.5", 107 | "to-fast-properties": "1.0.3" 108 | } 109 | }, 110 | "babylon": { 111 | "version": "6.18.0", 112 | "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", 113 | "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==" 114 | }, 115 | "balanced-match": { 116 | "version": "1.0.0", 117 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 118 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 119 | "dev": true 120 | }, 121 | "basic-auth": { 122 | "version": "2.0.0", 123 | "resolved": "https://registry.npmjs.org/basic-auth/-/basic-auth-2.0.0.tgz", 124 | "integrity": "sha1-AV2z81PgLlY3d1X5YnQuiYHnu7o=", 125 | "requires": { 126 | "safe-buffer": "5.1.1" 127 | } 128 | }, 129 | "bluebird": { 130 | "version": "3.5.1", 131 | "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.5.1.tgz", 132 | "integrity": "sha512-MKiLiV+I1AA596t9w1sQJ8jkiSr5+ZKi0WKrYGUn6d1Fx+Ij4tIj+m2WMQSGczs5jZVxV339chE8iwk6F64wjA==" 133 | }, 134 | "body-parser": { 135 | "version": "1.18.2", 136 | "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.18.2.tgz", 137 | "integrity": "sha1-h2eKGdhLR9hZuDGZvVm84iKxBFQ=", 138 | "requires": { 139 | "bytes": "3.0.0", 140 | "content-type": "1.0.4", 141 | "debug": "2.6.9", 142 | "depd": "1.1.2", 143 | "http-errors": "1.6.3", 144 | "iconv-lite": "0.4.19", 145 | "on-finished": "2.3.0", 146 | "qs": "6.5.1", 147 | "raw-body": "2.3.2", 148 | "type-is": "1.6.16" 149 | }, 150 | "dependencies": { 151 | "debug": { 152 | "version": "2.6.9", 153 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 154 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 155 | "requires": { 156 | "ms": "2.0.0" 157 | } 158 | } 159 | } 160 | }, 161 | "brace-expansion": { 162 | "version": "1.1.11", 163 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 164 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 165 | "dev": true, 166 | "requires": { 167 | "balanced-match": "1.0.0", 168 | "concat-map": "0.0.1" 169 | } 170 | }, 171 | "browser-stdout": { 172 | "version": "1.3.0", 173 | "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.0.tgz", 174 | "integrity": "sha1-81HTKWnTL6XXpVZxVCY9korjvR8=", 175 | "dev": true 176 | }, 177 | "buffer-writer": { 178 | "version": "1.0.1", 179 | "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-1.0.1.tgz", 180 | "integrity": "sha1-Iqk2kB4wKa/NdUfrRIfOtpejvwg=" 181 | }, 182 | "builtin-modules": { 183 | "version": "1.1.1", 184 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 185 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=" 186 | }, 187 | "bytes": { 188 | "version": "3.0.0", 189 | "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", 190 | "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" 191 | }, 192 | "camelcase": { 193 | "version": "1.2.1", 194 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-1.2.1.tgz", 195 | "integrity": "sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk=" 196 | }, 197 | "center-align": { 198 | "version": "0.1.3", 199 | "resolved": "https://registry.npmjs.org/center-align/-/center-align-0.1.3.tgz", 200 | "integrity": "sha1-qg0yYptu6XIgBBHL1EYckHvCt60=", 201 | "requires": { 202 | "align-text": "0.1.4", 203 | "lazy-cache": "1.0.4" 204 | } 205 | }, 206 | "character-parser": { 207 | "version": "2.2.0", 208 | "resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz", 209 | "integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=", 210 | "requires": { 211 | "is-regex": "1.0.4" 212 | } 213 | }, 214 | "clean-css": { 215 | "version": "4.1.11", 216 | "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.1.11.tgz", 217 | "integrity": "sha1-Ls3xRaujj1R0DybO/Q/z4D4SXWo=", 218 | "requires": { 219 | "source-map": "0.5.7" 220 | } 221 | }, 222 | "cli-color": { 223 | "version": "1.2.0", 224 | "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-1.2.0.tgz", 225 | "integrity": "sha1-OlrnT9drYmevZm5p4q+70B3vNNE=", 226 | "requires": { 227 | "ansi-regex": "2.1.1", 228 | "d": "1.0.0", 229 | "es5-ext": "0.10.42", 230 | "es6-iterator": "2.0.3", 231 | "memoizee": "0.4.12", 232 | "timers-ext": "0.1.5" 233 | } 234 | }, 235 | "cliui": { 236 | "version": "2.1.0", 237 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-2.1.0.tgz", 238 | "integrity": "sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE=", 239 | "requires": { 240 | "center-align": "0.1.3", 241 | "right-align": "0.1.3", 242 | "wordwrap": "0.0.2" 243 | } 244 | }, 245 | "code-point-at": { 246 | "version": "1.1.0", 247 | "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", 248 | "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=" 249 | }, 250 | "combined-stream": { 251 | "version": "1.0.6", 252 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", 253 | "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", 254 | "dev": true, 255 | "requires": { 256 | "delayed-stream": "1.0.0" 257 | } 258 | }, 259 | "commander": { 260 | "version": "2.15.1", 261 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.15.1.tgz", 262 | "integrity": "sha512-VlfT9F3V0v+jr4yxPc5gg9s62/fIVWsd2Bk2iD435um1NlGMYdVCq+MjcXnhYq2icNOizHr1kK+5TI6H0Hy0ag==" 263 | }, 264 | "component-emitter": { 265 | "version": "1.2.1", 266 | "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz", 267 | "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=", 268 | "dev": true 269 | }, 270 | "concat-map": { 271 | "version": "0.0.1", 272 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 273 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 274 | "dev": true 275 | }, 276 | "config-chain": { 277 | "version": "1.1.11", 278 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.11.tgz", 279 | "integrity": "sha1-q6CXR9++TD5w52am5BWG4YWfxvI=", 280 | "requires": { 281 | "ini": "1.3.5", 282 | "proto-list": "1.2.4" 283 | } 284 | }, 285 | "constantinople": { 286 | "version": "3.1.2", 287 | "resolved": "https://registry.npmjs.org/constantinople/-/constantinople-3.1.2.tgz", 288 | "integrity": "sha512-yePcBqEFhLOqSBtwYOGGS1exHo/s1xjekXiinh4itpNQGCu4KA1euPh1fg07N2wMITZXQkBz75Ntdt1ctGZouw==", 289 | "requires": { 290 | "@types/babel-types": "7.0.1", 291 | "@types/babylon": "6.16.2", 292 | "babel-types": "6.26.0", 293 | "babylon": "6.18.0" 294 | } 295 | }, 296 | "content-disposition": { 297 | "version": "0.5.2", 298 | "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz", 299 | "integrity": "sha1-DPaLud318r55YcOoUXjLhdunjLQ=" 300 | }, 301 | "content-type": { 302 | "version": "1.0.4", 303 | "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", 304 | "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==" 305 | }, 306 | "cookie": { 307 | "version": "0.3.1", 308 | "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", 309 | "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=" 310 | }, 311 | "cookie-parser": { 312 | "version": "1.4.3", 313 | "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.3.tgz", 314 | "integrity": "sha1-D+MfoZ0AC5X0qt8fU/3CuKIDuqU=", 315 | "requires": { 316 | "cookie": "0.3.1", 317 | "cookie-signature": "1.0.6" 318 | } 319 | }, 320 | "cookie-signature": { 321 | "version": "1.0.6", 322 | "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", 323 | "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" 324 | }, 325 | "cookiejar": { 326 | "version": "2.1.1", 327 | "resolved": "https://registry.npmjs.org/cookiejar/-/cookiejar-2.1.1.tgz", 328 | "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", 329 | "dev": true 330 | }, 331 | "core-js": { 332 | "version": "2.5.4", 333 | "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.5.4.tgz", 334 | "integrity": "sha1-8si/GB8qgLkvNgEhQpzmOi8K6uA=" 335 | }, 336 | "core-util-is": { 337 | "version": "1.0.2", 338 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 339 | "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", 340 | "dev": true 341 | }, 342 | "cross-env": { 343 | "version": "3.2.4", 344 | "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-3.2.4.tgz", 345 | "integrity": "sha1-ngWF8neGTtQhznVvgamA/w1piro=", 346 | "dev": true, 347 | "requires": { 348 | "cross-spawn": "5.1.0", 349 | "is-windows": "1.0.2" 350 | } 351 | }, 352 | "cross-spawn": { 353 | "version": "5.1.0", 354 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", 355 | "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", 356 | "requires": { 357 | "lru-cache": "4.1.2", 358 | "shebang-command": "1.2.0", 359 | "which": "1.3.0" 360 | }, 361 | "dependencies": { 362 | "lru-cache": { 363 | "version": "4.1.2", 364 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", 365 | "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", 366 | "requires": { 367 | "pseudomap": "1.0.2", 368 | "yallist": "2.1.2" 369 | } 370 | } 371 | } 372 | }, 373 | "d": { 374 | "version": "1.0.0", 375 | "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", 376 | "integrity": "sha1-dUu1v+VUUdpppYuU1F9MWwRi1Y8=", 377 | "requires": { 378 | "es5-ext": "0.10.42" 379 | } 380 | }, 381 | "debug": { 382 | "version": "3.1.0", 383 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 384 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 385 | "requires": { 386 | "ms": "2.0.0" 387 | } 388 | }, 389 | "decamelize": { 390 | "version": "1.2.0", 391 | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", 392 | "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" 393 | }, 394 | "delayed-stream": { 395 | "version": "1.0.0", 396 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 397 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", 398 | "dev": true 399 | }, 400 | "depd": { 401 | "version": "1.1.2", 402 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", 403 | "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" 404 | }, 405 | "destroy": { 406 | "version": "1.0.4", 407 | "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", 408 | "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" 409 | }, 410 | "diff": { 411 | "version": "3.2.0", 412 | "resolved": "https://registry.npmjs.org/diff/-/diff-3.2.0.tgz", 413 | "integrity": "sha1-yc45Okt8vQsFinJck98pkCeGj/k=", 414 | "dev": true 415 | }, 416 | "doctypes": { 417 | "version": "1.1.0", 418 | "resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz", 419 | "integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk=" 420 | }, 421 | "dottie": { 422 | "version": "1.1.1", 423 | "resolved": "https://registry.npmjs.org/dottie/-/dottie-1.1.1.tgz", 424 | "integrity": "sha1-RcKj9IvWUo7u0memmoSOqspvqmo=" 425 | }, 426 | "editorconfig": { 427 | "version": "0.13.3", 428 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-0.13.3.tgz", 429 | "integrity": "sha512-WkjsUNVCu+ITKDj73QDvi0trvpdDWdkDyHybDGSXPfekLCqwmpD7CP7iPbvBgosNuLcI96XTDwNa75JyFl7tEQ==", 430 | "requires": { 431 | "bluebird": "3.5.1", 432 | "commander": "2.15.1", 433 | "lru-cache": "3.2.0", 434 | "semver": "5.5.0", 435 | "sigmund": "1.0.1" 436 | }, 437 | "dependencies": { 438 | "semver": { 439 | "version": "5.5.0", 440 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 441 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" 442 | } 443 | } 444 | }, 445 | "ee-first": { 446 | "version": "1.1.1", 447 | "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", 448 | "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" 449 | }, 450 | "encodeurl": { 451 | "version": "1.0.2", 452 | "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", 453 | "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" 454 | }, 455 | "error-ex": { 456 | "version": "1.3.1", 457 | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", 458 | "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", 459 | "requires": { 460 | "is-arrayish": "0.2.1" 461 | } 462 | }, 463 | "es5-ext": { 464 | "version": "0.10.42", 465 | "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.42.tgz", 466 | "integrity": "sha512-AJxO1rmPe1bDEfSR6TJ/FgMFYuTBhR5R57KW58iCkYACMyFbrkqVyzXSurYoScDGvgyMpk7uRF/lPUPPTmsRSA==", 467 | "requires": { 468 | "es6-iterator": "2.0.3", 469 | "es6-symbol": "3.1.1", 470 | "next-tick": "1.0.0" 471 | } 472 | }, 473 | "es6-iterator": { 474 | "version": "2.0.3", 475 | "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", 476 | "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", 477 | "requires": { 478 | "d": "1.0.0", 479 | "es5-ext": "0.10.42", 480 | "es6-symbol": "3.1.1" 481 | } 482 | }, 483 | "es6-symbol": { 484 | "version": "3.1.1", 485 | "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", 486 | "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", 487 | "requires": { 488 | "d": "1.0.0", 489 | "es5-ext": "0.10.42" 490 | } 491 | }, 492 | "es6-weak-map": { 493 | "version": "2.0.2", 494 | "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.2.tgz", 495 | "integrity": "sha1-XjqzIlH/0VOKH45f+hNXdy+S2W8=", 496 | "requires": { 497 | "d": "1.0.0", 498 | "es5-ext": "0.10.42", 499 | "es6-iterator": "2.0.3", 500 | "es6-symbol": "3.1.1" 501 | } 502 | }, 503 | "escape-html": { 504 | "version": "1.0.3", 505 | "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", 506 | "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" 507 | }, 508 | "escape-string-regexp": { 509 | "version": "1.0.5", 510 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 511 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 512 | "dev": true 513 | }, 514 | "esutils": { 515 | "version": "2.0.2", 516 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", 517 | "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" 518 | }, 519 | "etag": { 520 | "version": "1.8.1", 521 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", 522 | "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" 523 | }, 524 | "event-emitter": { 525 | "version": "0.3.5", 526 | "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", 527 | "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", 528 | "requires": { 529 | "d": "1.0.0", 530 | "es5-ext": "0.10.42" 531 | } 532 | }, 533 | "execa": { 534 | "version": "0.7.0", 535 | "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", 536 | "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", 537 | "requires": { 538 | "cross-spawn": "5.1.0", 539 | "get-stream": "3.0.0", 540 | "is-stream": "1.1.0", 541 | "npm-run-path": "2.0.2", 542 | "p-finally": "1.0.0", 543 | "signal-exit": "3.0.2", 544 | "strip-eof": "1.0.0" 545 | } 546 | }, 547 | "expect.js": { 548 | "version": "0.3.1", 549 | "resolved": "https://registry.npmjs.org/expect.js/-/expect.js-0.3.1.tgz", 550 | "integrity": "sha1-sKWaDS7/VDdUTr8M6qYBWEHQm1s=", 551 | "dev": true 552 | }, 553 | "express": { 554 | "version": "4.16.3", 555 | "resolved": "https://registry.npmjs.org/express/-/express-4.16.3.tgz", 556 | "integrity": "sha1-avilAjUNsyRuzEvs9rWjTSL37VM=", 557 | "requires": { 558 | "accepts": "1.3.5", 559 | "array-flatten": "1.1.1", 560 | "body-parser": "1.18.2", 561 | "content-disposition": "0.5.2", 562 | "content-type": "1.0.4", 563 | "cookie": "0.3.1", 564 | "cookie-signature": "1.0.6", 565 | "debug": "2.6.9", 566 | "depd": "1.1.2", 567 | "encodeurl": "1.0.2", 568 | "escape-html": "1.0.3", 569 | "etag": "1.8.1", 570 | "finalhandler": "1.1.1", 571 | "fresh": "0.5.2", 572 | "merge-descriptors": "1.0.1", 573 | "methods": "1.1.2", 574 | "on-finished": "2.3.0", 575 | "parseurl": "1.3.2", 576 | "path-to-regexp": "0.1.7", 577 | "proxy-addr": "2.0.3", 578 | "qs": "6.5.1", 579 | "range-parser": "1.2.0", 580 | "safe-buffer": "5.1.1", 581 | "send": "0.16.2", 582 | "serve-static": "1.13.2", 583 | "setprototypeof": "1.1.0", 584 | "statuses": "1.4.0", 585 | "type-is": "1.6.16", 586 | "utils-merge": "1.0.1", 587 | "vary": "1.1.2" 588 | }, 589 | "dependencies": { 590 | "debug": { 591 | "version": "2.6.9", 592 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 593 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 594 | "requires": { 595 | "ms": "2.0.0" 596 | } 597 | }, 598 | "statuses": { 599 | "version": "1.4.0", 600 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 601 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 602 | } 603 | } 604 | }, 605 | "extend": { 606 | "version": "3.0.1", 607 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", 608 | "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", 609 | "dev": true 610 | }, 611 | "finalhandler": { 612 | "version": "1.1.1", 613 | "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.1.tgz", 614 | "integrity": "sha512-Y1GUDo39ez4aHAw7MysnUD5JzYX+WaIj8I57kO3aEPT1fFRL4sr7mjei97FgnwhAyyzRYmQZaTHb2+9uZ1dPtg==", 615 | "requires": { 616 | "debug": "2.6.9", 617 | "encodeurl": "1.0.2", 618 | "escape-html": "1.0.3", 619 | "on-finished": "2.3.0", 620 | "parseurl": "1.3.2", 621 | "statuses": "1.4.0", 622 | "unpipe": "1.0.0" 623 | }, 624 | "dependencies": { 625 | "debug": { 626 | "version": "2.6.9", 627 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 628 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 629 | "requires": { 630 | "ms": "2.0.0" 631 | } 632 | }, 633 | "statuses": { 634 | "version": "1.4.0", 635 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 636 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 637 | } 638 | } 639 | }, 640 | "find-up": { 641 | "version": "2.1.0", 642 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", 643 | "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", 644 | "requires": { 645 | "locate-path": "2.0.0" 646 | } 647 | }, 648 | "form-data": { 649 | "version": "1.0.0-rc4", 650 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-1.0.0-rc4.tgz", 651 | "integrity": "sha1-BaxrwiIntD5EYfSIFhVUaZ1Pi14=", 652 | "dev": true, 653 | "requires": { 654 | "async": "1.5.2", 655 | "combined-stream": "1.0.6", 656 | "mime-types": "2.1.18" 657 | } 658 | }, 659 | "formidable": { 660 | "version": "1.2.1", 661 | "resolved": "https://registry.npmjs.org/formidable/-/formidable-1.2.1.tgz", 662 | "integrity": "sha512-Fs9VRguL0gqGHkXS5GQiMCr1VhZBxz0JnJs4JmMp/2jL18Fmbzvv7vOFRU+U8TBkHEE/CX1qDXzJplVULgsLeg==", 663 | "dev": true 664 | }, 665 | "forwarded": { 666 | "version": "0.1.2", 667 | "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", 668 | "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" 669 | }, 670 | "fresh": { 671 | "version": "0.5.2", 672 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", 673 | "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" 674 | }, 675 | "fs-extra": { 676 | "version": "4.0.3", 677 | "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-4.0.3.tgz", 678 | "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", 679 | "requires": { 680 | "graceful-fs": "4.1.11", 681 | "jsonfile": "4.0.0", 682 | "universalify": "0.1.1" 683 | } 684 | }, 685 | "fs.realpath": { 686 | "version": "1.0.0", 687 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 688 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 689 | "dev": true 690 | }, 691 | "function-bind": { 692 | "version": "1.1.1", 693 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 694 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" 695 | }, 696 | "generic-pool": { 697 | "version": "2.4.3", 698 | "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.3.tgz", 699 | "integrity": "sha1-eAw29p360FpaBF3Te+etyhGk9v8=" 700 | }, 701 | "get-caller-file": { 702 | "version": "1.0.2", 703 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz", 704 | "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=" 705 | }, 706 | "get-stream": { 707 | "version": "3.0.0", 708 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", 709 | "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" 710 | }, 711 | "glob": { 712 | "version": "7.1.1", 713 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.1.tgz", 714 | "integrity": "sha1-gFIR3wT6rxxjo2ADBs31reULLsg=", 715 | "dev": true, 716 | "requires": { 717 | "fs.realpath": "1.0.0", 718 | "inflight": "1.0.6", 719 | "inherits": "2.0.3", 720 | "minimatch": "3.0.4", 721 | "once": "1.4.0", 722 | "path-is-absolute": "1.0.1" 723 | } 724 | }, 725 | "graceful-fs": { 726 | "version": "4.1.11", 727 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", 728 | "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=" 729 | }, 730 | "graceful-readlink": { 731 | "version": "1.0.1", 732 | "resolved": "https://registry.npmjs.org/graceful-readlink/-/graceful-readlink-1.0.1.tgz", 733 | "integrity": "sha1-TK+tdrxi8C+gObL5Tpo906ORpyU=", 734 | "dev": true 735 | }, 736 | "growl": { 737 | "version": "1.9.2", 738 | "resolved": "https://registry.npmjs.org/growl/-/growl-1.9.2.tgz", 739 | "integrity": "sha1-Dqd0NxXbjY3ixe3hd14bRayFwC8=", 740 | "dev": true 741 | }, 742 | "has": { 743 | "version": "1.0.1", 744 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.1.tgz", 745 | "integrity": "sha1-hGFzP1OLCDfJNh45qauelwTcLyg=", 746 | "requires": { 747 | "function-bind": "1.1.1" 748 | } 749 | }, 750 | "has-flag": { 751 | "version": "1.0.0", 752 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-1.0.0.tgz", 753 | "integrity": "sha1-nZ55MWXOAXoA8AQYxD+UKnsdEfo=", 754 | "dev": true 755 | }, 756 | "he": { 757 | "version": "1.1.1", 758 | "resolved": "https://registry.npmjs.org/he/-/he-1.1.1.tgz", 759 | "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", 760 | "dev": true 761 | }, 762 | "hosted-git-info": { 763 | "version": "2.6.0", 764 | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", 765 | "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==" 766 | }, 767 | "http-errors": { 768 | "version": "1.6.3", 769 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", 770 | "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", 771 | "requires": { 772 | "depd": "1.1.2", 773 | "inherits": "2.0.3", 774 | "setprototypeof": "1.1.0", 775 | "statuses": "1.5.0" 776 | } 777 | }, 778 | "iconv-lite": { 779 | "version": "0.4.19", 780 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz", 781 | "integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ==" 782 | }, 783 | "inflection": { 784 | "version": "1.12.0", 785 | "resolved": "https://registry.npmjs.org/inflection/-/inflection-1.12.0.tgz", 786 | "integrity": "sha1-ogCTVlbW9fa8TcdQLhrstwMihBY=" 787 | }, 788 | "inflight": { 789 | "version": "1.0.6", 790 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 791 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 792 | "dev": true, 793 | "requires": { 794 | "once": "1.4.0", 795 | "wrappy": "1.0.2" 796 | } 797 | }, 798 | "inherits": { 799 | "version": "2.0.3", 800 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", 801 | "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" 802 | }, 803 | "ini": { 804 | "version": "1.3.5", 805 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", 806 | "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==" 807 | }, 808 | "invert-kv": { 809 | "version": "1.0.0", 810 | "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", 811 | "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=" 812 | }, 813 | "ipaddr.js": { 814 | "version": "1.6.0", 815 | "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.6.0.tgz", 816 | "integrity": "sha1-4/o1e3c9phnybpXwSdBVxyeW+Gs=" 817 | }, 818 | "is-arrayish": { 819 | "version": "0.2.1", 820 | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", 821 | "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" 822 | }, 823 | "is-buffer": { 824 | "version": "1.1.6", 825 | "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", 826 | "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" 827 | }, 828 | "is-builtin-module": { 829 | "version": "1.0.0", 830 | "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", 831 | "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", 832 | "requires": { 833 | "builtin-modules": "1.1.1" 834 | } 835 | }, 836 | "is-expression": { 837 | "version": "3.0.0", 838 | "resolved": "https://registry.npmjs.org/is-expression/-/is-expression-3.0.0.tgz", 839 | "integrity": "sha1-Oayqa+f9HzRx3ELHQW5hwkMXrJ8=", 840 | "requires": { 841 | "acorn": "4.0.13", 842 | "object-assign": "4.1.0" 843 | }, 844 | "dependencies": { 845 | "acorn": { 846 | "version": "4.0.13", 847 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-4.0.13.tgz", 848 | "integrity": "sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c=" 849 | } 850 | } 851 | }, 852 | "is-fullwidth-code-point": { 853 | "version": "1.0.0", 854 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", 855 | "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", 856 | "requires": { 857 | "number-is-nan": "1.0.1" 858 | } 859 | }, 860 | "is-promise": { 861 | "version": "2.1.0", 862 | "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", 863 | "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" 864 | }, 865 | "is-regex": { 866 | "version": "1.0.4", 867 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", 868 | "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", 869 | "requires": { 870 | "has": "1.0.1" 871 | } 872 | }, 873 | "is-stream": { 874 | "version": "1.1.0", 875 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", 876 | "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" 877 | }, 878 | "is-windows": { 879 | "version": "1.0.2", 880 | "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", 881 | "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", 882 | "dev": true 883 | }, 884 | "isarray": { 885 | "version": "1.0.0", 886 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", 887 | "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", 888 | "dev": true 889 | }, 890 | "isexe": { 891 | "version": "2.0.0", 892 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 893 | "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" 894 | }, 895 | "js-beautify": { 896 | "version": "1.7.5", 897 | "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.7.5.tgz", 898 | "integrity": "sha512-9OhfAqGOrD7hoQBLJMTA+BKuKmoEtTJXzZ7WDF/9gvjtey1koVLuZqIY6c51aPDjbNdNtIXAkiWKVhziawE9Og==", 899 | "requires": { 900 | "config-chain": "1.1.11", 901 | "editorconfig": "0.13.3", 902 | "mkdirp": "0.5.1", 903 | "nopt": "3.0.6" 904 | } 905 | }, 906 | "js-string-escape": { 907 | "version": "1.0.1", 908 | "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", 909 | "integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8=" 910 | }, 911 | "js-stringify": { 912 | "version": "1.0.2", 913 | "resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz", 914 | "integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds=" 915 | }, 916 | "json3": { 917 | "version": "3.3.2", 918 | "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", 919 | "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", 920 | "dev": true 921 | }, 922 | "jsonfile": { 923 | "version": "4.0.0", 924 | "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", 925 | "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", 926 | "requires": { 927 | "graceful-fs": "4.1.11" 928 | } 929 | }, 930 | "jstransformer": { 931 | "version": "1.0.0", 932 | "resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz", 933 | "integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=", 934 | "requires": { 935 | "is-promise": "2.1.0", 936 | "promise": "7.3.1" 937 | } 938 | }, 939 | "kind-of": { 940 | "version": "3.2.2", 941 | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", 942 | "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", 943 | "requires": { 944 | "is-buffer": "1.1.6" 945 | } 946 | }, 947 | "lazy-cache": { 948 | "version": "1.0.4", 949 | "resolved": "https://registry.npmjs.org/lazy-cache/-/lazy-cache-1.0.4.tgz", 950 | "integrity": "sha1-odePw6UEdMuAhF07O24dpJpEbo4=" 951 | }, 952 | "lcid": { 953 | "version": "1.0.0", 954 | "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", 955 | "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", 956 | "requires": { 957 | "invert-kv": "1.0.0" 958 | } 959 | }, 960 | "load-json-file": { 961 | "version": "2.0.0", 962 | "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", 963 | "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", 964 | "requires": { 965 | "graceful-fs": "4.1.11", 966 | "parse-json": "2.2.0", 967 | "pify": "2.3.0", 968 | "strip-bom": "3.0.0" 969 | } 970 | }, 971 | "locate-path": { 972 | "version": "2.0.0", 973 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", 974 | "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", 975 | "requires": { 976 | "p-locate": "2.0.0", 977 | "path-exists": "3.0.0" 978 | } 979 | }, 980 | "lodash": { 981 | "version": "4.17.5", 982 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz", 983 | "integrity": "sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw==" 984 | }, 985 | "lodash._baseassign": { 986 | "version": "3.2.0", 987 | "resolved": "https://registry.npmjs.org/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz", 988 | "integrity": "sha1-jDigmVAPIVrQnlnxci/QxSv+Ck4=", 989 | "dev": true, 990 | "requires": { 991 | "lodash._basecopy": "3.0.1", 992 | "lodash.keys": "3.1.2" 993 | } 994 | }, 995 | "lodash._basecopy": { 996 | "version": "3.0.1", 997 | "resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz", 998 | "integrity": "sha1-jaDmqHbPNEwK2KVIghEd08XHyjY=", 999 | "dev": true 1000 | }, 1001 | "lodash._basecreate": { 1002 | "version": "3.0.3", 1003 | "resolved": "https://registry.npmjs.org/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz", 1004 | "integrity": "sha1-G8ZhYU2qf8MRt9A78WgGoCE8+CE=", 1005 | "dev": true 1006 | }, 1007 | "lodash._getnative": { 1008 | "version": "3.9.1", 1009 | "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", 1010 | "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", 1011 | "dev": true 1012 | }, 1013 | "lodash._isiterateecall": { 1014 | "version": "3.0.9", 1015 | "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", 1016 | "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", 1017 | "dev": true 1018 | }, 1019 | "lodash.create": { 1020 | "version": "3.1.1", 1021 | "resolved": "https://registry.npmjs.org/lodash.create/-/lodash.create-3.1.1.tgz", 1022 | "integrity": "sha1-1/KEnw29p+BGgruM1yqwIkYd6+c=", 1023 | "dev": true, 1024 | "requires": { 1025 | "lodash._baseassign": "3.2.0", 1026 | "lodash._basecreate": "3.0.3", 1027 | "lodash._isiterateecall": "3.0.9" 1028 | } 1029 | }, 1030 | "lodash.isarguments": { 1031 | "version": "3.1.0", 1032 | "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", 1033 | "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", 1034 | "dev": true 1035 | }, 1036 | "lodash.isarray": { 1037 | "version": "3.0.4", 1038 | "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", 1039 | "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", 1040 | "dev": true 1041 | }, 1042 | "lodash.keys": { 1043 | "version": "3.1.2", 1044 | "resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz", 1045 | "integrity": "sha1-TbwEcrFWvlCgsoaFXRvQsMZWCYo=", 1046 | "dev": true, 1047 | "requires": { 1048 | "lodash._getnative": "3.9.1", 1049 | "lodash.isarguments": "3.1.0", 1050 | "lodash.isarray": "3.0.4" 1051 | } 1052 | }, 1053 | "longest": { 1054 | "version": "1.0.1", 1055 | "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz", 1056 | "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=" 1057 | }, 1058 | "lru-cache": { 1059 | "version": "3.2.0", 1060 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-3.2.0.tgz", 1061 | "integrity": "sha1-cXibO39Tmb7IVl3aOKow0qCX7+4=", 1062 | "requires": { 1063 | "pseudomap": "1.0.2" 1064 | } 1065 | }, 1066 | "lru-queue": { 1067 | "version": "0.1.0", 1068 | "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", 1069 | "integrity": "sha1-Jzi9nw089PhEkMVzbEhpmsYyzaM=", 1070 | "requires": { 1071 | "es5-ext": "0.10.42" 1072 | } 1073 | }, 1074 | "media-typer": { 1075 | "version": "0.3.0", 1076 | "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", 1077 | "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" 1078 | }, 1079 | "mem": { 1080 | "version": "1.1.0", 1081 | "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", 1082 | "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", 1083 | "requires": { 1084 | "mimic-fn": "1.2.0" 1085 | } 1086 | }, 1087 | "memoizee": { 1088 | "version": "0.4.12", 1089 | "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.12.tgz", 1090 | "integrity": "sha512-sprBu6nwxBWBvBOh5v2jcsGqiGLlL2xr2dLub3vR8dnE8YB17omwtm/0NSHl8jjNbcsJd5GMWJAnTSVe/O0Wfg==", 1091 | "requires": { 1092 | "d": "1.0.0", 1093 | "es5-ext": "0.10.42", 1094 | "es6-weak-map": "2.0.2", 1095 | "event-emitter": "0.3.5", 1096 | "is-promise": "2.1.0", 1097 | "lru-queue": "0.1.0", 1098 | "next-tick": "1.0.0", 1099 | "timers-ext": "0.1.5" 1100 | } 1101 | }, 1102 | "merge-descriptors": { 1103 | "version": "1.0.1", 1104 | "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", 1105 | "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" 1106 | }, 1107 | "methods": { 1108 | "version": "1.1.2", 1109 | "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", 1110 | "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" 1111 | }, 1112 | "mime": { 1113 | "version": "1.4.1", 1114 | "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", 1115 | "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==" 1116 | }, 1117 | "mime-db": { 1118 | "version": "1.33.0", 1119 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", 1120 | "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==" 1121 | }, 1122 | "mime-types": { 1123 | "version": "2.1.18", 1124 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", 1125 | "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", 1126 | "requires": { 1127 | "mime-db": "1.33.0" 1128 | } 1129 | }, 1130 | "mimic-fn": { 1131 | "version": "1.2.0", 1132 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", 1133 | "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" 1134 | }, 1135 | "minimatch": { 1136 | "version": "3.0.4", 1137 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1138 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1139 | "dev": true, 1140 | "requires": { 1141 | "brace-expansion": "1.1.11" 1142 | } 1143 | }, 1144 | "minimist": { 1145 | "version": "0.0.8", 1146 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", 1147 | "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" 1148 | }, 1149 | "mkdirp": { 1150 | "version": "0.5.1", 1151 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", 1152 | "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", 1153 | "requires": { 1154 | "minimist": "0.0.8" 1155 | } 1156 | }, 1157 | "mocha": { 1158 | "version": "3.5.3", 1159 | "resolved": "https://registry.npmjs.org/mocha/-/mocha-3.5.3.tgz", 1160 | "integrity": "sha512-/6na001MJWEtYxHOV1WLfsmR4YIynkUEhBwzsb+fk2qmQ3iqsi258l/Q2MWHJMImAcNpZ8DEdYAK72NHoIQ9Eg==", 1161 | "dev": true, 1162 | "requires": { 1163 | "browser-stdout": "1.3.0", 1164 | "commander": "2.9.0", 1165 | "debug": "2.6.8", 1166 | "diff": "3.2.0", 1167 | "escape-string-regexp": "1.0.5", 1168 | "glob": "7.1.1", 1169 | "growl": "1.9.2", 1170 | "he": "1.1.1", 1171 | "json3": "3.3.2", 1172 | "lodash.create": "3.1.1", 1173 | "mkdirp": "0.5.1", 1174 | "supports-color": "3.1.2" 1175 | }, 1176 | "dependencies": { 1177 | "commander": { 1178 | "version": "2.9.0", 1179 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.9.0.tgz", 1180 | "integrity": "sha1-nJkJQXbhIkDLItbFFGCYQA/g99Q=", 1181 | "dev": true, 1182 | "requires": { 1183 | "graceful-readlink": "1.0.1" 1184 | } 1185 | }, 1186 | "debug": { 1187 | "version": "2.6.8", 1188 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz", 1189 | "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=", 1190 | "dev": true, 1191 | "requires": { 1192 | "ms": "2.0.0" 1193 | } 1194 | } 1195 | } 1196 | }, 1197 | "moment": { 1198 | "version": "2.22.0", 1199 | "resolved": "https://registry.npmjs.org/moment/-/moment-2.22.0.tgz", 1200 | "integrity": "sha512-1muXCh8jb1N/gHRbn9VDUBr0GYb8A/aVcHlII9QSB68a50spqEVLIGN6KVmCOnSvJrUhC0edGgKU5ofnGXdYdg==" 1201 | }, 1202 | "moment-timezone": { 1203 | "version": "0.5.14", 1204 | "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.14.tgz", 1205 | "integrity": "sha1-TrOP+VOLgBCLpGekWPPtQmjM/LE=", 1206 | "requires": { 1207 | "moment": "2.22.0" 1208 | } 1209 | }, 1210 | "morgan": { 1211 | "version": "1.9.0", 1212 | "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", 1213 | "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", 1214 | "requires": { 1215 | "basic-auth": "2.0.0", 1216 | "debug": "2.6.9", 1217 | "depd": "1.1.2", 1218 | "on-finished": "2.3.0", 1219 | "on-headers": "1.0.1" 1220 | }, 1221 | "dependencies": { 1222 | "debug": { 1223 | "version": "2.6.9", 1224 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1225 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1226 | "requires": { 1227 | "ms": "2.0.0" 1228 | } 1229 | } 1230 | } 1231 | }, 1232 | "ms": { 1233 | "version": "2.0.0", 1234 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 1235 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" 1236 | }, 1237 | "nan": { 1238 | "version": "2.7.0", 1239 | "resolved": "https://registry.npmjs.org/nan/-/nan-2.7.0.tgz", 1240 | "integrity": "sha1-2Vv3IeyHfgjbJ27T/G63j5CDrUY=" 1241 | }, 1242 | "negotiator": { 1243 | "version": "0.6.1", 1244 | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.1.tgz", 1245 | "integrity": "sha1-KzJxhOiZIQEXeyhWP7XnECrNDKk=" 1246 | }, 1247 | "next-tick": { 1248 | "version": "1.0.0", 1249 | "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", 1250 | "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=" 1251 | }, 1252 | "nopt": { 1253 | "version": "3.0.6", 1254 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", 1255 | "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", 1256 | "requires": { 1257 | "abbrev": "1.1.1" 1258 | } 1259 | }, 1260 | "normalize-package-data": { 1261 | "version": "2.4.0", 1262 | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", 1263 | "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", 1264 | "requires": { 1265 | "hosted-git-info": "2.6.0", 1266 | "is-builtin-module": "1.0.0", 1267 | "semver": "4.3.2", 1268 | "validate-npm-package-license": "3.0.3" 1269 | } 1270 | }, 1271 | "npm-run-path": { 1272 | "version": "2.0.2", 1273 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", 1274 | "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", 1275 | "requires": { 1276 | "path-key": "2.0.1" 1277 | } 1278 | }, 1279 | "number-is-nan": { 1280 | "version": "1.0.1", 1281 | "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", 1282 | "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=" 1283 | }, 1284 | "object-assign": { 1285 | "version": "4.1.0", 1286 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz", 1287 | "integrity": "sha1-ejs9DpgGPUP0wD8uiubNUahog6A=" 1288 | }, 1289 | "on-finished": { 1290 | "version": "2.3.0", 1291 | "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", 1292 | "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", 1293 | "requires": { 1294 | "ee-first": "1.1.1" 1295 | } 1296 | }, 1297 | "on-headers": { 1298 | "version": "1.0.1", 1299 | "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.1.tgz", 1300 | "integrity": "sha1-ko9dD0cNSTQmUepnlLCFfBAGk/c=" 1301 | }, 1302 | "once": { 1303 | "version": "1.4.0", 1304 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1305 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1306 | "dev": true, 1307 | "requires": { 1308 | "wrappy": "1.0.2" 1309 | } 1310 | }, 1311 | "os-locale": { 1312 | "version": "2.1.0", 1313 | "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", 1314 | "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", 1315 | "requires": { 1316 | "execa": "0.7.0", 1317 | "lcid": "1.0.0", 1318 | "mem": "1.1.0" 1319 | } 1320 | }, 1321 | "p-finally": { 1322 | "version": "1.0.0", 1323 | "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", 1324 | "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" 1325 | }, 1326 | "p-limit": { 1327 | "version": "1.2.0", 1328 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz", 1329 | "integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==", 1330 | "requires": { 1331 | "p-try": "1.0.0" 1332 | } 1333 | }, 1334 | "p-locate": { 1335 | "version": "2.0.0", 1336 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", 1337 | "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", 1338 | "requires": { 1339 | "p-limit": "1.2.0" 1340 | } 1341 | }, 1342 | "p-try": { 1343 | "version": "1.0.0", 1344 | "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", 1345 | "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" 1346 | }, 1347 | "packet-reader": { 1348 | "version": "0.3.1", 1349 | "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-0.3.1.tgz", 1350 | "integrity": "sha1-zWLmCvjX/qinBexP+ZCHHEaHHyc=" 1351 | }, 1352 | "parse-json": { 1353 | "version": "2.2.0", 1354 | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", 1355 | "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", 1356 | "requires": { 1357 | "error-ex": "1.3.1" 1358 | } 1359 | }, 1360 | "parseurl": { 1361 | "version": "1.3.2", 1362 | "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz", 1363 | "integrity": "sha1-/CidTtiZMRlGDBViUyYs3I3mW/M=" 1364 | }, 1365 | "path-exists": { 1366 | "version": "3.0.0", 1367 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", 1368 | "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" 1369 | }, 1370 | "path-is-absolute": { 1371 | "version": "1.0.1", 1372 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1373 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1374 | "dev": true 1375 | }, 1376 | "path-key": { 1377 | "version": "2.0.1", 1378 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", 1379 | "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" 1380 | }, 1381 | "path-parse": { 1382 | "version": "1.0.5", 1383 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", 1384 | "integrity": "sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME=" 1385 | }, 1386 | "path-to-regexp": { 1387 | "version": "0.1.7", 1388 | "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", 1389 | "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" 1390 | }, 1391 | "path-type": { 1392 | "version": "2.0.0", 1393 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", 1394 | "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", 1395 | "requires": { 1396 | "pify": "2.3.0" 1397 | } 1398 | }, 1399 | "pg": { 1400 | "version": "6.4.2", 1401 | "resolved": "https://registry.npmjs.org/pg/-/pg-6.4.2.tgz", 1402 | "integrity": "sha1-w2QBEGDqx6UHoq4GPrhX7OkQ4n8=", 1403 | "requires": { 1404 | "buffer-writer": "1.0.1", 1405 | "js-string-escape": "1.0.1", 1406 | "packet-reader": "0.3.1", 1407 | "pg-connection-string": "0.1.3", 1408 | "pg-pool": "1.8.0", 1409 | "pg-types": "1.13.0", 1410 | "pgpass": "1.0.2", 1411 | "semver": "4.3.2" 1412 | } 1413 | }, 1414 | "pg-connection-string": { 1415 | "version": "0.1.3", 1416 | "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-0.1.3.tgz", 1417 | "integrity": "sha1-2hhHsglA5C7hSSvq9l1J2RskXfc=" 1418 | }, 1419 | "pg-int8": { 1420 | "version": "1.0.1", 1421 | "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", 1422 | "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" 1423 | }, 1424 | "pg-pool": { 1425 | "version": "1.8.0", 1426 | "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-1.8.0.tgz", 1427 | "integrity": "sha1-9+xzgkw3oD8Hb1G/33DjQBR8Tzc=", 1428 | "requires": { 1429 | "generic-pool": "2.4.3", 1430 | "object-assign": "4.1.0" 1431 | } 1432 | }, 1433 | "pg-types": { 1434 | "version": "1.13.0", 1435 | "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-1.13.0.tgz", 1436 | "integrity": "sha512-lfKli0Gkl/+za/+b6lzENajczwZHc7D5kiUCZfgm914jipD2kIOIvEkAhZ8GrW3/TUoP9w8FHjwpPObBye5KQQ==", 1437 | "requires": { 1438 | "pg-int8": "1.0.1", 1439 | "postgres-array": "1.0.2", 1440 | "postgres-bytea": "1.0.0", 1441 | "postgres-date": "1.0.3", 1442 | "postgres-interval": "1.1.1" 1443 | } 1444 | }, 1445 | "pgpass": { 1446 | "version": "1.0.2", 1447 | "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.2.tgz", 1448 | "integrity": "sha1-Knu0G2BltnkH6R2hsHwYR8h3swY=", 1449 | "requires": { 1450 | "split": "1.0.1" 1451 | } 1452 | }, 1453 | "pify": { 1454 | "version": "2.3.0", 1455 | "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", 1456 | "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=" 1457 | }, 1458 | "postgres-array": { 1459 | "version": "1.0.2", 1460 | "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-1.0.2.tgz", 1461 | "integrity": "sha1-jgsy6wO/d6XAp4UeBEHBaaJWojg=" 1462 | }, 1463 | "postgres-bytea": { 1464 | "version": "1.0.0", 1465 | "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", 1466 | "integrity": "sha1-AntTPAqokOJtFy1Hz5zOzFIazTU=" 1467 | }, 1468 | "postgres-date": { 1469 | "version": "1.0.3", 1470 | "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.3.tgz", 1471 | "integrity": "sha1-4tiXAu/bJY/52c7g/pG9BpdSV6g=" 1472 | }, 1473 | "postgres-interval": { 1474 | "version": "1.1.1", 1475 | "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.1.1.tgz", 1476 | "integrity": "sha512-OkuCi9t/3CZmeQreutGgx/OVNv9MKHGIT5jH8KldQ4NLYXkvmT9nDVxEuCENlNwhlGPE374oA/xMqn05G49pHA==", 1477 | "requires": { 1478 | "xtend": "4.0.1" 1479 | } 1480 | }, 1481 | "process-nextick-args": { 1482 | "version": "2.0.0", 1483 | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", 1484 | "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", 1485 | "dev": true 1486 | }, 1487 | "promise": { 1488 | "version": "7.3.1", 1489 | "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz", 1490 | "integrity": "sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==", 1491 | "requires": { 1492 | "asap": "2.0.6" 1493 | } 1494 | }, 1495 | "proto-list": { 1496 | "version": "1.2.4", 1497 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 1498 | "integrity": "sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk=" 1499 | }, 1500 | "proxy-addr": { 1501 | "version": "2.0.3", 1502 | "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.3.tgz", 1503 | "integrity": "sha512-jQTChiCJteusULxjBp8+jftSQE5Obdl3k4cnmLA6WXtK6XFuWRnvVL7aCiBqaLPM8c4ph0S4tKna8XvmIwEnXQ==", 1504 | "requires": { 1505 | "forwarded": "0.1.2", 1506 | "ipaddr.js": "1.6.0" 1507 | } 1508 | }, 1509 | "pseudomap": { 1510 | "version": "1.0.2", 1511 | "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", 1512 | "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" 1513 | }, 1514 | "pug": { 1515 | "version": "2.0.3", 1516 | "resolved": "https://registry.npmjs.org/pug/-/pug-2.0.3.tgz", 1517 | "integrity": "sha1-ccuoJTfJWl6rftBGluQiH1Oqh44=", 1518 | "requires": { 1519 | "pug-code-gen": "2.0.1", 1520 | "pug-filters": "3.1.0", 1521 | "pug-lexer": "4.0.0", 1522 | "pug-linker": "3.0.5", 1523 | "pug-load": "2.0.11", 1524 | "pug-parser": "5.0.0", 1525 | "pug-runtime": "2.0.4", 1526 | "pug-strip-comments": "1.0.3" 1527 | } 1528 | }, 1529 | "pug-attrs": { 1530 | "version": "2.0.3", 1531 | "resolved": "https://registry.npmjs.org/pug-attrs/-/pug-attrs-2.0.3.tgz", 1532 | "integrity": "sha1-owlflw5kFR972tlX7vVftdeQXRU=", 1533 | "requires": { 1534 | "constantinople": "3.1.2", 1535 | "js-stringify": "1.0.2", 1536 | "pug-runtime": "2.0.4" 1537 | } 1538 | }, 1539 | "pug-code-gen": { 1540 | "version": "2.0.1", 1541 | "resolved": "https://registry.npmjs.org/pug-code-gen/-/pug-code-gen-2.0.1.tgz", 1542 | "integrity": "sha1-CVHsgyJddNjPxHan+Zolm199BQw=", 1543 | "requires": { 1544 | "constantinople": "3.1.2", 1545 | "doctypes": "1.1.0", 1546 | "js-stringify": "1.0.2", 1547 | "pug-attrs": "2.0.3", 1548 | "pug-error": "1.3.2", 1549 | "pug-runtime": "2.0.4", 1550 | "void-elements": "2.0.1", 1551 | "with": "5.1.1" 1552 | } 1553 | }, 1554 | "pug-error": { 1555 | "version": "1.3.2", 1556 | "resolved": "https://registry.npmjs.org/pug-error/-/pug-error-1.3.2.tgz", 1557 | "integrity": "sha1-U659nSm7A89WRJOgJhCfVMR/XyY=" 1558 | }, 1559 | "pug-filters": { 1560 | "version": "3.1.0", 1561 | "resolved": "https://registry.npmjs.org/pug-filters/-/pug-filters-3.1.0.tgz", 1562 | "integrity": "sha1-JxZVVbwEwjbkqisDZiRt+gIbYm4=", 1563 | "requires": { 1564 | "clean-css": "4.1.11", 1565 | "constantinople": "3.1.2", 1566 | "jstransformer": "1.0.0", 1567 | "pug-error": "1.3.2", 1568 | "pug-walk": "1.1.7", 1569 | "resolve": "1.6.0", 1570 | "uglify-js": "2.8.29" 1571 | } 1572 | }, 1573 | "pug-lexer": { 1574 | "version": "4.0.0", 1575 | "resolved": "https://registry.npmjs.org/pug-lexer/-/pug-lexer-4.0.0.tgz", 1576 | "integrity": "sha1-IQwYRX7y4XYCQnQMXmR715TOwng=", 1577 | "requires": { 1578 | "character-parser": "2.2.0", 1579 | "is-expression": "3.0.0", 1580 | "pug-error": "1.3.2" 1581 | } 1582 | }, 1583 | "pug-linker": { 1584 | "version": "3.0.5", 1585 | "resolved": "https://registry.npmjs.org/pug-linker/-/pug-linker-3.0.5.tgz", 1586 | "integrity": "sha1-npp65ABWgtAn3uuWsAD4juuDoC8=", 1587 | "requires": { 1588 | "pug-error": "1.3.2", 1589 | "pug-walk": "1.1.7" 1590 | } 1591 | }, 1592 | "pug-load": { 1593 | "version": "2.0.11", 1594 | "resolved": "https://registry.npmjs.org/pug-load/-/pug-load-2.0.11.tgz", 1595 | "integrity": "sha1-5kjlftET/iwfRdV4WOorrWvAFSc=", 1596 | "requires": { 1597 | "object-assign": "4.1.0", 1598 | "pug-walk": "1.1.7" 1599 | } 1600 | }, 1601 | "pug-parser": { 1602 | "version": "5.0.0", 1603 | "resolved": "https://registry.npmjs.org/pug-parser/-/pug-parser-5.0.0.tgz", 1604 | "integrity": "sha1-45Stmz/KkxI5QK/4hcBuRKt+aOQ=", 1605 | "requires": { 1606 | "pug-error": "1.3.2", 1607 | "token-stream": "0.0.1" 1608 | } 1609 | }, 1610 | "pug-runtime": { 1611 | "version": "2.0.4", 1612 | "resolved": "https://registry.npmjs.org/pug-runtime/-/pug-runtime-2.0.4.tgz", 1613 | "integrity": "sha1-4XjhvaaKsujArPybztLFT9iM61g=" 1614 | }, 1615 | "pug-strip-comments": { 1616 | "version": "1.0.3", 1617 | "resolved": "https://registry.npmjs.org/pug-strip-comments/-/pug-strip-comments-1.0.3.tgz", 1618 | "integrity": "sha1-8VWVkiBu3G+FMQ2s9K+0igJa9Z8=", 1619 | "requires": { 1620 | "pug-error": "1.3.2" 1621 | } 1622 | }, 1623 | "pug-walk": { 1624 | "version": "1.1.7", 1625 | "resolved": "https://registry.npmjs.org/pug-walk/-/pug-walk-1.1.7.tgz", 1626 | "integrity": "sha1-wA1cUSi6xYBr7BXSt+fNq+QlMfM=" 1627 | }, 1628 | "qs": { 1629 | "version": "6.5.1", 1630 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", 1631 | "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==" 1632 | }, 1633 | "range-parser": { 1634 | "version": "1.2.0", 1635 | "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.0.tgz", 1636 | "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" 1637 | }, 1638 | "raw-body": { 1639 | "version": "2.3.2", 1640 | "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.3.2.tgz", 1641 | "integrity": "sha1-vNYMd9Prk83gBQKVw/N5OJvIj4k=", 1642 | "requires": { 1643 | "bytes": "3.0.0", 1644 | "http-errors": "1.6.2", 1645 | "iconv-lite": "0.4.19", 1646 | "unpipe": "1.0.0" 1647 | }, 1648 | "dependencies": { 1649 | "depd": { 1650 | "version": "1.1.1", 1651 | "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.1.tgz", 1652 | "integrity": "sha1-V4O04cRZ8G+lyif5kfPQbnoxA1k=" 1653 | }, 1654 | "http-errors": { 1655 | "version": "1.6.2", 1656 | "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz", 1657 | "integrity": "sha1-CgAsyFcHGSp+eUbO7cERVfYOxzY=", 1658 | "requires": { 1659 | "depd": "1.1.1", 1660 | "inherits": "2.0.3", 1661 | "setprototypeof": "1.0.3", 1662 | "statuses": "1.5.0" 1663 | } 1664 | }, 1665 | "setprototypeof": { 1666 | "version": "1.0.3", 1667 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.0.3.tgz", 1668 | "integrity": "sha1-ZlZ+NwQ+608E2RvWWMDL77VbjgQ=" 1669 | } 1670 | } 1671 | }, 1672 | "read-pkg": { 1673 | "version": "2.0.0", 1674 | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", 1675 | "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", 1676 | "requires": { 1677 | "load-json-file": "2.0.0", 1678 | "normalize-package-data": "2.4.0", 1679 | "path-type": "2.0.0" 1680 | } 1681 | }, 1682 | "read-pkg-up": { 1683 | "version": "2.0.0", 1684 | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", 1685 | "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", 1686 | "requires": { 1687 | "find-up": "2.1.0", 1688 | "read-pkg": "2.0.0" 1689 | } 1690 | }, 1691 | "readable-stream": { 1692 | "version": "2.3.5", 1693 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.5.tgz", 1694 | "integrity": "sha512-tK0yDhrkygt/knjowCUiWP9YdV7c5R+8cR0r/kt9ZhBU906Fs6RpQJCEilamRJj1Nx2rWI6LkW9gKqjTkshhEw==", 1695 | "dev": true, 1696 | "requires": { 1697 | "core-util-is": "1.0.2", 1698 | "inherits": "2.0.3", 1699 | "isarray": "1.0.0", 1700 | "process-nextick-args": "2.0.0", 1701 | "safe-buffer": "5.1.1", 1702 | "string_decoder": "1.0.3", 1703 | "util-deprecate": "1.0.2" 1704 | } 1705 | }, 1706 | "regenerator-runtime": { 1707 | "version": "0.11.1", 1708 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", 1709 | "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" 1710 | }, 1711 | "repeat-string": { 1712 | "version": "1.6.1", 1713 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1714 | "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=" 1715 | }, 1716 | "require-directory": { 1717 | "version": "2.1.1", 1718 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1719 | "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" 1720 | }, 1721 | "require-main-filename": { 1722 | "version": "1.0.1", 1723 | "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", 1724 | "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=" 1725 | }, 1726 | "resolve": { 1727 | "version": "1.6.0", 1728 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.6.0.tgz", 1729 | "integrity": "sha512-mw7JQNu5ExIkcw4LPih0owX/TZXjD/ZUF/ZQ/pDnkw3ZKhDcZZw5klmBlj6gVMwjQ3Pz5Jgu7F3d0jcDVuEWdw==", 1730 | "requires": { 1731 | "path-parse": "1.0.5" 1732 | } 1733 | }, 1734 | "retry-as-promised": { 1735 | "version": "2.3.2", 1736 | "resolved": "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-2.3.2.tgz", 1737 | "integrity": "sha1-zZdO5P2bX+A8vzGHHuSCIcB3N7c=", 1738 | "requires": { 1739 | "bluebird": "3.5.1", 1740 | "debug": "2.6.9" 1741 | }, 1742 | "dependencies": { 1743 | "debug": { 1744 | "version": "2.6.9", 1745 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1746 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1747 | "requires": { 1748 | "ms": "2.0.0" 1749 | } 1750 | } 1751 | } 1752 | }, 1753 | "right-align": { 1754 | "version": "0.1.3", 1755 | "resolved": "https://registry.npmjs.org/right-align/-/right-align-0.1.3.tgz", 1756 | "integrity": "sha1-YTObci/mo1FWiSENJOFMlhSGE+8=", 1757 | "requires": { 1758 | "align-text": "0.1.4" 1759 | } 1760 | }, 1761 | "safe-buffer": { 1762 | "version": "5.1.1", 1763 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", 1764 | "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" 1765 | }, 1766 | "semver": { 1767 | "version": "4.3.2", 1768 | "resolved": "https://registry.npmjs.org/semver/-/semver-4.3.2.tgz", 1769 | "integrity": "sha1-x6BxWKgL7dBSNVt3DYLWZA+AO+c=" 1770 | }, 1771 | "send": { 1772 | "version": "0.16.2", 1773 | "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz", 1774 | "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", 1775 | "requires": { 1776 | "debug": "2.6.9", 1777 | "depd": "1.1.2", 1778 | "destroy": "1.0.4", 1779 | "encodeurl": "1.0.2", 1780 | "escape-html": "1.0.3", 1781 | "etag": "1.8.1", 1782 | "fresh": "0.5.2", 1783 | "http-errors": "1.6.3", 1784 | "mime": "1.4.1", 1785 | "ms": "2.0.0", 1786 | "on-finished": "2.3.0", 1787 | "range-parser": "1.2.0", 1788 | "statuses": "1.4.0" 1789 | }, 1790 | "dependencies": { 1791 | "debug": { 1792 | "version": "2.6.9", 1793 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 1794 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 1795 | "requires": { 1796 | "ms": "2.0.0" 1797 | } 1798 | }, 1799 | "statuses": { 1800 | "version": "1.4.0", 1801 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz", 1802 | "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==" 1803 | } 1804 | } 1805 | }, 1806 | "sequelize": { 1807 | "version": "3.32.1", 1808 | "resolved": "https://registry.npmjs.org/sequelize/-/sequelize-3.32.1.tgz", 1809 | "integrity": "sha1-+VcVVBI0ajPU1shGCiDcWIeBiN4=", 1810 | "requires": { 1811 | "bluebird": "3.5.1", 1812 | "depd": "1.1.2", 1813 | "dottie": "1.1.1", 1814 | "generic-pool": "2.4.2", 1815 | "inflection": "1.12.0", 1816 | "lodash": "4.12.0", 1817 | "moment": "2.22.0", 1818 | "moment-timezone": "0.5.14", 1819 | "retry-as-promised": "2.3.2", 1820 | "semver": "5.5.0", 1821 | "shimmer": "1.1.0", 1822 | "terraformer-wkt-parser": "1.1.2", 1823 | "toposort-class": "1.0.1", 1824 | "uuid": "3.2.1", 1825 | "validator": "5.7.0", 1826 | "wkx": "0.2.0" 1827 | }, 1828 | "dependencies": { 1829 | "generic-pool": { 1830 | "version": "2.4.2", 1831 | "resolved": "https://registry.npmjs.org/generic-pool/-/generic-pool-2.4.2.tgz", 1832 | "integrity": "sha1-iGvFvwvrfblugby7oHiBjeWmJoM=" 1833 | }, 1834 | "lodash": { 1835 | "version": "4.12.0", 1836 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.12.0.tgz", 1837 | "integrity": "sha1-K9bcRqBA9Z5obJcu0h2T3FkFMlg=" 1838 | }, 1839 | "semver": { 1840 | "version": "5.5.0", 1841 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", 1842 | "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==" 1843 | } 1844 | } 1845 | }, 1846 | "sequelize-cli": { 1847 | "version": "3.2.0", 1848 | "resolved": "https://registry.npmjs.org/sequelize-cli/-/sequelize-cli-3.2.0.tgz", 1849 | "integrity": "sha1-wBMzqYrTZGaXJiS7USId0MWgLfU=", 1850 | "requires": { 1851 | "bluebird": "3.5.1", 1852 | "cli-color": "1.2.0", 1853 | "fs-extra": "4.0.3", 1854 | "js-beautify": "1.7.5", 1855 | "lodash": "4.17.5", 1856 | "resolve": "1.6.0", 1857 | "umzug": "2.1.0", 1858 | "yargs": "8.0.2" 1859 | }, 1860 | "dependencies": { 1861 | "camelcase": { 1862 | "version": "4.1.0", 1863 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 1864 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" 1865 | }, 1866 | "cliui": { 1867 | "version": "3.2.0", 1868 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", 1869 | "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", 1870 | "requires": { 1871 | "string-width": "1.0.2", 1872 | "strip-ansi": "3.0.1", 1873 | "wrap-ansi": "2.1.0" 1874 | }, 1875 | "dependencies": { 1876 | "string-width": { 1877 | "version": "1.0.2", 1878 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 1879 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 1880 | "requires": { 1881 | "code-point-at": "1.1.0", 1882 | "is-fullwidth-code-point": "1.0.0", 1883 | "strip-ansi": "3.0.1" 1884 | } 1885 | } 1886 | } 1887 | }, 1888 | "yargs": { 1889 | "version": "8.0.2", 1890 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz", 1891 | "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=", 1892 | "requires": { 1893 | "camelcase": "4.1.0", 1894 | "cliui": "3.2.0", 1895 | "decamelize": "1.2.0", 1896 | "get-caller-file": "1.0.2", 1897 | "os-locale": "2.1.0", 1898 | "read-pkg-up": "2.0.0", 1899 | "require-directory": "2.1.1", 1900 | "require-main-filename": "1.0.1", 1901 | "set-blocking": "2.0.0", 1902 | "string-width": "2.1.1", 1903 | "which-module": "2.0.0", 1904 | "y18n": "3.2.1", 1905 | "yargs-parser": "7.0.0" 1906 | } 1907 | } 1908 | } 1909 | }, 1910 | "serve-favicon": { 1911 | "version": "2.3.2", 1912 | "resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.3.2.tgz", 1913 | "integrity": "sha1-3UGeJo3gEqtysxnTN/IQUBP5OB8=", 1914 | "requires": { 1915 | "etag": "1.7.0", 1916 | "fresh": "0.3.0", 1917 | "ms": "0.7.2", 1918 | "parseurl": "1.3.2" 1919 | }, 1920 | "dependencies": { 1921 | "etag": { 1922 | "version": "1.7.0", 1923 | "resolved": "https://registry.npmjs.org/etag/-/etag-1.7.0.tgz", 1924 | "integrity": "sha1-A9MLX2fdbmMtKUXTDWZScxo01dg=" 1925 | }, 1926 | "fresh": { 1927 | "version": "0.3.0", 1928 | "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.3.0.tgz", 1929 | "integrity": "sha1-ZR+DjiJCTnVm3hYdg1jKoZn4PU8=" 1930 | }, 1931 | "ms": { 1932 | "version": "0.7.2", 1933 | "resolved": "https://registry.npmjs.org/ms/-/ms-0.7.2.tgz", 1934 | "integrity": "sha1-riXPJRKziFodldfwN4aNhDESR2U=" 1935 | } 1936 | } 1937 | }, 1938 | "serve-static": { 1939 | "version": "1.13.2", 1940 | "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.13.2.tgz", 1941 | "integrity": "sha512-p/tdJrO4U387R9oMjb1oj7qSMaMfmOyd4j9hOFoxZe2baQszgHcSWjuya/CiT5kgZZKRudHNOA0pYXOl8rQ5nw==", 1942 | "requires": { 1943 | "encodeurl": "1.0.2", 1944 | "escape-html": "1.0.3", 1945 | "parseurl": "1.3.2", 1946 | "send": "0.16.2" 1947 | } 1948 | }, 1949 | "set-blocking": { 1950 | "version": "2.0.0", 1951 | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", 1952 | "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=" 1953 | }, 1954 | "setprototypeof": { 1955 | "version": "1.1.0", 1956 | "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", 1957 | "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==" 1958 | }, 1959 | "shebang-command": { 1960 | "version": "1.2.0", 1961 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", 1962 | "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", 1963 | "requires": { 1964 | "shebang-regex": "1.0.0" 1965 | } 1966 | }, 1967 | "shebang-regex": { 1968 | "version": "1.0.0", 1969 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", 1970 | "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" 1971 | }, 1972 | "shimmer": { 1973 | "version": "1.1.0", 1974 | "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.1.0.tgz", 1975 | "integrity": "sha1-l9c3cTf/u6tCVSLkKf4KqJpIizU=" 1976 | }, 1977 | "sigmund": { 1978 | "version": "1.0.1", 1979 | "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", 1980 | "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=" 1981 | }, 1982 | "signal-exit": { 1983 | "version": "3.0.2", 1984 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", 1985 | "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" 1986 | }, 1987 | "source-map": { 1988 | "version": "0.5.7", 1989 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", 1990 | "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=" 1991 | }, 1992 | "spdx-correct": { 1993 | "version": "3.0.0", 1994 | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", 1995 | "integrity": "sha512-N19o9z5cEyc8yQQPukRCZ9EUmb4HUpnrmaL/fxS2pBo2jbfcFRVuFZ/oFC+vZz0MNNk0h80iMn5/S6qGZOL5+g==", 1996 | "requires": { 1997 | "spdx-expression-parse": "3.0.0", 1998 | "spdx-license-ids": "3.0.0" 1999 | } 2000 | }, 2001 | "spdx-exceptions": { 2002 | "version": "2.1.0", 2003 | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.1.0.tgz", 2004 | "integrity": "sha512-4K1NsmrlCU1JJgUrtgEeTVyfx8VaYea9J9LvARxhbHtVtohPs/gFGG5yy49beySjlIMhhXZ4QqujIZEfS4l6Cg==" 2005 | }, 2006 | "spdx-expression-parse": { 2007 | "version": "3.0.0", 2008 | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", 2009 | "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", 2010 | "requires": { 2011 | "spdx-exceptions": "2.1.0", 2012 | "spdx-license-ids": "3.0.0" 2013 | } 2014 | }, 2015 | "spdx-license-ids": { 2016 | "version": "3.0.0", 2017 | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.0.tgz", 2018 | "integrity": "sha512-2+EPwgbnmOIl8HjGBXXMd9NAu02vLjOO1nWw4kmeRDFyHn+M/ETfHxQUK0oXg8ctgVnl9t3rosNVsZ1jG61nDA==" 2019 | }, 2020 | "split": { 2021 | "version": "1.0.1", 2022 | "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", 2023 | "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", 2024 | "requires": { 2025 | "through": "2.3.8" 2026 | } 2027 | }, 2028 | "sqlite3": { 2029 | "version": "3.1.13", 2030 | "resolved": "https://registry.npmjs.org/sqlite3/-/sqlite3-3.1.13.tgz", 2031 | "integrity": "sha512-JxXKPJnkZ6NuHRojq+g2WXWBt3M1G9sjZaYiHEWSTGijDM3cwju/0T2XbWqMXFmPqDgw+iB7zKQvnns4bvzXlw==", 2032 | "requires": { 2033 | "nan": "2.7.0", 2034 | "node-pre-gyp": "0.6.38" 2035 | }, 2036 | "dependencies": { 2037 | "abbrev": { 2038 | "version": "1.1.1", 2039 | "bundled": true 2040 | }, 2041 | "ajv": { 2042 | "version": "4.11.8", 2043 | "bundled": true, 2044 | "requires": { 2045 | "co": "4.6.0", 2046 | "json-stable-stringify": "1.0.1" 2047 | } 2048 | }, 2049 | "ansi-regex": { 2050 | "version": "2.1.1", 2051 | "bundled": true 2052 | }, 2053 | "aproba": { 2054 | "version": "1.2.0", 2055 | "bundled": true 2056 | }, 2057 | "are-we-there-yet": { 2058 | "version": "1.1.4", 2059 | "bundled": true, 2060 | "requires": { 2061 | "delegates": "1.0.0", 2062 | "readable-stream": "2.3.3" 2063 | } 2064 | }, 2065 | "asn1": { 2066 | "version": "0.2.3", 2067 | "bundled": true 2068 | }, 2069 | "assert-plus": { 2070 | "version": "0.2.0", 2071 | "bundled": true 2072 | }, 2073 | "asynckit": { 2074 | "version": "0.4.0", 2075 | "bundled": true 2076 | }, 2077 | "aws-sign2": { 2078 | "version": "0.6.0", 2079 | "bundled": true 2080 | }, 2081 | "aws4": { 2082 | "version": "1.6.0", 2083 | "bundled": true 2084 | }, 2085 | "balanced-match": { 2086 | "version": "1.0.0", 2087 | "bundled": true 2088 | }, 2089 | "bcrypt-pbkdf": { 2090 | "version": "1.0.1", 2091 | "bundled": true, 2092 | "optional": true, 2093 | "requires": { 2094 | "tweetnacl": "0.14.5" 2095 | } 2096 | }, 2097 | "block-stream": { 2098 | "version": "0.0.9", 2099 | "bundled": true, 2100 | "requires": { 2101 | "inherits": "2.0.3" 2102 | } 2103 | }, 2104 | "boom": { 2105 | "version": "2.10.1", 2106 | "bundled": true, 2107 | "requires": { 2108 | "hoek": "2.16.3" 2109 | } 2110 | }, 2111 | "brace-expansion": { 2112 | "version": "1.1.8", 2113 | "bundled": true, 2114 | "requires": { 2115 | "balanced-match": "1.0.0", 2116 | "concat-map": "0.0.1" 2117 | } 2118 | }, 2119 | "caseless": { 2120 | "version": "0.12.0", 2121 | "bundled": true 2122 | }, 2123 | "co": { 2124 | "version": "4.6.0", 2125 | "bundled": true 2126 | }, 2127 | "code-point-at": { 2128 | "version": "1.1.0", 2129 | "bundled": true 2130 | }, 2131 | "combined-stream": { 2132 | "version": "1.0.5", 2133 | "bundled": true, 2134 | "requires": { 2135 | "delayed-stream": "1.0.0" 2136 | } 2137 | }, 2138 | "concat-map": { 2139 | "version": "0.0.1", 2140 | "bundled": true 2141 | }, 2142 | "console-control-strings": { 2143 | "version": "1.1.0", 2144 | "bundled": true 2145 | }, 2146 | "core-util-is": { 2147 | "version": "1.0.2", 2148 | "bundled": true 2149 | }, 2150 | "cryptiles": { 2151 | "version": "2.0.5", 2152 | "bundled": true, 2153 | "requires": { 2154 | "boom": "2.10.1" 2155 | } 2156 | }, 2157 | "dashdash": { 2158 | "version": "1.14.1", 2159 | "bundled": true, 2160 | "requires": { 2161 | "assert-plus": "1.0.0" 2162 | }, 2163 | "dependencies": { 2164 | "assert-plus": { 2165 | "version": "1.0.0", 2166 | "bundled": true 2167 | } 2168 | } 2169 | }, 2170 | "debug": { 2171 | "version": "2.6.9", 2172 | "bundled": true, 2173 | "requires": { 2174 | "ms": "2.0.0" 2175 | } 2176 | }, 2177 | "deep-extend": { 2178 | "version": "0.4.2", 2179 | "bundled": true 2180 | }, 2181 | "delayed-stream": { 2182 | "version": "1.0.0", 2183 | "bundled": true 2184 | }, 2185 | "delegates": { 2186 | "version": "1.0.0", 2187 | "bundled": true 2188 | }, 2189 | "ecc-jsbn": { 2190 | "version": "0.1.1", 2191 | "bundled": true, 2192 | "optional": true, 2193 | "requires": { 2194 | "jsbn": "0.1.1" 2195 | } 2196 | }, 2197 | "extend": { 2198 | "version": "3.0.1", 2199 | "bundled": true 2200 | }, 2201 | "extsprintf": { 2202 | "version": "1.3.0", 2203 | "bundled": true 2204 | }, 2205 | "forever-agent": { 2206 | "version": "0.6.1", 2207 | "bundled": true 2208 | }, 2209 | "form-data": { 2210 | "version": "2.1.4", 2211 | "bundled": true, 2212 | "requires": { 2213 | "asynckit": "0.4.0", 2214 | "combined-stream": "1.0.5", 2215 | "mime-types": "2.1.17" 2216 | } 2217 | }, 2218 | "fs.realpath": { 2219 | "version": "1.0.0", 2220 | "bundled": true 2221 | }, 2222 | "fstream": { 2223 | "version": "1.0.11", 2224 | "bundled": true, 2225 | "requires": { 2226 | "graceful-fs": "4.1.11", 2227 | "inherits": "2.0.3", 2228 | "mkdirp": "0.5.1", 2229 | "rimraf": "2.6.2" 2230 | } 2231 | }, 2232 | "fstream-ignore": { 2233 | "version": "1.0.5", 2234 | "bundled": true, 2235 | "requires": { 2236 | "fstream": "1.0.11", 2237 | "inherits": "2.0.3", 2238 | "minimatch": "3.0.4" 2239 | } 2240 | }, 2241 | "gauge": { 2242 | "version": "2.7.4", 2243 | "bundled": true, 2244 | "requires": { 2245 | "aproba": "1.2.0", 2246 | "console-control-strings": "1.1.0", 2247 | "has-unicode": "2.0.1", 2248 | "object-assign": "4.1.1", 2249 | "signal-exit": "3.0.2", 2250 | "string-width": "1.0.2", 2251 | "strip-ansi": "3.0.1", 2252 | "wide-align": "1.1.2" 2253 | } 2254 | }, 2255 | "getpass": { 2256 | "version": "0.1.7", 2257 | "bundled": true, 2258 | "requires": { 2259 | "assert-plus": "1.0.0" 2260 | }, 2261 | "dependencies": { 2262 | "assert-plus": { 2263 | "version": "1.0.0", 2264 | "bundled": true 2265 | } 2266 | } 2267 | }, 2268 | "glob": { 2269 | "version": "7.1.2", 2270 | "bundled": true, 2271 | "requires": { 2272 | "fs.realpath": "1.0.0", 2273 | "inflight": "1.0.6", 2274 | "inherits": "2.0.3", 2275 | "minimatch": "3.0.4", 2276 | "once": "1.4.0", 2277 | "path-is-absolute": "1.0.1" 2278 | } 2279 | }, 2280 | "graceful-fs": { 2281 | "version": "4.1.11", 2282 | "bundled": true 2283 | }, 2284 | "har-schema": { 2285 | "version": "1.0.5", 2286 | "bundled": true 2287 | }, 2288 | "har-validator": { 2289 | "version": "4.2.1", 2290 | "bundled": true, 2291 | "requires": { 2292 | "ajv": "4.11.8", 2293 | "har-schema": "1.0.5" 2294 | } 2295 | }, 2296 | "has-unicode": { 2297 | "version": "2.0.1", 2298 | "bundled": true 2299 | }, 2300 | "hawk": { 2301 | "version": "3.1.3", 2302 | "bundled": true, 2303 | "requires": { 2304 | "boom": "2.10.1", 2305 | "cryptiles": "2.0.5", 2306 | "hoek": "2.16.3", 2307 | "sntp": "1.0.9" 2308 | } 2309 | }, 2310 | "hoek": { 2311 | "version": "2.16.3", 2312 | "bundled": true 2313 | }, 2314 | "http-signature": { 2315 | "version": "1.1.1", 2316 | "bundled": true, 2317 | "requires": { 2318 | "assert-plus": "0.2.0", 2319 | "jsprim": "1.4.1", 2320 | "sshpk": "1.13.1" 2321 | } 2322 | }, 2323 | "inflight": { 2324 | "version": "1.0.6", 2325 | "bundled": true, 2326 | "requires": { 2327 | "once": "1.4.0", 2328 | "wrappy": "1.0.2" 2329 | } 2330 | }, 2331 | "inherits": { 2332 | "version": "2.0.3", 2333 | "bundled": true 2334 | }, 2335 | "ini": { 2336 | "version": "1.3.4", 2337 | "bundled": true 2338 | }, 2339 | "is-fullwidth-code-point": { 2340 | "version": "1.0.0", 2341 | "bundled": true, 2342 | "requires": { 2343 | "number-is-nan": "1.0.1" 2344 | } 2345 | }, 2346 | "is-typedarray": { 2347 | "version": "1.0.0", 2348 | "bundled": true 2349 | }, 2350 | "isarray": { 2351 | "version": "1.0.0", 2352 | "bundled": true 2353 | }, 2354 | "isstream": { 2355 | "version": "0.1.2", 2356 | "bundled": true 2357 | }, 2358 | "jsbn": { 2359 | "version": "0.1.1", 2360 | "bundled": true, 2361 | "optional": true 2362 | }, 2363 | "json-schema": { 2364 | "version": "0.2.3", 2365 | "bundled": true 2366 | }, 2367 | "json-stable-stringify": { 2368 | "version": "1.0.1", 2369 | "bundled": true, 2370 | "requires": { 2371 | "jsonify": "0.0.0" 2372 | } 2373 | }, 2374 | "json-stringify-safe": { 2375 | "version": "5.0.1", 2376 | "bundled": true 2377 | }, 2378 | "jsonify": { 2379 | "version": "0.0.0", 2380 | "bundled": true 2381 | }, 2382 | "jsprim": { 2383 | "version": "1.4.1", 2384 | "bundled": true, 2385 | "requires": { 2386 | "assert-plus": "1.0.0", 2387 | "extsprintf": "1.3.0", 2388 | "json-schema": "0.2.3", 2389 | "verror": "1.10.0" 2390 | }, 2391 | "dependencies": { 2392 | "assert-plus": { 2393 | "version": "1.0.0", 2394 | "bundled": true 2395 | } 2396 | } 2397 | }, 2398 | "mime-db": { 2399 | "version": "1.30.0", 2400 | "bundled": true 2401 | }, 2402 | "mime-types": { 2403 | "version": "2.1.17", 2404 | "bundled": true, 2405 | "requires": { 2406 | "mime-db": "1.30.0" 2407 | } 2408 | }, 2409 | "minimatch": { 2410 | "version": "3.0.4", 2411 | "bundled": true, 2412 | "requires": { 2413 | "brace-expansion": "1.1.8" 2414 | } 2415 | }, 2416 | "minimist": { 2417 | "version": "0.0.8", 2418 | "bundled": true 2419 | }, 2420 | "mkdirp": { 2421 | "version": "0.5.1", 2422 | "bundled": true, 2423 | "requires": { 2424 | "minimist": "0.0.8" 2425 | } 2426 | }, 2427 | "ms": { 2428 | "version": "2.0.0", 2429 | "bundled": true 2430 | }, 2431 | "node-pre-gyp": { 2432 | "version": "0.6.38", 2433 | "bundled": true, 2434 | "requires": { 2435 | "hawk": "3.1.3", 2436 | "mkdirp": "0.5.1", 2437 | "nopt": "4.0.1", 2438 | "npmlog": "4.1.2", 2439 | "rc": "1.2.1", 2440 | "request": "2.81.0", 2441 | "rimraf": "2.6.2", 2442 | "semver": "5.4.1", 2443 | "tar": "2.2.1", 2444 | "tar-pack": "3.4.0" 2445 | } 2446 | }, 2447 | "nopt": { 2448 | "version": "4.0.1", 2449 | "bundled": true, 2450 | "requires": { 2451 | "abbrev": "1.1.1", 2452 | "osenv": "0.1.4" 2453 | } 2454 | }, 2455 | "npmlog": { 2456 | "version": "4.1.2", 2457 | "bundled": true, 2458 | "requires": { 2459 | "are-we-there-yet": "1.1.4", 2460 | "console-control-strings": "1.1.0", 2461 | "gauge": "2.7.4", 2462 | "set-blocking": "2.0.0" 2463 | } 2464 | }, 2465 | "number-is-nan": { 2466 | "version": "1.0.1", 2467 | "bundled": true 2468 | }, 2469 | "oauth-sign": { 2470 | "version": "0.8.2", 2471 | "bundled": true 2472 | }, 2473 | "object-assign": { 2474 | "version": "4.1.1", 2475 | "bundled": true 2476 | }, 2477 | "once": { 2478 | "version": "1.4.0", 2479 | "bundled": true, 2480 | "requires": { 2481 | "wrappy": "1.0.2" 2482 | } 2483 | }, 2484 | "os-homedir": { 2485 | "version": "1.0.2", 2486 | "bundled": true 2487 | }, 2488 | "os-tmpdir": { 2489 | "version": "1.0.2", 2490 | "bundled": true 2491 | }, 2492 | "osenv": { 2493 | "version": "0.1.4", 2494 | "bundled": true, 2495 | "requires": { 2496 | "os-homedir": "1.0.2", 2497 | "os-tmpdir": "1.0.2" 2498 | } 2499 | }, 2500 | "path-is-absolute": { 2501 | "version": "1.0.1", 2502 | "bundled": true 2503 | }, 2504 | "performance-now": { 2505 | "version": "0.2.0", 2506 | "bundled": true 2507 | }, 2508 | "process-nextick-args": { 2509 | "version": "1.0.7", 2510 | "bundled": true 2511 | }, 2512 | "punycode": { 2513 | "version": "1.4.1", 2514 | "bundled": true 2515 | }, 2516 | "qs": { 2517 | "version": "6.4.0", 2518 | "bundled": true 2519 | }, 2520 | "rc": { 2521 | "version": "1.2.1", 2522 | "bundled": true, 2523 | "requires": { 2524 | "deep-extend": "0.4.2", 2525 | "ini": "1.3.4", 2526 | "minimist": "1.2.0", 2527 | "strip-json-comments": "2.0.1" 2528 | }, 2529 | "dependencies": { 2530 | "minimist": { 2531 | "version": "1.2.0", 2532 | "bundled": true 2533 | } 2534 | } 2535 | }, 2536 | "readable-stream": { 2537 | "version": "2.3.3", 2538 | "bundled": true, 2539 | "requires": { 2540 | "core-util-is": "1.0.2", 2541 | "inherits": "2.0.3", 2542 | "isarray": "1.0.0", 2543 | "process-nextick-args": "1.0.7", 2544 | "safe-buffer": "5.1.1", 2545 | "string_decoder": "1.0.3", 2546 | "util-deprecate": "1.0.2" 2547 | } 2548 | }, 2549 | "request": { 2550 | "version": "2.81.0", 2551 | "bundled": true, 2552 | "requires": { 2553 | "aws-sign2": "0.6.0", 2554 | "aws4": "1.6.0", 2555 | "caseless": "0.12.0", 2556 | "combined-stream": "1.0.5", 2557 | "extend": "3.0.1", 2558 | "forever-agent": "0.6.1", 2559 | "form-data": "2.1.4", 2560 | "har-validator": "4.2.1", 2561 | "hawk": "3.1.3", 2562 | "http-signature": "1.1.1", 2563 | "is-typedarray": "1.0.0", 2564 | "isstream": "0.1.2", 2565 | "json-stringify-safe": "5.0.1", 2566 | "mime-types": "2.1.17", 2567 | "oauth-sign": "0.8.2", 2568 | "performance-now": "0.2.0", 2569 | "qs": "6.4.0", 2570 | "safe-buffer": "5.1.1", 2571 | "stringstream": "0.0.5", 2572 | "tough-cookie": "2.3.3", 2573 | "tunnel-agent": "0.6.0", 2574 | "uuid": "3.1.0" 2575 | } 2576 | }, 2577 | "rimraf": { 2578 | "version": "2.6.2", 2579 | "bundled": true, 2580 | "requires": { 2581 | "glob": "7.1.2" 2582 | } 2583 | }, 2584 | "safe-buffer": { 2585 | "version": "5.1.1", 2586 | "bundled": true 2587 | }, 2588 | "semver": { 2589 | "version": "5.4.1", 2590 | "bundled": true 2591 | }, 2592 | "set-blocking": { 2593 | "version": "2.0.0", 2594 | "bundled": true 2595 | }, 2596 | "signal-exit": { 2597 | "version": "3.0.2", 2598 | "bundled": true 2599 | }, 2600 | "sntp": { 2601 | "version": "1.0.9", 2602 | "bundled": true, 2603 | "requires": { 2604 | "hoek": "2.16.3" 2605 | } 2606 | }, 2607 | "sshpk": { 2608 | "version": "1.13.1", 2609 | "bundled": true, 2610 | "requires": { 2611 | "asn1": "0.2.3", 2612 | "assert-plus": "1.0.0", 2613 | "bcrypt-pbkdf": "1.0.1", 2614 | "dashdash": "1.14.1", 2615 | "ecc-jsbn": "0.1.1", 2616 | "getpass": "0.1.7", 2617 | "jsbn": "0.1.1", 2618 | "tweetnacl": "0.14.5" 2619 | }, 2620 | "dependencies": { 2621 | "assert-plus": { 2622 | "version": "1.0.0", 2623 | "bundled": true 2624 | } 2625 | } 2626 | }, 2627 | "string-width": { 2628 | "version": "1.0.2", 2629 | "bundled": true, 2630 | "requires": { 2631 | "code-point-at": "1.1.0", 2632 | "is-fullwidth-code-point": "1.0.0", 2633 | "strip-ansi": "3.0.1" 2634 | } 2635 | }, 2636 | "string_decoder": { 2637 | "version": "1.0.3", 2638 | "bundled": true, 2639 | "requires": { 2640 | "safe-buffer": "5.1.1" 2641 | } 2642 | }, 2643 | "stringstream": { 2644 | "version": "0.0.5", 2645 | "bundled": true 2646 | }, 2647 | "strip-ansi": { 2648 | "version": "3.0.1", 2649 | "bundled": true, 2650 | "requires": { 2651 | "ansi-regex": "2.1.1" 2652 | } 2653 | }, 2654 | "strip-json-comments": { 2655 | "version": "2.0.1", 2656 | "bundled": true 2657 | }, 2658 | "tar": { 2659 | "version": "2.2.1", 2660 | "bundled": true, 2661 | "requires": { 2662 | "block-stream": "0.0.9", 2663 | "fstream": "1.0.11", 2664 | "inherits": "2.0.3" 2665 | } 2666 | }, 2667 | "tar-pack": { 2668 | "version": "3.4.0", 2669 | "bundled": true, 2670 | "requires": { 2671 | "debug": "2.6.9", 2672 | "fstream": "1.0.11", 2673 | "fstream-ignore": "1.0.5", 2674 | "once": "1.4.0", 2675 | "readable-stream": "2.3.3", 2676 | "rimraf": "2.6.2", 2677 | "tar": "2.2.1", 2678 | "uid-number": "0.0.6" 2679 | } 2680 | }, 2681 | "tough-cookie": { 2682 | "version": "2.3.3", 2683 | "bundled": true, 2684 | "requires": { 2685 | "punycode": "1.4.1" 2686 | } 2687 | }, 2688 | "tunnel-agent": { 2689 | "version": "0.6.0", 2690 | "bundled": true, 2691 | "requires": { 2692 | "safe-buffer": "5.1.1" 2693 | } 2694 | }, 2695 | "tweetnacl": { 2696 | "version": "0.14.5", 2697 | "bundled": true, 2698 | "optional": true 2699 | }, 2700 | "uid-number": { 2701 | "version": "0.0.6", 2702 | "bundled": true 2703 | }, 2704 | "util-deprecate": { 2705 | "version": "1.0.2", 2706 | "bundled": true 2707 | }, 2708 | "uuid": { 2709 | "version": "3.1.0", 2710 | "bundled": true 2711 | }, 2712 | "verror": { 2713 | "version": "1.10.0", 2714 | "bundled": true, 2715 | "requires": { 2716 | "assert-plus": "1.0.0", 2717 | "core-util-is": "1.0.2", 2718 | "extsprintf": "1.3.0" 2719 | }, 2720 | "dependencies": { 2721 | "assert-plus": { 2722 | "version": "1.0.0", 2723 | "bundled": true 2724 | } 2725 | } 2726 | }, 2727 | "wide-align": { 2728 | "version": "1.1.2", 2729 | "bundled": true, 2730 | "requires": { 2731 | "string-width": "1.0.2" 2732 | } 2733 | }, 2734 | "wrappy": { 2735 | "version": "1.0.2", 2736 | "bundled": true 2737 | } 2738 | } 2739 | }, 2740 | "statuses": { 2741 | "version": "1.5.0", 2742 | "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", 2743 | "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" 2744 | }, 2745 | "string-width": { 2746 | "version": "2.1.1", 2747 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", 2748 | "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", 2749 | "requires": { 2750 | "is-fullwidth-code-point": "2.0.0", 2751 | "strip-ansi": "4.0.0" 2752 | }, 2753 | "dependencies": { 2754 | "ansi-regex": { 2755 | "version": "3.0.0", 2756 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", 2757 | "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" 2758 | }, 2759 | "is-fullwidth-code-point": { 2760 | "version": "2.0.0", 2761 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", 2762 | "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" 2763 | }, 2764 | "strip-ansi": { 2765 | "version": "4.0.0", 2766 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", 2767 | "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", 2768 | "requires": { 2769 | "ansi-regex": "3.0.0" 2770 | } 2771 | } 2772 | } 2773 | }, 2774 | "string_decoder": { 2775 | "version": "1.0.3", 2776 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", 2777 | "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", 2778 | "dev": true, 2779 | "requires": { 2780 | "safe-buffer": "5.1.1" 2781 | } 2782 | }, 2783 | "strip-ansi": { 2784 | "version": "3.0.1", 2785 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", 2786 | "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", 2787 | "requires": { 2788 | "ansi-regex": "2.1.1" 2789 | } 2790 | }, 2791 | "strip-bom": { 2792 | "version": "3.0.0", 2793 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 2794 | "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" 2795 | }, 2796 | "strip-eof": { 2797 | "version": "1.0.0", 2798 | "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", 2799 | "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" 2800 | }, 2801 | "superagent": { 2802 | "version": "2.3.0", 2803 | "resolved": "https://registry.npmjs.org/superagent/-/superagent-2.3.0.tgz", 2804 | "integrity": "sha1-cDUpoHFOV+EjlZ3e+84ZOy5Q0RU=", 2805 | "dev": true, 2806 | "requires": { 2807 | "component-emitter": "1.2.1", 2808 | "cookiejar": "2.1.1", 2809 | "debug": "2.6.9", 2810 | "extend": "3.0.1", 2811 | "form-data": "1.0.0-rc4", 2812 | "formidable": "1.2.1", 2813 | "methods": "1.1.2", 2814 | "mime": "1.4.1", 2815 | "qs": "6.5.1", 2816 | "readable-stream": "2.3.5" 2817 | }, 2818 | "dependencies": { 2819 | "debug": { 2820 | "version": "2.6.9", 2821 | "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", 2822 | "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", 2823 | "dev": true, 2824 | "requires": { 2825 | "ms": "2.0.0" 2826 | } 2827 | } 2828 | } 2829 | }, 2830 | "supertest": { 2831 | "version": "2.0.1", 2832 | "resolved": "https://registry.npmjs.org/supertest/-/supertest-2.0.1.tgz", 2833 | "integrity": "sha1-oFgIHXiPFRXUcA11Aogea3WeRM0=", 2834 | "dev": true, 2835 | "requires": { 2836 | "methods": "1.1.2", 2837 | "superagent": "2.3.0" 2838 | } 2839 | }, 2840 | "supports-color": { 2841 | "version": "3.1.2", 2842 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.1.2.tgz", 2843 | "integrity": "sha1-cqJiiU2dQIuVbKBf83su2KbiotU=", 2844 | "dev": true, 2845 | "requires": { 2846 | "has-flag": "1.0.0" 2847 | } 2848 | }, 2849 | "terraformer": { 2850 | "version": "1.0.8", 2851 | "resolved": "https://registry.npmjs.org/terraformer/-/terraformer-1.0.8.tgz", 2852 | "integrity": "sha1-UeCtiXRvzyFh3G9lqnDkI3fItZM=", 2853 | "requires": { 2854 | "@types/geojson": "1.0.6" 2855 | } 2856 | }, 2857 | "terraformer-wkt-parser": { 2858 | "version": "1.1.2", 2859 | "resolved": "https://registry.npmjs.org/terraformer-wkt-parser/-/terraformer-wkt-parser-1.1.2.tgz", 2860 | "integrity": "sha1-M2oMj8gglKWv+DKI9prt7NNpvww=", 2861 | "requires": { 2862 | "terraformer": "1.0.8" 2863 | } 2864 | }, 2865 | "through": { 2866 | "version": "2.3.8", 2867 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", 2868 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" 2869 | }, 2870 | "timers-ext": { 2871 | "version": "0.1.5", 2872 | "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.5.tgz", 2873 | "integrity": "sha512-tsEStd7kmACHENhsUPaxb8Jf8/+GZZxyNFQbZD07HQOyooOa6At1rQqjffgvg7n+dxscQa9cjjMdWhJtsP2sxg==", 2874 | "requires": { 2875 | "es5-ext": "0.10.42", 2876 | "next-tick": "1.0.0" 2877 | } 2878 | }, 2879 | "to-fast-properties": { 2880 | "version": "1.0.3", 2881 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-1.0.3.tgz", 2882 | "integrity": "sha1-uDVx+k2MJbguIxsG46MFXeTKGkc=" 2883 | }, 2884 | "token-stream": { 2885 | "version": "0.0.1", 2886 | "resolved": "https://registry.npmjs.org/token-stream/-/token-stream-0.0.1.tgz", 2887 | "integrity": "sha1-zu78cXp2xDFvEm0LnbqlXX598Bo=" 2888 | }, 2889 | "toposort-class": { 2890 | "version": "1.0.1", 2891 | "resolved": "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz", 2892 | "integrity": "sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=" 2893 | }, 2894 | "type-is": { 2895 | "version": "1.6.16", 2896 | "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.16.tgz", 2897 | "integrity": "sha512-HRkVv/5qY2G6I8iab9cI7v1bOIdhm94dVjQCPFElW9W+3GeDOSHmy2EBYe4VTApuzolPcmgFTN3ftVJRKR2J9Q==", 2898 | "requires": { 2899 | "media-typer": "0.3.0", 2900 | "mime-types": "2.1.18" 2901 | } 2902 | }, 2903 | "uglify-js": { 2904 | "version": "2.8.29", 2905 | "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-2.8.29.tgz", 2906 | "integrity": "sha1-KcVzMUgFe7Th913zW3qcty5qWd0=", 2907 | "requires": { 2908 | "source-map": "0.5.7", 2909 | "uglify-to-browserify": "1.0.2", 2910 | "yargs": "3.10.0" 2911 | } 2912 | }, 2913 | "uglify-to-browserify": { 2914 | "version": "1.0.2", 2915 | "resolved": "https://registry.npmjs.org/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz", 2916 | "integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=", 2917 | "optional": true 2918 | }, 2919 | "umzug": { 2920 | "version": "2.1.0", 2921 | "resolved": "https://registry.npmjs.org/umzug/-/umzug-2.1.0.tgz", 2922 | "integrity": "sha512-BgT+ekpItEWaG+3JjLLj6yVTxw2wIH8Cr6JyKYIzukWAx9nzGhC6BGHb/IRMjpobMM1qtIrReATwLUjKpU2iOQ==", 2923 | "requires": { 2924 | "babel-runtime": "6.26.0", 2925 | "bluebird": "3.5.1", 2926 | "lodash": "4.17.5", 2927 | "resolve": "1.6.0" 2928 | } 2929 | }, 2930 | "universalify": { 2931 | "version": "0.1.1", 2932 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.1.tgz", 2933 | "integrity": "sha1-+nG63UQ3r0wUiEHjs7Fl+enlkLc=" 2934 | }, 2935 | "unpipe": { 2936 | "version": "1.0.0", 2937 | "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", 2938 | "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" 2939 | }, 2940 | "util-deprecate": { 2941 | "version": "1.0.2", 2942 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", 2943 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", 2944 | "dev": true 2945 | }, 2946 | "utils-merge": { 2947 | "version": "1.0.1", 2948 | "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", 2949 | "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" 2950 | }, 2951 | "uuid": { 2952 | "version": "3.2.1", 2953 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", 2954 | "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==" 2955 | }, 2956 | "validate-npm-package-license": { 2957 | "version": "3.0.3", 2958 | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.3.tgz", 2959 | "integrity": "sha512-63ZOUnL4SIXj4L0NixR3L1lcjO38crAbgrTpl28t8jjrfuiOBL5Iygm+60qPs/KsZGzPNg6Smnc/oY16QTjF0g==", 2960 | "requires": { 2961 | "spdx-correct": "3.0.0", 2962 | "spdx-expression-parse": "3.0.0" 2963 | } 2964 | }, 2965 | "validator": { 2966 | "version": "5.7.0", 2967 | "resolved": "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz", 2968 | "integrity": "sha1-eoelgUa2laxIYHEUHAxJ1n2gXlw=" 2969 | }, 2970 | "vary": { 2971 | "version": "1.1.2", 2972 | "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", 2973 | "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" 2974 | }, 2975 | "void-elements": { 2976 | "version": "2.0.1", 2977 | "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", 2978 | "integrity": "sha1-wGavtYK7HLQSjWDqkjkulNXp2+w=" 2979 | }, 2980 | "which": { 2981 | "version": "1.3.0", 2982 | "resolved": "https://registry.npmjs.org/which/-/which-1.3.0.tgz", 2983 | "integrity": "sha512-xcJpopdamTuY5duC/KnTTNBraPK54YwpenP4lzxU8H91GudWpFv38u0CKjclE1Wi2EH2EDz5LRcHcKbCIzqGyg==", 2984 | "requires": { 2985 | "isexe": "2.0.0" 2986 | } 2987 | }, 2988 | "which-module": { 2989 | "version": "2.0.0", 2990 | "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", 2991 | "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=" 2992 | }, 2993 | "window-size": { 2994 | "version": "0.1.0", 2995 | "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.1.0.tgz", 2996 | "integrity": "sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0=" 2997 | }, 2998 | "with": { 2999 | "version": "5.1.1", 3000 | "resolved": "https://registry.npmjs.org/with/-/with-5.1.1.tgz", 3001 | "integrity": "sha1-+k2qktrzLE6pTtRTyB8EaGtXXf4=", 3002 | "requires": { 3003 | "acorn": "3.3.0", 3004 | "acorn-globals": "3.1.0" 3005 | } 3006 | }, 3007 | "wkx": { 3008 | "version": "0.2.0", 3009 | "resolved": "https://registry.npmjs.org/wkx/-/wkx-0.2.0.tgz", 3010 | "integrity": "sha1-dsJPFqzQzY+TzTSqMx4PeWElboQ=" 3011 | }, 3012 | "wordwrap": { 3013 | "version": "0.0.2", 3014 | "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.2.tgz", 3015 | "integrity": "sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8=" 3016 | }, 3017 | "wrap-ansi": { 3018 | "version": "2.1.0", 3019 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", 3020 | "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", 3021 | "requires": { 3022 | "string-width": "1.0.2", 3023 | "strip-ansi": "3.0.1" 3024 | }, 3025 | "dependencies": { 3026 | "string-width": { 3027 | "version": "1.0.2", 3028 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", 3029 | "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", 3030 | "requires": { 3031 | "code-point-at": "1.1.0", 3032 | "is-fullwidth-code-point": "1.0.0", 3033 | "strip-ansi": "3.0.1" 3034 | } 3035 | } 3036 | } 3037 | }, 3038 | "wrappy": { 3039 | "version": "1.0.2", 3040 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3041 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 3042 | "dev": true 3043 | }, 3044 | "xtend": { 3045 | "version": "4.0.1", 3046 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz", 3047 | "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" 3048 | }, 3049 | "y18n": { 3050 | "version": "3.2.1", 3051 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", 3052 | "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=" 3053 | }, 3054 | "yallist": { 3055 | "version": "2.1.2", 3056 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", 3057 | "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" 3058 | }, 3059 | "yargs": { 3060 | "version": "3.10.0", 3061 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-3.10.0.tgz", 3062 | "integrity": "sha1-9+572FfdfB0tOMDnTvvWgdFDH9E=", 3063 | "requires": { 3064 | "camelcase": "1.2.1", 3065 | "cliui": "2.1.0", 3066 | "decamelize": "1.2.0", 3067 | "window-size": "0.1.0" 3068 | } 3069 | }, 3070 | "yargs-parser": { 3071 | "version": "7.0.0", 3072 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", 3073 | "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", 3074 | "requires": { 3075 | "camelcase": "4.1.0" 3076 | }, 3077 | "dependencies": { 3078 | "camelcase": { 3079 | "version": "4.1.0", 3080 | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", 3081 | "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" 3082 | } 3083 | } 3084 | } 3085 | } 3086 | } 3087 | --------------------------------------------------------------------------------