diff --git a/server-api/app.js b/server-api/app.js
index 7799b94..8da7bbe 100644
--- a/server-api/app.js
+++ b/server-api/app.js
@@ -1,57 +1,56 @@
-const koa = require('koa');
-const path = require('path');
-const fs = require('fs');
-const mongoose = require('mongoose');
+const Koa = require('koa')
+const path = require('path')
+const mongoose = require('mongoose')
// Load config
-const config = require('./config.json');
+const config = require('./config.json')
// custom modules
-const mysql = require('./libs/mysql_pool');
-const so = require('./libs/storeObject');
-const mem = require('./libs/memcache_lib');
-const sendmail = require('./libs/sendmail');
+const mysql = require('./libs/mysql_pool')
+// const so = require('./libs/storeObject')
+const mem = require('./libs/memcache_lib')
+// const sendmail = require('./libs/sendmail')
// init memcached connection
-mem.host = 'dyn.trj.tw';
-mem.port = 24002;
-mem.connect();
+mem.host = 'dyn.trj.tw'
+mem.port = 24002
+mem.connect()
// init mysql connection pool
-mysql.database = config.db.mysql.dbname;
-mysql.host = config.db.mysql.host;
-mysql.user = config.db.mysql.user;
-mysql.password = config.db.mysql.pass;
-mysql.port = config.db.mysql.port;
-mysql.createPool();
+mysql.database = config.db.mysql.dbname
+mysql.host = config.db.mysql.host
+mysql.user = config.db.mysql.user
+mysql.password = config.db.mysql.pass
+mysql.port = config.db.mysql.port
+mysql.createPool()
// init mongodb connection
-let mongoAuth = `${config.db.mongo.user.length > 0 && config.db.mongo.pass.length > 0 ? `${config.db.mongo.user}:${config.db.mongo.pass}@` : ''}`;
-let mongoUrl = `mongodb://${mongoAuth}${config.db.mongo.host}:${config.db.mongo.port}/${config.db.mongo.dbname}${mongoAuth.length > 0 ? '?authSource=admin': ''}`;
-mongoose.connect(mongoUrl);
+let mongoAuth = `${config.db.mongo.user.length > 0 && config.db.mongo.pass.length > 0 ? `${config.db.mongo.user}:${config.db.mongo.pass}@` : ''}`
+let mongoUrl = `mongodb://${mongoAuth}${config.db.mongo.host}:${config.db.mongo.port}/${config.db.mongo.dbname}${mongoAuth.length > 0 ? '?authSource=admin' : ''}`
+mongoose.connect(mongoUrl)
// Koa Middleware
-const session = require('koa-session');
-const Router = require('koa-router');
-const koaBody = require('koa-body');
-const koaStatic = require('koa-static');
-const cors = require('kcors');
-const logger = require('koa-morgan');
+const session = require('koa-session')
+const Router = require('koa-router')
+// const koaBody = require('koa-body')
+const koaStatic = require('koa-static')
+const cors = require('kcors')
+const logger = require('koa-morgan')
// Koa Main Application
-const app = new koa();
+const app = new Koa()
const server = app.listen(config.port, () => {
- console.log(`Server start on port ${server.address().port}`);
-});
+ console.log(`Server start on port ${server.address().port}`)
+})
// Root Router
-const router = new Router();
+const router = new Router()
-// set app keys
-app.keys = ['44b4fa5cb8a394294361'];
+// set app keys
+app.keys = ['44b4fa5cb8a394294361']
// enable logger
-app.use(logger('dev'));
+app.use(logger('dev'))
// enable body parser
// app.use(koaBody({
// multipart: true,
@@ -59,27 +58,27 @@ app.use(logger('dev'));
// maxFieldSize: 10 * 1024 * 1024
// }));
// enable cors
-app.use(cors());
+app.use(cors())
// enable session
app.use(session({
- key: 'koa:sess',
- maxAge: 86400000,
- overwrite: true,
- httpOnly: true,
- signed: true
-}, app));
-// enable static file
-app.use(koaStatic(path.resolve(__dirname, 'public')));
+ key: 'koa:sess',
+ maxAge: 86400000,
+ overwrite: true,
+ httpOnly: true,
+ signed: true
+}, app))
+// enable static file
+app.use(koaStatic(path.resolve(__dirname, 'public')))
// enable router
-app.use(router.routes());
-app.use(router.allowedMethods());
+app.use(router.routes())
+app.use(router.allowedMethods())
// load other route
-const api_route = require('./route/api');
+const apiRoute = require('./route/api')
// set other route
-router.use("/api", api_route.routes());
+router.use('/api', apiRoute.routes())
router.get('/', async(c, n) => {
- c.body = 'Get root';
-});
\ No newline at end of file
+ c.body = 'Get root'
+})
diff --git a/server-api/libs/crypto.js b/server-api/libs/crypto.js
index 45a073f..0414d6a 100644
--- a/server-api/libs/crypto.js
+++ b/server-api/libs/crypto.js
@@ -1,48 +1,48 @@
-var crypto = require('crypto');
+var crypto = require('crypto')
/**
- *
- * @param {number} len
+ *
+ * @param {number} len
*/
var random = (len = 32) => {
- var buf = crypto.randomBytes(len);
- return buf.toString("hex");
+ var buf = crypto.randomBytes(len)
+ return buf.toString('hex')
}
/**
- *
- * @param {string} str
+ *
+ * @param {string} str
*/
var sha256 = (str) => {
- return crypto.createHash("sha256").update(str).digest('base64');
+ return crypto.createHash('sha256').update(str).digest('base64')
}
/**
- *
- * @param {string} str
+ *
+ * @param {string} str
*/
var genPassHash = (str) => {
- var hash = random(16);
- var pass = sha256(str + hash);
- return `$${hash}$${pass}`;
+ var hash = random(16)
+ var pass = sha256(str + hash)
+ return `$${hash}$${pass}`
}
/**
- *
- * @param {string} plain
- * @param {string} hash
+ *
+ * @param {string} plain
+ * @param {string} hash
*/
var comparePass = (plain, hash) => {
- var match = hash.match(/^\$(.+?)\$(.+)$/);
- if (match == null || match.length < 3 || !match[1] || !match[2]) return false;
- var pass = sha256(plain + match[1]);
- if (pass == match[2]) return true;
- return false;
+ var match = hash.match(/^\$(.+?)\$(.+)$/)
+ if (match == null || match.length < 3 || !match[1] || !match[2]) return false
+ var pass = sha256(plain + match[1])
+ if (pass === match[2]) return true
+ return false
}
module.exports = {
- random,
- sha256,
- genPassHash,
- comparePass
-}
\ No newline at end of file
+ random,
+ sha256,
+ genPassHash,
+ comparePass
+}
diff --git a/server-api/libs/memcache_lib.js b/server-api/libs/memcache_lib.js
index 0ed06b2..69db86c 100644
--- a/server-api/libs/memcache_lib.js
+++ b/server-api/libs/memcache_lib.js
@@ -1,48 +1,48 @@
-const Memcached = require('memcached');
+const Memcached = require('memcached')
-class memcachedLib {
- constructor() {
- this._host = ''
- this._port = ''
- this._expire = 86400
- this._conn = null;
- }
+class MemcachedLib {
+ constructor () {
+ this._host = ''
+ this._port = ''
+ this._expire = 86400
+ this._conn = null
+ }
- connect() {
- this._conn = new Memcached(`${this._host}:${this._port}`)
- }
+ connect () {
+ this._conn = new Memcached(`${this._host}:${this._port}`)
+ }
/**
* set object to memcached
- * @param {string} key
- * @param {string} val
- * @param {number} expire
+ * @param {string} key
+ * @param {string} val
+ * @param {number} expire
*/
- async setVal(key, val, expire = this._expire) {
- return new Promise((resolve, reject) => {
- this._conn.set(key, val, expire, err => {
- if (err) return reject(err);
- return resolve(null);
- })
- })
- }
+ async setVal (key, val, expire = this._expire) {
+ return new Promise((resolve, reject) => {
+ this._conn.set(key, val, expire, err => {
+ if (err) return reject(err)
+ return resolve(null)
+ })
+ })
+ }
/**
* get object from memcached
- * @param {string} key
+ * @param {string} key
*/
- async getVal(key) {
- return new Promise((resolve, reject) => {
- this._conn.get(key, (err, data) => {
- if (err) return reject(err);
- return resolve(data);
- })
- })
- }
+ async getVal (key) {
+ return new Promise((resolve, reject) => {
+ this._conn.get(key, (err, data) => {
+ if (err) return reject(err)
+ return resolve(data)
+ })
+ })
+ }
- set host(str) { this._host = str }
- set port(str) { this._port = str }
- set expire(str) { this._expire = str }
+ set host (str) { this._host = str }
+ set port (str) { this._port = str }
+ set expire (str) { this._expire = str }
}
-module.exports = new memcachedLib();
\ No newline at end of file
+module.exports = new MemcachedLib()
diff --git a/server-api/libs/mongo_model.js b/server-api/libs/mongo_model.js
index c93db6d..9183011 100644
--- a/server-api/libs/mongo_model.js
+++ b/server-api/libs/mongo_model.js
@@ -1,40 +1,40 @@
-const mongoose = require('mongoose');
+const mongoose = require('mongoose')
const tokenSchema = mongoose.Schema({
- object: Object,
- expire: {
- type: Number,
- default: Date.now
- }
-});
+ object: Object,
+ expire: {
+ type: Number,
+ default: Date.now
+ }
+})
tokenSchema.statics.clearExpire = function (cb) {
- console.log(Date.now())
- return this.remove({ expire: { $lte: Date.now() } }, cb);
+ console.log(Date.now())
+ return this.remove({ expire: { $lte: Date.now() } }, cb)
}
tokenSchema.statics.renewToken = function (id, expire, cb) {
- return this.update({ _id: mongoose.Schema.Types.ObjectId(id) }, { $set: { expire: Date.now() + 86400000 } }, cb);
+ return this.update({ _id: mongoose.Schema.Types.ObjectId(id) }, { $set: { expire: Date.now() + 86400000 } }, cb)
}
tokenSchema.statics.checkToken = async function (str) {
- let self = this;
- return new Promise((resolve, reject) => {
- self.findOne({ _id: str, expire: { $gte: Date.now() } }, (err, row) => {
- if (err || !row) return resolve(false);
- return resolve(true);
- });
+ let self = this
+ return new Promise((resolve, reject) => {
+ self.findOne({ _id: str, expire: { $gte: Date.now() } }, (err, row) => {
+ if (err || !row) return resolve(false)
+ return resolve(true)
})
+ })
}
tokenSchema.statics.getToken = async function (str) {
- let self = this;
- return new Promise((resolve, reject) => {
- self.findOne({ _id: str, expire: { $gte: Date.now() } }, (err, row) => {
- if (err) return reject(err);
- return resolve(row);
- })
+ let self = this
+ return new Promise((resolve, reject) => {
+ self.findOne({ _id: str, expire: { $gte: Date.now() } }, (err, row) => {
+ if (err) return reject(err)
+ return resolve(row)
})
+ })
}
-const token = mongoose.model('token', tokenSchema, 'token');
+const Token = mongoose.model('token', tokenSchema, 'token')
module.exports = {
- token
-}
\ No newline at end of file
+ Token
+}
diff --git a/server-api/libs/mysql_pool.js b/server-api/libs/mysql_pool.js
index 2c36334..14b153b 100644
--- a/server-api/libs/mysql_pool.js
+++ b/server-api/libs/mysql_pool.js
@@ -1,89 +1,88 @@
-const mysql = require('mysql');
+const mysql = require('mysql')
class MySQLPool {
- constructor() {
- this._user = '';
- this._password = '';
- this._host = '';
- this._port = 3306;
- this._database = '';
- this._socketPath = ''
- this._pool = null;
- this.autoclose = false;
- this._useSocket = false;
+ constructor () {
+ this._user = ''
+ this._password = ''
+ this._host = ''
+ this._port = 3306
+ this._database = ''
+ this._socketPath = ''
+ this._pool = null
+ this.autoclose = false
+ this._useSocket = false
+ }
+
+ createPool () {
+ let json = {
+ connectionLimit: 30,
+ user: this._user,
+ password: this._password,
+ host: this._host,
+ port: this._port,
+ socketPath: this._socketPath
+ }
+ if (this._useSocket) {
+ delete json.host
+ delete json.port
+ } else {
+ delete json.socketPath
+ }
+ this._pool = mysql.createPool(json)
+ }
+
+ async getConn () {
+ return new Promise((resolve, reject) => {
+ this._pool.getConnection((err, conn) => {
+ if (err) return reject(err)
+ return resolve(conn)
+ })
+ })
+ }
+
+ formatQuery (query, arg) {
+ return mysql.format(query, arg)
+ }
+
+ escape (val) {
+ return mysql.escape(val)
+ }
+
+ recordPage (rows, page, maxPage) {
+ if (!page || !isFinite(page) || page < 1) page = 1
+
+ let totalPage = Math.ceil(rows / maxPage)
+
+ let prevPage = page - 1
+ let nextPage = page + 1
+
+ if (prevPage < 1) prevPage = 1
+ if (nextPage > totalPage) nextPage = totalPage
+
+ let recStart = (page - 1) * maxPage + 1
+ let recEnd = (recStart + maxPage - 1)
+ if (recEnd > rows) recEnd = rows
+
+ let json = {
+ recStart,
+ recEnd,
+ total: rows,
+ prevPage,
+ nextPage,
+ totalPage,
+ page
}
- createPool() {
- let json = {
- connectionLimit: 30,
- user: this._user,
- password: this._password,
- host: this._host,
- port: this._port,
- socketPath: this._socketPath
- };
- if (this._useSocket) {
- delete json.host;
- delete json.port;
- } else {
- delete json.socketPath;
- }
- this._pool = mysql.createPool(json);
- }
+ return json
+ }
- async getConn() {
- return new Promise((resolve, reject) => {
- this._pool.getConnection((err, conn) => {
- if (err) return reject(err);
- return resolve(conn)
- })
- })
- }
-
- formatQuery(query, arg) {
- return mysql.format(query, arg);
- }
-
- escape(val) {
- return mysql.escape(val);
- }
-
- recordPage(rows, page, maxPage) {
- if (!page || !isFinite(page) || page < 1) page = 1;
-
- let totalpage = Math.ceil(rows / maxPage);
-
- let prevpage = page - 1;
- let nextpage = page + 1;
-
- if (prevpage < 1) prevpage = 1;
- if (nextpage > totalpage) nextpage = totalpage;
-
- let rec_start = (page - 1) * maxPage + 1
- let rec_end = (rec_start + maxPage - 1);
- if (rec_end > rows) rec_end = rows;
-
- let json = {
- rec_start,
- rec_end,
- total: rows,
- prevpage,
- nextpage,
- totalpage,
- page
- };
-
- return json;
- }
-
- set user(str) { this._user = str; }
- set host(str) { this._host = str; }
- set password(str) { this._password = str; }
- set port(str) { this._port = str; }
- set database(str) { this._database = str; }
+ set user (str) { this._user = str }
+ set host (str) { this._host = str }
+ set password (str) { this._password = str }
+ set port (str) { this._port = str }
+ set database (str) { this._database = str }
}
-
// let Pool = ((opts) => {
// let defOpts = {
// user: 'root',
@@ -116,4 +115,4 @@ class MySQLPool {
// return pool
// })()
-module.exports = new MySQLPool();
\ No newline at end of file
+module.exports = new MySQLPool()
diff --git a/server-api/libs/sendmail.js b/server-api/libs/sendmail.js
index 816f217..945a840 100644
--- a/server-api/libs/sendmail.js
+++ b/server-api/libs/sendmail.js
@@ -1,35 +1,35 @@
-const nodemailer = require('nodemailer');
-const config = require('../config.json');
-const util = require('util');
+const nodemailer = require('nodemailer')
+const config = require('../config.json')
+const util = require('util')
module.exports = async(toMail, template = {}, data = []) => {
- let transporter = nodemailer.createTransport({
- host: config.smtp.host,
- port: config.smtp.port,
- secure: config.smtp.secure, // secure:true for port 465, secure:false for port 587
- auth: {
- user: config.smtp.user,
- pass: config.smtp.pass
- }
- });
+ let transporter = nodemailer.createTransport({
+ host: config.smtp.host,
+ port: config.smtp.port,
+ secure: config.smtp.secure, // secure:true for port 465, secure:false for port 587
+ auth: {
+ user: config.smtp.user,
+ pass: config.smtp.pass
+ }
+ })
// setup email data with unicode symbols
- let mailOptions = {
- from: config.smtp.sys_mail, // sender address
- to: toMail, // list of receivers
- subject: template.title || '', // Subject line
- text: template.text ? util.format(template.text, ...data) : '', // plain text body
- html: template.html ? util.format(template.html, ...data) : '' // html body
- };
+ let mailOptions = {
+ from: config.smtp.sys_mail, // sender address
+ to: toMail, // list of receivers
+ subject: template.title || '', // Subject line
+ text: template.text ? util.format(template.text, ...data) : '', // plain text body
+ html: template.html ? util.format(template.html, ...data) : '' // html body
+ }
- return new Promise((resolve, reject) => {
+ return new Promise((resolve, reject) => {
// send mail with defined transport object
- transporter.sendMail(mailOptions, (error, info) => {
- if (error) {
- return reject(error);
- }
+ transporter.sendMail(mailOptions, (error, info) => {
+ if (error) {
+ return reject(error)
+ }
// console.log('Mepassage %s sent: %s', info.messageId, info.response);
- return resolve(info);
- });
- });
-}
\ No newline at end of file
+ return resolve(info)
+ })
+ })
+}
diff --git a/server-api/libs/storeObject.js b/server-api/libs/storeObject.js
index 11ed6bc..93b7d53 100644
--- a/server-api/libs/storeObject.js
+++ b/server-api/libs/storeObject.js
@@ -1,68 +1,74 @@
const StoreObj = (() => {
+ let memStore = {}
+ let maxAge = 86400000
- let memStore = {};
- let maxAge = 86400000;
-
- /**
- * @param {string} uuid
- * @param {object} obj
- */
- const set = (uuid, obj) => {
- memStore[uuid] = {
- obj,
- age: Date.now() + maxAge
- }
+ /**
+ * @param {string} uuid
+ * @param {object} obj
+ */
+ const set = (uuid, obj) => {
+ memStore[uuid] = {
+ obj,
+ age: Date.now() + maxAge
}
+ }
- /**
- * @param {string} uuid
- */
- const get = (uuid) => {
- if (uuid in memStore) {
- let s = memStore[uuid];
- if (Date.now() < s.age) {
- s.age = Date.now() + maxAge;
- return s.obj;
- } else {
- delete memStore[uuid];
- }
- }
- return null;
+ /**
+ * @param {string} uuid
+ */
+ const get = (uuid) => {
+ if (uuid in memStore) {
+ let s = memStore[uuid]
+ if (Date.now() < s.age) {
+ s.age = Date.now() + maxAge
+ return s.obj
+ } else {
+ delete memStore[uuid]
+ }
}
+ return null
+ }
- /**
- * @param {string} uuid
- */
- const chkKey = (uuid) => {
- if (uuid in memStore) return true;
- return false;
+ /**
+ * @param {string} uuid
+ */
+ const chkKey = (uuid) => {
+ if (uuid in memStore) return true
+ return false
+ }
+
+ /**
+ * @param {string} uuid
+ */
+ const del = (uuid) => {
+ if (uuid in memStore) delete memStore[uuid]
+ }
+
+ const clear = () => {
+ let t = Date.now()
+ for (var i in memStore) {
+ let s = memStore[i]
+ if (s.age < t) delete memStore[i]
}
+ }
- /**
- * @param {string} uuid
- */
- const del = (uuid) => {
- if (uuid in memStore) delete memStore[uuid];
- }
+ /**
+ * @param {string} uuid if not input return all
+ */
+ const show = (uuid) => {
+ if (uuid && uuid in memStore) return memStore[uuid]
- const clear = () => {
- let t = Date.now();
- for (var i in memStore) {
- let s = memStore[i];
- if (s.age < t) delete memStore[i];
- }
- }
+ return memStore
+ }
- /**
- * @param {string} uuid if not input return all
- */
- const show = (uuid) => {
- if (uuid && uuid in memStore) return memStore[uuid];
-
- return memStore;
- }
-
- return {set, get, chkKey, clear, del, show };
+ return {
+ set,
+ get,
+ chkKey,
+ clear,
+ del,
+ show
+ }
})()
-module.exports = StoreObj;
\ No newline at end of file
+module.exports = StoreObj
diff --git a/server-api/package.json b/server-api/package.json
index 615e8f3..ce370a7 100644
--- a/server-api/package.json
+++ b/server-api/package.json
@@ -4,6 +4,9 @@
"main": "app.js",
"author": "UrWind",
"license": "MIT",
+ "scripts": {
+ "check": "standard --fix --verbose"
+ },
"dependencies": {
"kcors": "2",
"koa": "^2.2.0",
@@ -16,5 +19,8 @@
"mongoose": "^4.10.4",
"mysql": "^2.13.0",
"nodemailer": "^4.0.1"
+ },
+ "devDependencies": {
+ "standard": "^10.0.2"
}
}
diff --git a/server-api/route/api/account.js b/server-api/route/api/account.js
index d3e309f..fe6a9a7 100644
--- a/server-api/route/api/account.js
+++ b/server-api/route/api/account.js
@@ -1,194 +1,193 @@
-const Router = require('koa-router');
-const router = new Router();
+/* eslint-disable no-throw-literal */
+/* eslint-env es6 */
+/* eslint-disable no-multi-str */
+const Router = require('koa-router')
+const router = new Router()
-// import tools
-const crypto = require('../../libs/crypto.js');
-const so = require('../../libs/storeObject');
-const mongo = require('../../libs/mongo_model.js');
-const mem = require('../../libs/memcache_lib');
-const msgMng = require('./msgManager');
-const sendmail = require('../../libs/sendmail');
+// import tools
+const crypto = require('../../libs/crypto.js')
+// const so = require('../../libs/storeObject')
+const mongo = require('../../libs/mongo_model.js')
+const mem = require('../../libs/memcache_lib')
+const msgMng = require('./msgManager')
+const sendmail = require('../../libs/sendmail')
router
.post('/user', async(c, n) => {
- let arr = c.request.body;
- if (!arr.data) throw 'CE0000';
- if (!arr.data.account) throw 'CE0001';
- if (!arr.data.password) throw 'CE00002';
- if (!arr.data.name) throw 'CE0004';
- if (!arr.data.email) throw 'CE0005';
+ let arr = c.request.body
+ if (!arr.data) throw 'CE0000'
+ if (!arr.data.account) throw 'CE0001'
+ if (!arr.data.password) throw 'CE00002'
+ if (!arr.data.name) throw 'CE0004'
+ if (!arr.data.email) throw 'CE0005'
- try {
- let query = "select count(*) as c from ??.?? where `account` = ?";
- let param = ['lora', 'user', arr.data.account];
- let count = await c.syncQuery(query, param);
- if (count.length == 0) throw 'SE0000';
- if (count[0].c > 0) throw 'CE0006';
- } catch (err) {
- if (typeof err == 'string') throw err;
- c.serr = err;
- throw 'SE0000';
- }
+ try {
+ let query = 'select count(*) as c from ??.?? where `account` = ?'
+ let param = ['lora', 'user', arr.data.account]
+ let count = await c.syncQuery(query, param)
+ if (count.length === 0) throw 'SE0000'
+ if (count[0].c > 0) throw 'CE0006'
+ } catch (err) {
+ if (typeof err === 'string') throw err
+ c.serr = err
+ throw 'SE0000'
+ }
- let uid = 0;
- try {
- let query = "insert into ??.?? (`account`, `password`, `name`, `email`) values (?, ?, ?, ?)";
- let param = ['lora', 'user', arr.data.account, arr.data.password, arr.data.name, arr.data.email];
- let indata = await c.syncQuery(query, param);
- uid = indata.insertId;
- } catch (err) {
- if (typeof err == 'string') throw err;
- c.serr = err;
- throw 'SE0001';
- }
+ let uid = 0
+ try {
+ let query = 'insert into ??.?? (`account`, `password`, `name`, `email`) values (?, ?, ?, ?)'
+ let param = ['lora', 'user', arr.data.account, arr.data.password, arr.data.name, arr.data.email]
+ let indata = await c.syncQuery(query, param)
+ uid = indata.insertId
+ } catch (err) {
+ if (typeof err === 'string') throw err
+ c.serr = err
+ throw 'SE0001'
+ }
- c.body = {
- record: [{ uid }]
- }
+ c.body = {
+ record: [{ uid }]
+ }
})
.get('/user/:uid', async(c, n) => {
- if (!await mongo.token.checkToken(c.token)) throw 'CE1000';
- try {
- let t = await mongo.token.getToken(c.token);
- if (t.object.uid != c.params.uid) throw 'CE2000';
- } catch (err) {
- if (typeof err == 'string') throw err;
- c.serr = err;
- throw 'SE0000';
- }
+ if (!await mongo.Token.checkToken(c.token)) throw 'CE1000'
+ try {
+ let t = await mongo.Token.getToken(c.token)
+ if (t.object.uid !== c.params.uid) throw 'CE2000'
+ } catch (err) {
+ if (typeof err === 'string') throw err
+ c.serr = err
+ throw 'SE0000'
+ }
- try {
- let user = await c.syncQuery('select `uid`,`account`,`name`,`email` from ??.?? where `uid` = ?', ['lora', 'user', c.params.uid]);
-
- c.body = {
- record: user
- }
- } catch (err) {
- if (typeof err == 'string') throw err;
- c.serr = err;
- throw 'SE0000';
- }
- })
- .put('/user/:uid', async(c, n) => {
- if (!await mongo.token.checkToken(c.token)) throw 'CE1000';
- let arr = c.request.body;
- if (!arr.data) throw 'CE0000';
- if (!arr.data.name) throw 'CE0004';
- if (!arr.data.email) throw 'CE0005';
- try {
- let t = await mongo.token.getToken(c.token);
- if (t.object.uid != c.params.uid) throw 'CE2000';
- } catch (err) {
- if (typeof err == 'string') throw err;
- c.serr = err;
- throw 'SE0000';
- }
-
- try {
- let query = "update ??.?? set \
- `name` = ?, \
- `email` = ?" + (arr.data.password ? ',' : '') + " \
- " + (arr.data.password ? "`password` = ?, " : '') + " \
- where \
- `uid` = ?";
- let param = ['lora', 'user', arr.data.name, arr.data.email];
- if (arr.data.password) param.push(crypto.genPassHash(arr.data.password));
- param.push(c.params.uid);
-
- let updata = await c.syncQuery(query, param);
- } catch (err) {
- if (typeof err == 'string') throw err;
- c.serr = err;
- throw 'SE0002';
- }
-
- c.body = { record: [] };
- })
- .post('/login', async(c, n) => {
- let arr = c.request.body;
- if (!arr.data) throw 'CE0000';
- if (!arr.data.account) throw 'CE0001';
- if (!arr.data.password) throw 'CE0002';
- try {
- let user = await c.syncQuery('select `uid`,`account`,`password`,`name`,`email` from ??.?? where `account` = ?', ['lora', 'user', arr.data.account])
-
- if (user.length == 0) throw 'CE0003';
-
- if (!crypto.comparePass(arr.data.password, user[0].password)) throw 'CE0003';
-
- delete user[0].password;
-
- c.body = {
- record: user
- }
- } catch (err) {
- if (typeof err == 'string') throw err;
- c.serr = err;
- throw 'SE0000';
- }
-
- let u = c.body.record[0];
- let token = new mongo.token({ object: u, expire: Date.now() + 86400000 });
- token.save();
- c.body.rt = {
- token: {
- id: token._id
- }
- }
- })
- .post('/user/forgotpass', async(c, n) => {
- let arr = c.request.body;
- if (!arr.data) throw 'CE0000';
- if (!arr.data.account) throw 'CE0001';
- if (!arr.data.email) throw 'CE0005';
-
- let user = [];
- try {
- let query = "select * from ??.?? where `account` = ? and `email` = ?";
- let param = ['lora', 'user', arr.data.account, arr.data.email];
- user = await c.syncQuery(query, param);
- } catch (err) {
- if (typeof err == 'string') throw err;
- c.serr = err;
- throw 'SE0001';
- }
- if (user.length == 0) throw 'CE0007';
-
- let randomToken = crypto.random(10);
- try {
- await mem.setVal(randomToken, JSON.stringify(user[0]), 7200);
- } catch (err) {
- c.serr = err;
- throw 'SE0005';
- }
-
- try {
- await sendmail(user[0].email, msgMng.getMailTemplate('forgotpass', c.headers['accept-language']), [randomToken])
- } catch (err) {
- if (typeof err == 'string') throw err;
- c.serr = err;
- throw 'SE0006';
- }
+ try {
+ let user = await c.syncQuery('select `uid`,`account`,`name`,`email` from ??.?? where `uid` = ?', ['lora', 'user', c.params.uid])
c.body = {
- record: []
+ record: user
}
+ } catch (err) {
+ if (typeof err === 'string') throw err
+ c.serr = err
+ throw 'SE0000'
+ }
+ })
+ .put('/user/:uid', async(c, n) => {
+ if (!await mongo.Token.checkToken(c.token)) throw 'CE1000'
+ let arr = c.request.body
+ if (!arr.data) throw 'CE0000'
+ if (!arr.data.name) throw 'CE0004'
+ if (!arr.data.email) throw 'CE0005'
+ try {
+ let t = await mongo.Token.getToken(c.token)
+ if (t.object.uid !== c.params.uid) throw 'CE2000'
+ } catch (err) {
+ if (typeof err === 'string') throw err
+ c.serr = err
+ throw 'SE0000'
+ }
+
+ try {
+ let query = 'update ??.?? set \
+ `name` = ?, \
+ `email` = ?' + (arr.data.password ? ',' : '') + ' \
+ ' + (arr.data.password ? '`password` = ?, ' : '') + ' \
+ where \
+ `uid` = ?'
+ let param = ['lora', 'user', arr.data.name, arr.data.email]
+ if (arr.data.password) param.push(crypto.genPassHash(arr.data.password))
+ param.push(c.params.uid)
+
+ await c.syncQuery(query, param)
+ } catch (err) {
+ if (typeof err === 'string') throw err
+ c.serr = err
+ throw 'SE0002'
+ }
+
+ c.body = { record: [] }
+ })
+ .post('/login', async(c, n) => {
+ let arr = c.request.body
+ if (!arr.data) throw 'CE0000'
+ if (!arr.data.account) throw 'CE0001'
+ if (!arr.data.password) throw 'CE0002'
+ try {
+ let user = await c.syncQuery('select `uid`,`account`,`password`,`name`,`email` from ??.?? where `account` = ?', ['lora', 'user', arr.data.account])
+
+ if (user.length === 0) throw 'CE0003'
+
+ if (!crypto.comparePass(arr.data.password, user[0].password)) throw 'CE0003'
+
+ delete user[0].password
+
+ c.body = {
+ record: user
+ }
+ } catch (err) {
+ if (typeof err === 'string') throw err
+ c.serr = err
+ throw 'SE0000'
+ }
+
+ let u = c.body.record[0]
+ let token = new mongo.Token({ object: u, expire: Date.now() + 86400000 })
+ token.save()
+ c.body.rt = {
+ token: {
+ id: token._id
+ }
+ }
+ })
+ .post('/user/forgotpass', async(c, n) => {
+ let arr = c.request.body
+ if (!arr.data) throw 'CE0000'
+ if (!arr.data.account) throw 'CE0001'
+ if (!arr.data.email) throw 'CE0005'
+
+ let user = []
+ try {
+ let query = 'select * from ??.?? where `account` = ? and `email` = ?'
+ let param = ['lora', 'user', arr.data.account, arr.data.email]
+ user = await c.syncQuery(query, param)
+ } catch (err) {
+ if (typeof err === 'string') throw err
+ c.serr = err
+ throw 'SE0001'
+ }
+ if (user.length === 0) throw 'CE0007'
+
+ let randomToken = crypto.random(10)
+ try {
+ await mem.setVal(randomToken, JSON.stringify(user[0]), 7200)
+ } catch (err) {
+ c.serr = err
+ throw 'SE0005'
+ }
+
+ try {
+ await sendmail(user[0].email, msgMng.getMailTemplate('forgotpass', c.headers['accept-language']), [randomToken])
+ } catch (err) {
+ if (typeof err === 'string') throw err
+ c.serr = err
+ throw 'SE0006'
+ }
+
+ c.body = {
+ record: []
+ }
})
.post('/user/resetpass', async(c, n) => {
- let arr = c.request.body;
- if (!arr.data) throw 'CE0000';
- if (!arr.data.account) throw 'CE0001';
- if (arr.data.resettype != 'pass' && arr.data.resettype != 'token') throw 'CE0008';
- if (arr.data.resettype == 'pass') {
- if (!arr.data.password) throw 'CE0002';
- } else {
- if (!arr.data.token) throw 'CE0009';
- }
- if (!arr.data.newpass) throw 'CE0002';
-
-
+ let arr = c.request.body
+ if (!arr.data) throw 'CE0000'
+ if (!arr.data.account) throw 'CE0001'
+ if (arr.data.resettype !== 'pass' && arr.data.resettype !== 'token') throw 'CE0008'
+ if (arr.data.resettype === 'pass') {
+ if (!arr.data.password) throw 'CE0002'
+ } else {
+ if (!arr.data.token) throw 'CE0009'
+ }
+ if (!arr.data.newpass) throw 'CE0002'
})
-
-
-module.exports = router;
\ No newline at end of file
+module.exports = router
diff --git a/server-api/route/api/index.js b/server-api/route/api/index.js
index a7a81ee..7df1afe 100644
--- a/server-api/route/api/index.js
+++ b/server-api/route/api/index.js
@@ -1,73 +1,72 @@
-const Router = require('koa-router');
-const router = new Router();
-const koaBody = require('koa-body');
+const Router = require('koa-router')
+const router = new Router()
+const koaBody = require('koa-body')
-// import tools
-const mysql = require('../../libs/mysql_pool.js');
-const so = require('../../libs/storeObject');
-const config = require('../../config.json');
-const msgMng = require('./msgManager');
+// import tools
+const mysql = require('../../libs/mysql_pool.js')
+// const so = require('../../libs/storeObject')
+// const config = require('../../config.json')
+const msgMng = require('./msgManager')
-// routes
-const account_api = require('./account.js');
+// routes
+const accountApi = require('./account.js')
// api response handler
router.use(async(c, n) => {
// get MySQL connection
- c.db = await mysql.getConn();
+ c.db = await mysql.getConn()
// set Async/Await Query
- c.syncQuery = (query, param = null) => {
- return new Promise((resolve, reject) => {
- if (param != null) {
- c.db.query(query, param, (err, row) => {
- if (err) return reject(err);
- return resolve(row)
- });
- } else {
- c.db.query(query, (err, row) => {
- if (err) return reject(err);
- return resolve(row)
- });
- }
+ c.syncQuery = (query, param = null) => {
+ return new Promise((resolve, reject) => {
+ if (param != null) {
+ c.db.query(query, param, (err, row) => {
+ if (err) return reject(err)
+ return resolve(row)
})
- }
- c.token = c.headers['x-auth-token'] || '';
+ } else {
+ c.db.query(query, (err, row) => {
+ if (err) return reject(err)
+ return resolve(row)
+ })
+ }
+ })
+ }
+ c.token = c.headers['x-auth-token'] || ''
// console.log(c.headers['accept-language'])
- try {
- await n();
- c.body = {
- data: c.body,
- status: 1
- }
- } catch (e) {
- let msg = msgMng.getMsg(e, c.headers['accept-language']);
- c.body = {
- errorCode: e,
- message: msg,
- servErr: c.serr ? c.serr.toString() : '',
- status: 0
- }
- if (e[0] == 'C' || e[0] == 'c') c.status = 400;
- if (e[0] == 'S' || e[0] == 's') c.status = 500;
+ try {
+ await n()
+ c.body = {
+ data: c.body,
+ status: 1
}
- if ('db' in c && typeof c.db == 'object' && 'release' in c.db && typeof c.db.release == 'function') c.db.release();
+ } catch (e) {
+ let msg = msgMng.getMsg(e, c.headers['accept-language'])
+ c.body = {
+ errorCode: e,
+ message: msg,
+ servErr: c.serr ? c.serr.toString() : '',
+ status: 0
+ }
+ if (e[0] === 'C' || e[0] === 'c') c.status = 400
+ if (e[0] === 'S' || e[0] === 's') c.status = 500
+ }
+ if ('db' in c && typeof c.db === 'object' && 'release' in c.db && typeof c.db.release === 'function') c.db.release()
})
-
// enable bodyParser
router.all('*', koaBody({
- multipart: true,
+ multipart: true,
// upload file size 10mb
- maxFieldSize: 10 * 1024 * 1024
-}), async(c, n) => { await n(); })
+ maxFieldSize: 10 * 1024 * 1024
+}), async(c, n) => { await n() })
router
.get('/', async(c, n) => {
- c.body = {
- msg: 'API Endpoint'
- };
+ c.body = {
+ msg: 'API Endpoint'
+ }
})
- .use('/account', account_api.routes())
+ .use('/account', accountApi.routes())
-module.exports = router;
\ No newline at end of file
+module.exports = router
diff --git a/server-api/route/api/msgManager/index.js b/server-api/route/api/msgManager/index.js
index 8750d4f..d18808c 100644
--- a/server-api/route/api/msgManager/index.js
+++ b/server-api/route/api/msgManager/index.js
@@ -1,46 +1,46 @@
-const fs = require('fs');
-const path = require('path');
+// const fs = require('fs')
+// const path = require('path')
-class msgManager {
- constructor() {
- this.errs = {};
- this.defLang = 'zh';
- let err = require(`./language/zh`);
- this.errs['zh'] = err;
+class MsgManager {
+ constructor () {
+ this.errs = {}
+ this.defLang = 'zh'
+ let err = require(`./language/zh`)
+ this.errs['zh'] = err
+ }
+
+ checkLang (lang = '') {
+ let lng = this.defLang
+ if (typeof lang === 'string' && lang.trim().length > 0) {
+ let l = lang.split(',')
+ if (l.length > 0) {
+ let tmp = l[0].substring(0, 2)
+ if (tmp.trim().length > 0) lng = tmp
+ }
}
- checkLang(lang = '') {
- let lng = this.defLang;
- if (typeof lang == 'string' && lang.trim().length > 0) {
- let l = lang.split(',');
- if (l.length > 0) {
- let tmp = l[0].substring(0, 2);
- if (tmp.trim().length > 0) lng = tmp;
- }
- }
-
- if (!(lng in this.errs)) {
- try {
- let errs = require(`./language/${lng}`);
- this.errs[lng] = errs;
- } catch (err) {
- lng = this.defLang;
- }
- }
- return lng;
+ if (!(lng in this.errs)) {
+ try {
+ let errs = require(`./language/${lng}`)
+ this.errs[lng] = errs
+ } catch (err) {
+ lng = this.defLang
+ }
}
+ return lng
+ }
- getMsg(code, lang = '') {
- let lng = this.checkLang(lang);
+ getMsg (code, lang = '') {
+ let lng = this.checkLang(lang)
- return this.errs[lng][code] || 'errorCode not found';
- }
+ return this.errs[lng][code] || 'errorCode not found'
+ }
- getMailTemplate(type, lang = '') {
- let lng = this.checkLang(lang);
+ getMailTemplate (type, lang = '') {
+ let lng = this.checkLang(lang)
- return this.errs[lng]['mail'][type] || {};
- }
+ return this.errs[lng]['mail'][type] || {}
+ }
}
-module.exports = new msgManager();
\ No newline at end of file
+module.exports = new MsgManager()
diff --git a/server-api/route/api/msgManager/language/zh.js b/server-api/route/api/msgManager/language/zh.js
index 6ed8d83..ae1fee5 100644
--- a/server-api/route/api/msgManager/language/zh.js
+++ b/server-api/route/api/msgManager/language/zh.js
@@ -1,33 +1,33 @@
module.exports = {
// client error
- CE0000: '請輸入參數',
- CE0001: '請輸入帳號',
- CE0002: '請輸入密碼',
- CE0003: '使用者帳號或密碼錯誤',
- CE0004: '請輸入使用者名稱',
- CE0005: '請輸入Email',
- CE0006: '使用者帳號重複',
- CE0007: '查無使用者資料',
- CE0008: '重設密碼類型輸入錯誤',
- CE0009: '請輸入重設密碼Token',
+ CE0000: '請輸入參數',
+ CE0001: '請輸入帳號',
+ CE0002: '請輸入密碼',
+ CE0003: '使用者帳號或密碼錯誤',
+ CE0004: '請輸入使用者名稱',
+ CE0005: '請輸入Email',
+ CE0006: '使用者帳號重複',
+ CE0007: '查無使用者資料',
+ CE0008: '重設密碼類型輸入錯誤',
+ CE0009: '請輸入重設密碼Token',
- CE1000: 'Token驗證失敗',
- CE2000: '使用者權限不足',
+ CE1000: 'Token驗證失敗',
+ CE2000: '使用者權限不足',
// server error
- SE0000: '資料查詢失敗',
- SE0001: '資料新增失敗',
- SE0002: '資料更新失敗',
- SE0003: '資料刪除失敗',
- SE0005: '快取資料設定失敗',
- SE0006: 'Email發送失敗',
+ SE0000: '資料查詢失敗',
+ SE0001: '資料新增失敗',
+ SE0002: '資料更新失敗',
+ SE0003: '資料刪除失敗',
+ SE0005: '快取資料設定失敗',
+ SE0006: 'Email發送失敗',
// email template
- mail: {
- forgotpass: {
- title: '忘記密碼信件',
- text: '以下是重置密碼專用Token,有效時間為2小時\n如果沒有申請此操作請忽略此信件\n重置Token: %s',
- html: '以下是重置密碼專用Token,有效時間為2小時
如果沒有申請此操作請忽略此信件
重置Token: %s'
- }
+ mail: {
+ forgotpass: {
+ title: '忘記密碼信件',
+ text: '以下是重置密碼專用Token,有效時間為2小時\n如果沒有申請此操作請忽略此信件\n重置Token: %s',
+ html: '以下是重置密碼專用Token,有效時間為2小時
如果沒有申請此操作請忽略此信件
重置Token: %s'
}
-}
\ No newline at end of file
+ }
+}
diff --git a/server-api/yarn.lock b/server-api/yarn.lock
index 86d37e1..c98cb90 100644
--- a/server-api/yarn.lock
+++ b/server-api/yarn.lock
@@ -9,16 +9,92 @@ accepts@^1.2.2:
mime-types "~2.1.11"
negotiator "0.6.1"
+acorn-jsx@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b"
+ dependencies:
+ acorn "^3.0.4"
+
+acorn@^3.0.4:
+ version "3.3.0"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a"
+
+acorn@^5.0.1:
+ version "5.0.3"
+ resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d"
+
+ajv-keywords@^1.0.0:
+ version "1.5.1"
+ resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c"
+
+ajv@^4.7.0:
+ version "4.11.8"
+ resolved "https://registry.yarnpkg.com/ajv/-/ajv-4.11.8.tgz#82ffb02b29e662ae53bdc20af15947706739c536"
+ dependencies:
+ co "^4.6.0"
+ json-stable-stringify "^1.0.1"
+
+ansi-escapes@^1.1.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e"
+
+ansi-regex@^2.0.0:
+ version "2.1.1"
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df"
+
+ansi-styles@^2.2.1:
+ version "2.2.1"
+ resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe"
+
any-promise@^1.0.0, any-promise@^1.1.0:
version "1.3.0"
resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f"
+argparse@^1.0.7:
+ version "1.0.9"
+ resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86"
+ dependencies:
+ sprintf-js "~1.0.2"
+
+array-union@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39"
+ dependencies:
+ array-uniq "^1.0.1"
+
+array-uniq@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
+
+array.prototype.find@^2.0.1:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90"
+ dependencies:
+ define-properties "^1.1.2"
+ es-abstract "^1.7.0"
+
+arrify@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
+
async@2.1.4:
version "2.1.4"
resolved "https://registry.yarnpkg.com/async/-/async-2.1.4.tgz#2d2160c7788032e4dd6cbe2502f1f9a2c8f6cde4"
dependencies:
lodash "^4.14.0"
+babel-code-frame@^6.16.0:
+ version "6.22.0"
+ resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4"
+ dependencies:
+ chalk "^1.1.0"
+ esutils "^2.0.2"
+ js-tokens "^3.0.0"
+
+balanced-match@^0.4.1:
+ version "0.4.2"
+ resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-0.4.2.tgz#cb3f3e3c732dc0f01ee70b403f302e61d7709838"
+
basic-auth@~1.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-1.1.0.tgz#45221ee429f7ee1e5035be3f51533f1cdfd29884"
@@ -31,6 +107,13 @@ bluebird@2.10.2:
version "2.10.2"
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-2.10.2.tgz#024a5517295308857f14f91f1106fc3b555f446b"
+brace-expansion@^1.1.7:
+ version "1.1.7"
+ resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.7.tgz#3effc3c50e000531fb720eaff80f0ae8ef23cf59"
+ dependencies:
+ balanced-match "^0.4.1"
+ concat-map "0.0.1"
+
bson@~1.0.4:
version "1.0.4"
resolved "https://registry.yarnpkg.com/bson/-/bson-1.0.4.tgz#93c10d39eaa5b58415cbc4052f3e53e562b0b72c"
@@ -39,10 +122,48 @@ buffer-shims@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51"
+builtin-modules@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
+
bytes@2.4.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339"
+caller-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f"
+ dependencies:
+ callsites "^0.2.0"
+
+callsites@^0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca"
+
+chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
+ dependencies:
+ ansi-styles "^2.2.1"
+ escape-string-regexp "^1.0.2"
+ has-ansi "^2.0.0"
+ strip-ansi "^3.0.0"
+ supports-color "^2.0.0"
+
+circular-json@^0.3.1:
+ version "0.3.1"
+ resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d"
+
+cli-cursor@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987"
+ dependencies:
+ restore-cursor "^1.0.1"
+
+cli-width@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a"
+
co-body@*:
version "5.1.1"
resolved "https://registry.yarnpkg.com/co-body/-/co-body-5.1.1.tgz#d97781d1e3344ba4a820fd1806bddf8341505236"
@@ -56,10 +177,30 @@ co@^4.6.0:
version "4.6.0"
resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184"
+code-point-at@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
+
+concat-map@0.0.1:
+ version "0.0.1"
+ resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
+
+concat-stream@^1.5.2:
+ version "1.6.0"
+ resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7"
+ dependencies:
+ inherits "^2.0.3"
+ readable-stream "^2.2.2"
+ typedarray "^0.0.6"
+
connection-parse@0.0.x:
version "0.0.7"
resolved "https://registry.yarnpkg.com/connection-parse/-/connection-parse-0.0.7.tgz#18e7318aab06a699267372b10c5226d25a1c9a69"
+contains-path@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a"
+
content-disposition@~0.5.0:
version "0.5.2"
resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.2.tgz#0cf68bb9ddf5f2be7961c3a85178cb85dba78cb4"
@@ -83,16 +224,66 @@ crc@^3.4.4:
version "3.4.4"
resolved "https://registry.yarnpkg.com/crc/-/crc-3.4.4.tgz#9da1e980e3bd44fc5c93bf5ab3da3378d85e466b"
-debug@*, debug@2.6.8, debug@^2.2.0, debug@^2.6.0:
+d@1:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/d/-/d-1.0.0.tgz#754bb5bfe55451da69a58b94d45f4c5b0462d58f"
+ dependencies:
+ es5-ext "^0.10.9"
+
+debug-log@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f"
+
+debug@*, debug@2.6.8, debug@^2.1.1, debug@^2.2.0, debug@^2.6.0:
version "2.6.8"
resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc"
dependencies:
ms "2.0.0"
+debug@2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/debug/-/debug-2.2.0.tgz#f87057e995b1a1f6ae6a4960664137bc56f039da"
+ dependencies:
+ ms "0.7.1"
+
deep-equal@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.0.1.tgz#f5d260292b660e084eff4cdbc9f08ad3247448b5"
+deep-is@~0.1.3:
+ version "0.1.3"
+ resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
+
+define-properties@^1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94"
+ dependencies:
+ foreach "^2.0.5"
+ object-keys "^1.0.8"
+
+deglob@^2.1.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.0.tgz#4d44abe16ef32c779b4972bd141a80325029a14a"
+ dependencies:
+ find-root "^1.0.0"
+ glob "^7.0.5"
+ ignore "^3.0.9"
+ pkg-config "^1.1.0"
+ run-parallel "^1.1.2"
+ uniq "^1.0.1"
+
+del@^2.0.2:
+ version "2.2.2"
+ resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8"
+ dependencies:
+ globby "^5.0.0"
+ is-path-cwd "^1.0.0"
+ is-path-in-cwd "^1.0.0"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+ rimraf "^2.2.8"
+
delegates@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
@@ -105,22 +296,325 @@ destroy@^1.0.3:
version "1.0.4"
resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80"
+doctrine@1.5.0, doctrine@^1.2.2:
+ version "1.5.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa"
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
+doctrine@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63"
+ dependencies:
+ esutils "^2.0.2"
+ isarray "^1.0.0"
+
ee-first@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
+error-ex@^1.2.0:
+ version "1.3.1"
+ resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.1.tgz#f855a86ce61adc4e8621c3cda21e7a7612c3a8dc"
+ dependencies:
+ is-arrayish "^0.2.1"
+
error-inject@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/error-inject/-/error-inject-1.0.0.tgz#e2b3d91b54aed672f309d950d154850fa11d4f37"
+es-abstract@^1.7.0:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c"
+ dependencies:
+ es-to-primitive "^1.1.1"
+ function-bind "^1.1.0"
+ is-callable "^1.1.3"
+ is-regex "^1.0.3"
+
+es-to-primitive@^1.1.1:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d"
+ dependencies:
+ is-callable "^1.1.1"
+ is-date-object "^1.0.1"
+ is-symbol "^1.0.1"
+
+es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14:
+ version "0.10.23"
+ resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.23.tgz#7578b51be974207a5487821b56538c224e4e7b38"
+ dependencies:
+ es6-iterator "2"
+ es6-symbol "~3.1"
+
+es6-iterator@2, es6-iterator@^2.0.1, es6-iterator@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.1.tgz#8e319c9f0453bf575d374940a655920e59ca5512"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-symbol "^3.1"
+
+es6-map@^0.1.3:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-set "~0.1.5"
+ es6-symbol "~3.1.1"
+ event-emitter "~0.3.5"
+
es6-promise@3.2.1:
version "3.2.1"
resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-3.2.1.tgz#ec56233868032909207170c39448e24449dd1fc4"
+es6-set@~0.1.5:
+ version "0.1.5"
+ resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+ es6-iterator "~2.0.1"
+ es6-symbol "3.1.1"
+ event-emitter "~0.3.5"
+
+es6-symbol@3.1.1, es6-symbol@^3.1, es6-symbol@^3.1.1, es6-symbol@~3.1, es6-symbol@~3.1.1:
+ version "3.1.1"
+ resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+es6-weak-map@^2.0.1:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.2.tgz#5e3ab32251ffd1538a1f8e5ffa1357772f92d96f"
+ dependencies:
+ d "1"
+ es5-ext "^0.10.14"
+ es6-iterator "^2.0.1"
+ es6-symbol "^3.1.1"
+
escape-html@~1.0.1:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
+escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
+
+escope@^3.6.0:
+ version "3.6.0"
+ resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3"
+ dependencies:
+ es6-map "^0.1.3"
+ es6-weak-map "^2.0.1"
+ esrecurse "^4.1.0"
+ estraverse "^4.1.1"
+
+eslint-config-standard-jsx@4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard-jsx/-/eslint-config-standard-jsx-4.0.1.tgz#cd4e463d0268e2d9e707f61f42f73f5b3333c642"
+
+eslint-config-standard@10.2.1:
+ version "10.2.1"
+ resolved "https://registry.yarnpkg.com/eslint-config-standard/-/eslint-config-standard-10.2.1.tgz#c061e4d066f379dc17cd562c64e819b4dd454591"
+
+eslint-import-resolver-node@^0.2.0:
+ version "0.2.3"
+ resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.2.3.tgz#5add8106e8c928db2cba232bcd9efa846e3da16c"
+ dependencies:
+ debug "^2.2.0"
+ object-assign "^4.0.1"
+ resolve "^1.1.6"
+
+eslint-module-utils@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.0.0.tgz#a6f8c21d901358759cdc35dbac1982ae1ee58bce"
+ dependencies:
+ debug "2.2.0"
+ pkg-dir "^1.0.0"
+
+eslint-plugin-import@~2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.2.0.tgz#72ba306fad305d67c4816348a4699a4229ac8b4e"
+ dependencies:
+ builtin-modules "^1.1.1"
+ contains-path "^0.1.0"
+ debug "^2.2.0"
+ doctrine "1.5.0"
+ eslint-import-resolver-node "^0.2.0"
+ eslint-module-utils "^2.0.0"
+ has "^1.0.1"
+ lodash.cond "^4.3.0"
+ minimatch "^3.0.3"
+ pkg-up "^1.0.0"
+
+eslint-plugin-node@~4.2.2:
+ version "4.2.2"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-node/-/eslint-plugin-node-4.2.2.tgz#82959ca9aed79fcbd28bb1b188d05cac04fb3363"
+ dependencies:
+ ignore "^3.0.11"
+ minimatch "^3.0.2"
+ object-assign "^4.0.1"
+ resolve "^1.1.7"
+ semver "5.3.0"
+
+eslint-plugin-promise@~3.5.0:
+ version "3.5.0"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-promise/-/eslint-plugin-promise-3.5.0.tgz#78fbb6ffe047201627569e85a6c5373af2a68fca"
+
+eslint-plugin-react@~6.10.0:
+ version "6.10.3"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78"
+ dependencies:
+ array.prototype.find "^2.0.1"
+ doctrine "^1.2.2"
+ has "^1.0.1"
+ jsx-ast-utils "^1.3.4"
+ object.assign "^4.0.4"
+
+eslint-plugin-standard@~3.0.1:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/eslint-plugin-standard/-/eslint-plugin-standard-3.0.1.tgz#34d0c915b45edc6f010393c7eef3823b08565cf2"
+
+eslint@~3.19.0:
+ version "3.19.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc"
+ dependencies:
+ babel-code-frame "^6.16.0"
+ chalk "^1.1.3"
+ concat-stream "^1.5.2"
+ debug "^2.1.1"
+ doctrine "^2.0.0"
+ escope "^3.6.0"
+ espree "^3.4.0"
+ esquery "^1.0.0"
+ estraverse "^4.2.0"
+ esutils "^2.0.2"
+ file-entry-cache "^2.0.0"
+ glob "^7.0.3"
+ globals "^9.14.0"
+ ignore "^3.2.0"
+ imurmurhash "^0.1.4"
+ inquirer "^0.12.0"
+ is-my-json-valid "^2.10.0"
+ is-resolvable "^1.0.0"
+ js-yaml "^3.5.1"
+ json-stable-stringify "^1.0.0"
+ levn "^0.3.0"
+ lodash "^4.0.0"
+ mkdirp "^0.5.0"
+ natural-compare "^1.4.0"
+ optionator "^0.8.2"
+ path-is-inside "^1.0.1"
+ pluralize "^1.2.1"
+ progress "^1.1.8"
+ require-uncached "^1.0.2"
+ shelljs "^0.7.5"
+ strip-bom "^3.0.0"
+ strip-json-comments "~2.0.1"
+ table "^3.7.8"
+ text-table "~0.2.0"
+ user-home "^2.0.0"
+
+espree@^3.4.0:
+ version "3.4.3"
+ resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.3.tgz#2910b5ccd49ce893c2ffffaab4fd8b3a31b82374"
+ dependencies:
+ acorn "^5.0.1"
+ acorn-jsx "^3.0.0"
+
+esprima@^3.1.1:
+ version "3.1.3"
+ resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633"
+
+esquery@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa"
+ dependencies:
+ estraverse "^4.0.0"
+
+esrecurse@^4.1.0:
+ version "4.1.0"
+ resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220"
+ dependencies:
+ estraverse "~4.1.0"
+ object-assign "^4.0.1"
+
+estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0:
+ version "4.2.0"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13"
+
+estraverse@~4.1.0:
+ version "4.1.1"
+ resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.1.1.tgz#f6caca728933a850ef90661d0e17982ba47111a2"
+
+esutils@^2.0.2:
+ version "2.0.2"
+ resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b"
+
+event-emitter@~0.3.5:
+ version "0.3.5"
+ resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39"
+ dependencies:
+ d "1"
+ es5-ext "~0.10.14"
+
+exit-hook@^1.0.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8"
+
+fast-levenshtein@~2.0.4:
+ version "2.0.6"
+ resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917"
+
+figures@^1.3.5:
+ version "1.7.0"
+ resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e"
+ dependencies:
+ escape-string-regexp "^1.0.5"
+ object-assign "^4.1.0"
+
+file-entry-cache@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361"
+ dependencies:
+ flat-cache "^1.2.1"
+ object-assign "^4.0.1"
+
+find-root@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.0.0.tgz#962ff211aab25c6520feeeb8d6287f8f6e95807a"
+
+find-up@^1.0.0:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f"
+ dependencies:
+ path-exists "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+find-up@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7"
+ dependencies:
+ locate-path "^2.0.0"
+
+flat-cache@^1.2.1:
+ version "1.2.2"
+ resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96"
+ dependencies:
+ circular-json "^0.3.1"
+ del "^2.0.2"
+ graceful-fs "^4.1.2"
+ write "^0.2.1"
+
+foreach@^2.0.5:
+ version "2.0.5"
+ resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99"
+
formidable@1.0.17:
version "1.0.17"
resolved "https://registry.yarnpkg.com/formidable/-/formidable-1.0.17.tgz#ef5491490f9433b705faa77249c99029ae348559"
@@ -129,6 +623,70 @@ fresh@^0.5.0:
version "0.5.0"
resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.0.tgz#f474ca5e6a9246d6fd8e0953cfa9b9c805afa78e"
+fs.realpath@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
+
+function-bind@^1.0.2, function-bind@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771"
+
+generate-function@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74"
+
+generate-object-property@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0"
+ dependencies:
+ is-property "^1.0.0"
+
+get-stdin@^5.0.1:
+ version "5.0.1"
+ resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-5.0.1.tgz#122e161591e21ff4c52530305693f20e6393a398"
+
+glob@^7.0.0, glob@^7.0.3, glob@^7.0.5:
+ version "7.1.2"
+ resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
+ dependencies:
+ fs.realpath "^1.0.0"
+ inflight "^1.0.4"
+ inherits "2"
+ minimatch "^3.0.4"
+ once "^1.3.0"
+ path-is-absolute "^1.0.0"
+
+globals@^9.14.0:
+ version "9.17.0"
+ resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286"
+
+globby@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d"
+ dependencies:
+ array-union "^1.0.1"
+ arrify "^1.0.0"
+ glob "^7.0.3"
+ object-assign "^4.0.1"
+ pify "^2.0.0"
+ pinkie-promise "^2.0.0"
+
+graceful-fs@^4.1.2:
+ version "4.1.11"
+ resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
+
+has-ansi@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+has@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28"
+ dependencies:
+ function-bind "^1.0.2"
+
hashring@3.2.x:
version "3.2.0"
resolved "https://registry.yarnpkg.com/hashring/-/hashring-3.2.0.tgz#fda4efde8aa22cdb97fb1d2a65e88401e1c144ce"
@@ -168,23 +726,127 @@ iconv-lite@0.4.15:
version "0.4.15"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.15.tgz#fe265a218ac6a57cfe854927e9d04c19825eddeb"
+ignore@^3.0.11, ignore@^3.0.9, ignore@^3.2.0:
+ version "3.3.3"
+ resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.3.tgz#432352e57accd87ab3110e82d3fea0e47812156d"
+
+imurmurhash@^0.1.4:
+ version "0.1.4"
+ resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
+
inflation@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/inflation/-/inflation-2.0.0.tgz#8b417e47c28f925a45133d914ca1fd389107f30f"
-inherits@2.0.3, inherits@~2.0.1:
+inflight@^1.0.4:
+ version "1.0.6"
+ resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
+ dependencies:
+ once "^1.3.0"
+ wrappy "1"
+
+inherits@2, inherits@2.0.3, inherits@^2.0.3, inherits@~2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
+inquirer@^0.12.0:
+ version "0.12.0"
+ resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e"
+ dependencies:
+ ansi-escapes "^1.1.0"
+ ansi-regex "^2.0.0"
+ chalk "^1.0.0"
+ cli-cursor "^1.0.1"
+ cli-width "^2.0.0"
+ figures "^1.3.5"
+ lodash "^4.3.0"
+ readline2 "^1.0.1"
+ run-async "^0.1.0"
+ rx-lite "^3.1.2"
+ string-width "^1.0.1"
+ strip-ansi "^3.0.0"
+ through "^2.3.6"
+
+interpret@^1.0.0:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90"
+
+is-arrayish@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
+
+is-callable@^1.1.1, is-callable@^1.1.3:
+ version "1.1.3"
+ resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2"
+
+is-date-object@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16"
+
+is-fullwidth-code-point@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb"
+ dependencies:
+ number-is-nan "^1.0.0"
+
+is-fullwidth-code-point@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f"
+
is-generator-function@^1.0.3:
version "1.0.6"
resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.6.tgz#9e71653cd15fff341c79c4151460a131d31e9fc4"
+is-my-json-valid@^2.10.0:
+ version "2.16.0"
+ resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693"
+ dependencies:
+ generate-function "^2.0.0"
+ generate-object-property "^1.1.0"
+ jsonpointer "^4.0.0"
+ xtend "^4.0.0"
+
+is-path-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d"
+
+is-path-in-cwd@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc"
+ dependencies:
+ is-path-inside "^1.0.0"
+
+is-path-inside@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f"
+ dependencies:
+ path-is-inside "^1.0.1"
+
+is-property@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84"
+
+is-regex@^1.0.3:
+ version "1.0.4"
+ resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491"
+ dependencies:
+ has "^1.0.1"
+
+is-resolvable@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62"
+ dependencies:
+ tryit "^1.0.1"
+
+is-symbol@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572"
+
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
-isarray@~1.0.0:
+isarray@^1.0.0, isarray@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11"
@@ -194,6 +856,35 @@ jackpot@>=0.0.6:
dependencies:
retry "0.6.0"
+js-tokens@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
+
+js-yaml@^3.5.1:
+ version "3.8.4"
+ resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6"
+ dependencies:
+ argparse "^1.0.7"
+ esprima "^3.1.1"
+
+json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af"
+ dependencies:
+ jsonify "~0.0.0"
+
+jsonify@~0.0.0:
+ version "0.0.0"
+ resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73"
+
+jsonpointer@^4.0.0:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9"
+
+jsx-ast-utils@^1.3.4:
+ version "1.4.1"
+ resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1"
+
kareem@1.4.1:
version "1.4.1"
resolved "https://registry.yarnpkg.com/kareem/-/kareem-1.4.1.tgz#ed76200044fa041ef32b4da8261e2553f1173531"
@@ -299,7 +990,34 @@ koa@^2.2.0:
type-is "^1.5.5"
vary "^1.0.0"
-lodash@^4.14.0:
+levn@^0.3.0, levn@~0.3.0:
+ version "0.3.0"
+ resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee"
+ dependencies:
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+
+load-json-file@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8"
+ dependencies:
+ graceful-fs "^4.1.2"
+ parse-json "^2.2.0"
+ pify "^2.0.0"
+ strip-bom "^3.0.0"
+
+locate-path@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e"
+ dependencies:
+ p-locate "^2.0.0"
+ path-exists "^3.0.0"
+
+lodash.cond@^4.3.0:
+ version "4.5.2"
+ resolved "https://registry.yarnpkg.com/lodash.cond/-/lodash.cond-4.5.2.tgz#f471a1da486be60f6ab955d17115523dd1d255d5"
+
+lodash@^4.0.0, lodash@^4.14.0, lodash@^4.3.0:
version "4.17.4"
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae"
@@ -328,6 +1046,26 @@ mime-types@^2.0.7, mime-types@~2.1.11, mime-types@~2.1.15:
dependencies:
mime-db "~1.27.0"
+minimatch@^3.0.2, minimatch@^3.0.3, minimatch@^3.0.4:
+ version "3.0.4"
+ resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
+ dependencies:
+ brace-expansion "^1.1.7"
+
+minimist@0.0.8:
+ version "0.0.8"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
+
+minimist@^1.1.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
+
+mkdirp@^0.5.0, mkdirp@^0.5.1:
+ version "0.5.1"
+ resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
+ dependencies:
+ minimist "0.0.8"
+
mongodb-core@2.1.11:
version "2.1.11"
resolved "https://registry.yarnpkg.com/mongodb-core/-/mongodb-core-2.1.11.tgz#1c38776ceb174997a99c28860eed9028da9b3e1a"
@@ -387,6 +1125,10 @@ mquery@2.3.1:
regexp-clone "0.0.1"
sliced "0.0.5"
+ms@0.7.1:
+ version "0.7.1"
+ resolved "https://registry.yarnpkg.com/ms/-/ms-0.7.1.tgz#9cd13c03adbff25b65effde7ce864ee952017098"
+
ms@2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8"
@@ -395,6 +1137,10 @@ muri@1.2.1:
version "1.2.1"
resolved "https://registry.yarnpkg.com/muri/-/muri-1.2.1.tgz#ec7ea5ce6ca6a523eb1ab35bacda5fa816c9aa3c"
+mute-stream@0.0.5:
+ version "0.0.5"
+ resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0"
+
mysql@^2.13.0:
version "2.13.0"
resolved "https://registry.yarnpkg.com/mysql/-/mysql-2.13.0.tgz#998f1f8ca46e2e3dd7149ce982413653986aae47"
@@ -411,6 +1157,10 @@ mz@^2.3.1:
object-assign "^4.0.1"
thenify-all "^1.0.0"
+natural-compare@^1.4.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
+
negotiator@0.6.1:
version "0.6.1"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.1.tgz#2b327184e8992101177b28563fb5e7102acd0ca9"
@@ -419,10 +1169,26 @@ nodemailer@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/nodemailer/-/nodemailer-4.0.1.tgz#b95864b07facee8287e8232effd6f1d56ec75ab2"
-object-assign@^4.0.1:
+number-is-nan@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d"
+
+object-assign@^4.0.1, object-assign@^4.1.0:
version "4.1.1"
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
+object-keys@^1.0.10, object-keys@^1.0.8:
+ version "1.0.11"
+ resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d"
+
+object.assign@^4.0.4:
+ version "4.0.4"
+ resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc"
+ dependencies:
+ define-properties "^1.1.2"
+ function-bind "^1.1.0"
+ object-keys "^1.0.10"
+
on-finished@^2.1.0, on-finished@~2.3.0:
version "2.3.0"
resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947"
@@ -433,28 +1199,140 @@ on-headers@~1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.1.tgz#928f5d0f470d49342651ea6794b0857c100693f7"
+once@^1.3.0:
+ version "1.4.0"
+ resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
+ dependencies:
+ wrappy "1"
+
+onetime@^1.0.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789"
+
only@0.0.2:
version "0.0.2"
resolved "https://registry.yarnpkg.com/only/-/only-0.0.2.tgz#2afde84d03e50b9a8edc444e30610a70295edfb4"
+optionator@^0.8.2:
+ version "0.8.2"
+ resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64"
+ dependencies:
+ deep-is "~0.1.3"
+ fast-levenshtein "~2.0.4"
+ levn "~0.3.0"
+ prelude-ls "~1.1.2"
+ type-check "~0.3.2"
+ wordwrap "~1.0.0"
+
+os-homedir@^1.0.0:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
+
+p-limit@^1.1.0:
+ version "1.1.0"
+ resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.1.0.tgz#b07ff2d9a5d88bec806035895a2bab66a27988bc"
+
+p-locate@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43"
+ dependencies:
+ p-limit "^1.1.0"
+
+parse-json@^2.2.0:
+ version "2.2.0"
+ resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9"
+ dependencies:
+ error-ex "^1.2.0"
+
parseurl@^1.3.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.1.tgz#c8ab8c9223ba34888aa64a297b28853bec18da56"
-path-is-absolute@1.0.1:
+path-exists@^2.0.0:
+ version "2.1.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b"
+ dependencies:
+ pinkie-promise "^2.0.0"
+
+path-exists@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515"
+
+path-is-absolute@1.0.1, path-is-absolute@^1.0.0:
version "1.0.1"
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
+path-is-inside@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53"
+
+path-parse@^1.0.5:
+ version "1.0.5"
+ resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1"
+
path-to-regexp@^1.1.1:
version "1.7.0"
resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.7.0.tgz#59fde0f435badacba103a84e9d3bc64e96b9937d"
dependencies:
isarray "0.0.1"
+pify@^2.0.0:
+ version "2.3.0"
+ resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c"
+
+pinkie-promise@^2.0.0:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa"
+ dependencies:
+ pinkie "^2.0.0"
+
+pinkie@^2.0.0:
+ version "2.0.4"
+ resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870"
+
+pkg-conf@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-conf/-/pkg-conf-2.0.0.tgz#071c87650403bccfb9c627f58751bfe47c067279"
+ dependencies:
+ find-up "^2.0.0"
+ load-json-file "^2.0.0"
+
+pkg-config@^1.1.0:
+ version "1.1.1"
+ resolved "https://registry.yarnpkg.com/pkg-config/-/pkg-config-1.1.1.tgz#557ef22d73da3c8837107766c52eadabde298fe4"
+ dependencies:
+ debug-log "^1.0.0"
+ find-root "^1.0.0"
+ xtend "^4.0.1"
+
+pkg-dir@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-1.0.0.tgz#7a4b508a8d5bb2d629d447056ff4e9c9314cf3d4"
+ dependencies:
+ find-up "^1.0.0"
+
+pkg-up@^1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-1.0.0.tgz#3e08fb461525c4421624a33b9f7e6d0af5b05a26"
+ dependencies:
+ find-up "^1.0.0"
+
+pluralize@^1.2.1:
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45"
+
+prelude-ls@~1.1.2:
+ version "1.1.2"
+ resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54"
+
process-nextick-args@~1.0.6:
version "1.0.7"
resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3"
+progress@^1.1.8:
+ version "1.1.8"
+ resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be"
+
qs@^6.4.0:
version "6.4.0"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.4.0.tgz#13e26d28ad6b0ffaa91312cd3bf708ed351e7233"
@@ -480,7 +1358,7 @@ readable-stream@1.1.14:
isarray "0.0.1"
string_decoder "~0.10.x"
-readable-stream@2.2.7:
+readable-stream@2.2.7, readable-stream@^2.2.2:
version "2.2.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.7.tgz#07057acbe2467b22042d36f98c5ad507054e95b1"
dependencies:
@@ -492,10 +1370,31 @@ readable-stream@2.2.7:
string_decoder "~1.0.0"
util-deprecate "~1.0.1"
+readline2@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ mute-stream "0.0.5"
+
+rechoir@^0.6.2:
+ version "0.6.2"
+ resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384"
+ dependencies:
+ resolve "^1.1.6"
+
regexp-clone@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/regexp-clone/-/regexp-clone-0.0.1.tgz#a7c2e09891fdbf38fbb10d376fb73003e68ac589"
+require-uncached@^1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3"
+ dependencies:
+ caller-path "^0.1.0"
+ resolve-from "^1.0.0"
+
require_optional@~1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/require_optional/-/require_optional-1.0.0.tgz#52a86137a849728eb60a55533617f8f914f59abf"
@@ -503,6 +1402,10 @@ require_optional@~1.0.0:
resolve-from "^2.0.0"
semver "^5.1.0"
+resolve-from@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226"
+
resolve-from@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-2.0.0.tgz#9480ab20e94ffa1d9e80a804c7ea147611966b57"
@@ -514,15 +1417,48 @@ resolve-path@^1.3.1:
http-errors "~1.5.0"
path-is-absolute "1.0.1"
+resolve@^1.1.6, resolve@^1.1.7:
+ version "1.3.3"
+ resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5"
+ dependencies:
+ path-parse "^1.0.5"
+
+restore-cursor@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541"
+ dependencies:
+ exit-hook "^1.0.0"
+ onetime "^1.0.0"
+
retry@0.6.0:
version "0.6.0"
resolved "https://registry.yarnpkg.com/retry/-/retry-0.6.0.tgz#1c010713279a6fd1e8def28af0c3ff1871caa537"
+rimraf@^2.2.8:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
+ dependencies:
+ glob "^7.0.5"
+
+run-async@^0.1.0:
+ version "0.1.0"
+ resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389"
+ dependencies:
+ once "^1.3.0"
+
+run-parallel@^1.1.2:
+ version "1.1.6"
+ resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039"
+
+rx-lite@^3.1.2:
+ version "3.1.2"
+ resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102"
+
safe-buffer@^5.0.1:
version "5.0.1"
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7"
-semver@^5.1.0:
+semver@5.3.0, semver@^5.1.0:
version "5.3.0"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
@@ -534,10 +1470,22 @@ setprototypeof@1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.0.3.tgz#66567e37043eeb4f04d91bd658c0cbefb55b8e04"
+shelljs@^0.7.5:
+ version "0.7.7"
+ resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1"
+ dependencies:
+ glob "^7.0.0"
+ interpret "^1.0.0"
+ rechoir "^0.6.2"
+
simple-lru-cache@0.0.x:
version "0.0.2"
resolved "https://registry.yarnpkg.com/simple-lru-cache/-/simple-lru-cache-0.0.2.tgz#d59cc3a193c1a5d0320f84ee732f6e4713e511dd"
+slice-ansi@0.0.4:
+ version "0.0.4"
+ resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35"
+
sliced@0.0.5:
version "0.0.5"
resolved "https://registry.yarnpkg.com/sliced/-/sliced-0.0.5.tgz#5edc044ca4eb6f7816d50ba2fc63e25d8fe4707f"
@@ -546,14 +1494,56 @@ sliced@1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/sliced/-/sliced-1.0.1.tgz#0b3a662b5d04c3177b1926bea82b03f837a2ef41"
+sprintf-js@~1.0.2:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
+
sqlstring@2.2.0:
version "2.2.0"
resolved "https://registry.yarnpkg.com/sqlstring/-/sqlstring-2.2.0.tgz#c3135c4ea8abcd7e7ee741a4966a891d86a4f191"
+standard-engine@~7.0.0:
+ version "7.0.0"
+ resolved "https://registry.yarnpkg.com/standard-engine/-/standard-engine-7.0.0.tgz#ebb77b9c8fc2c8165ffa353bd91ba0dff41af690"
+ dependencies:
+ deglob "^2.1.0"
+ get-stdin "^5.0.1"
+ minimist "^1.1.0"
+ pkg-conf "^2.0.0"
+
+standard@^10.0.2:
+ version "10.0.2"
+ resolved "https://registry.yarnpkg.com/standard/-/standard-10.0.2.tgz#974c1c53cc865b075a4b576e78441e1695daaf7b"
+ dependencies:
+ eslint "~3.19.0"
+ eslint-config-standard "10.2.1"
+ eslint-config-standard-jsx "4.0.1"
+ eslint-plugin-import "~2.2.0"
+ eslint-plugin-node "~4.2.2"
+ eslint-plugin-promise "~3.5.0"
+ eslint-plugin-react "~6.10.0"
+ eslint-plugin-standard "~3.0.1"
+ standard-engine "~7.0.0"
+
"statuses@>= 1.3.1 < 2", statuses@^1.2.0:
version "1.3.1"
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.3.1.tgz#faf51b9eb74aaef3b3acf4ad5f61abf24cb7b93e"
+string-width@^1.0.1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
+ dependencies:
+ code-point-at "^1.0.0"
+ is-fullwidth-code-point "^1.0.0"
+ strip-ansi "^3.0.0"
+
+string-width@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.0.0.tgz#635c5436cc72a6e0c387ceca278d4e2eec52687e"
+ dependencies:
+ is-fullwidth-code-point "^2.0.0"
+ strip-ansi "^3.0.0"
+
string_decoder@~0.10.x:
version "0.10.31"
resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94"
@@ -564,6 +1554,39 @@ string_decoder@~1.0.0:
dependencies:
safe-buffer "^5.0.1"
+strip-ansi@^3.0.0:
+ version "3.0.1"
+ resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf"
+ dependencies:
+ ansi-regex "^2.0.0"
+
+strip-bom@^3.0.0:
+ version "3.0.0"
+ resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
+
+strip-json-comments@~2.0.1:
+ version "2.0.1"
+ resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
+
+supports-color@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
+
+table@^3.7.8:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f"
+ dependencies:
+ ajv "^4.7.0"
+ ajv-keywords "^1.0.0"
+ chalk "^1.1.1"
+ lodash "^4.0.0"
+ slice-ansi "0.0.4"
+ string-width "^2.0.0"
+
+text-table@~0.2.0:
+ version "0.2.0"
+ resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4"
+
thenify-all@^1.0.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726"
@@ -576,6 +1599,20 @@ thenify-all@^1.0.0:
dependencies:
any-promise "^1.0.0"
+through@^2.3.6:
+ version "2.3.8"
+ resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
+
+tryit@^1.0.1:
+ version "1.0.3"
+ resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb"
+
+type-check@~0.3.2:
+ version "0.3.2"
+ resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72"
+ dependencies:
+ prelude-ls "~1.1.2"
+
type-is@^1.5.5, type-is@^1.6.14:
version "1.6.15"
resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.15.tgz#cab10fb4909e441c82842eafe1ad646c81804410"
@@ -583,16 +1620,30 @@ type-is@^1.5.5, type-is@^1.6.14:
media-typer "0.3.0"
mime-types "~2.1.15"
+typedarray@^0.0.6:
+ version "0.0.6"
+ resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
+
uid-safe@^2.1.3:
version "2.1.4"
resolved "https://registry.yarnpkg.com/uid-safe/-/uid-safe-2.1.4.tgz#3ad6f38368c6d4c8c75ec17623fb79aa1d071d81"
dependencies:
random-bytes "~1.0.0"
+uniq@^1.0.1:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff"
+
unpipe@1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
+user-home@^2.0.0:
+ version "2.0.0"
+ resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f"
+ dependencies:
+ os-homedir "^1.0.0"
+
util-deprecate@~1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
@@ -600,3 +1651,21 @@ util-deprecate@~1.0.1:
vary@^1.0.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.1.tgz#67535ebb694c1d52257457984665323f587e8d37"
+
+wordwrap@~1.0.0:
+ version "1.0.0"
+ resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb"
+
+wrappy@1:
+ version "1.0.2"
+ resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
+
+write@^0.2.1:
+ version "0.2.1"
+ resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757"
+ dependencies:
+ mkdirp "^0.5.1"
+
+xtend@^4.0.0, xtend@^4.0.1:
+ version "4.0.1"
+ resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.1.tgz#a5c6d532be656e23db820efb943a1f04998d63af"